Generated by Cython 3.3.0

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_19 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_test, __pyx_t_19) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 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: """
 00030: API for fast data ingestion into and querying from QuestDB.
 00031: """
 00032: 
+00033: __all__ = [
  {
    PyObject* __pyx_temp[30] = {__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_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};
    __pyx_t_4 = __Pyx_PyList_FromArray(__pyx_temp, 30); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 33, __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, 33, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 00034:     'Char',
 00035:     'ConnectionEvent',
 00036:     'ConnectionEventKind',
 00037:     'DateMillis',
 00038:     'ExecDone',
 00039:     'Geohash',
 00040:     'Long256',
 00041:     'PooledReader',
 00042:     'PooledSender',
 00043:     'Protocol',
 00044:     'QueryResult',
 00045:     'QuestDB',
 00046:     'QuestDBError',
 00047:     'QuestDBErrorCode',
 00048:     'QuestDBServerRejectionError',
 00049:     'QwpWsProgress',
 00050:     'Sender',
 00051:     'SenderError',
 00052:     'SenderErrorCategory',
 00053:     'SenderErrorPolicy',
 00054:     'SenderTransaction',
 00055:     'ServerInfo',
 00056:     'ServerRole',
 00057:     'ServerTimestamp',
 00058:     'ServerTimestampType',
 00059:     'TimestampMicros',
 00060:     'TimestampNanos',
 00061:     'TlsCa',
 00062:     'UnsupportedDataFrameShapeError',
 00063:     'WARN_HIGH_RECONNECTS',
 00064: ]
 00065: 
 00066: # For prototypes: https://github.com/cython/cython/tree/master/Cython/Includes
 00067: from libc.stdint cimport uint8_t, uint16_t, uint64_t, int64_t, int32_t, uint32_t, \
 00068:     uintptr_t, INT64_MAX, INT64_MIN
 00069: from libc.stdlib cimport malloc, calloc, realloc, free, qsort
 00070: from libc.string cimport strncmp, memset, memcpy, memcmp, strlen
 00071: from libc.math cimport isnan, floor
 00072: from cpython.datetime cimport datetime as cp_datetime
 00073: from cpython.datetime cimport timedelta as cp_timedelta
 00074: from cpython.datetime cimport import_datetime, datetime_new
 00075: from cpython.datetime cimport (
 00076:     PyDateTime_GET_YEAR, PyDateTime_GET_MONTH, PyDateTime_GET_DAY,
 00077:     PyDateTime_DATE_GET_HOUR, PyDateTime_DATE_GET_MINUTE,
 00078:     PyDateTime_DATE_GET_SECOND, PyDateTime_DATE_GET_MICROSECOND,
 00079: )
 00080: from cpython.bool cimport bool
 00081: from cpython.ref cimport Py_XDECREF
 00082: from cpython.weakref cimport PyWeakref_NewRef, PyWeakref_GetRef
 00083: from cpython.object cimport PyObject, PyTypeObject, PyObject_TypeCheck
 00084: from cpython.buffer cimport Py_buffer, PyObject_CheckBuffer, \
 00085:     PyObject_GetBuffer, PyBuffer_Release, PyBUF_SIMPLE
 00086: from cpython.pycapsule cimport (PyCapsule_Destructor,
 00087:                                 PyCapsule_GetPointer, PyCapsule_IsValid,
 00088:                                 PyCapsule_New)
 00089: from cpython.pythread cimport (PyThread_tss_create, PyThread_tss_get,
 00090:                                PyThread_tss_set)
 00091: from cpython.pystate cimport PyThreadState_GetDict
 00092: from cpython.ref cimport Py_INCREF, Py_DECREF
 00093: from cpython.exc cimport PyErr_Fetch, PyErr_Restore
 00094: 
 00095: from .line_sender cimport *
 00096: from .rpyutils cimport *
 00097: from .conf_str cimport *
 00098: from .arrow_c_data_interface cimport *
 00099: from .extra_cpython cimport *
 00100: from ._client_helper cimport *
 00101: 
 00102: # An int we use only for error reporting.
 00103: #  0 is success.
 00104: # -1 is failure.
 00105: ctypedef int void_int
 00106: 
 00107: import cython
 00108: 
 00109: # Imported before the includes because `dataframe.pxi` binds two of its
 00110: # classes at module-init time.
+00111: 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, 111, __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, 111, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 00112: 
 00113: include "dataframe.pxi"
 00114: include "egress.pxi"
 00115: 
+00116: 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, 116, __pyx_L1_error)
  }
  __pyx_t_17 = __pyx_t_3;
  __Pyx_GOTREF(__pyx_t_17);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_Enum};
    __pyx_t_9 = 0; {
      __pyx_t_18 = __Pyx_ImportFrom(__pyx_t_17, __pyx_imported_names[__pyx_t_9]); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 116, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_9], __pyx_t_18) < (0)) __PYX_ERR(0, 116, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+00117: 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, 117, __pyx_L1_error)
  }
  __pyx_t_17 = __pyx_t_3;
  __Pyx_GOTREF(__pyx_t_17);
  {
    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_18 = __Pyx_ImportFrom(__pyx_t_17, __pyx_imported_names[__pyx_t_9]); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 117, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_9], __pyx_t_18) < (0)) __PYX_ERR(0, 117, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 00118:     List, Dict, Union, Any, Optional, SupportsIndex, Tuple)
+00119: 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, 119, __pyx_L1_error)
  }
  __pyx_t_17 = __pyx_t_3;
  __Pyx_GOTREF(__pyx_t_17);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_dataclass};
    __pyx_t_9 = 0; {
      __pyx_t_18 = __Pyx_ImportFrom(__pyx_t_17, __pyx_imported_names[__pyx_t_9]); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 119, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_9], __pyx_t_18) < (0)) __PYX_ERR(0, 119, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 00120: from cpython.bytes cimport (PyBytes_FromStringAndSize,
 00121:                             PyBytes_GET_SIZE, PyBytes_AsString, PyBytes_Check)
 00122: from cpython.bytearray cimport (PyByteArray_AsString, PyByteArray_Size,
 00123:                                PyByteArray_Check)
 00124: from cpython.long cimport PyLong_AsLongLongAndOverflow
 00125: from cpython.memoryview cimport PyMemoryView_Check
 00126: 
+00127: 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, 127, __pyx_L1_error)
  __pyx_t_17 = __pyx_t_3;
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_datetime, __pyx_t_17) < (0)) __PYX_ERR(0, 127, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+00128: 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, 128, __pyx_L1_error)
  __pyx_t_17 = __pyx_t_3;
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_decimal, __pyx_t_17) < (0)) __PYX_ERR(0, 128, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+00129: 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, 129, __pyx_L1_error)
  __pyx_t_17 = __pyx_t_3;
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_operator, __pyx_t_17) < (0)) __PYX_ERR(0, 129, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+00130: 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, 130, __pyx_L1_error)
  __pyx_t_17 = __pyx_t_3;
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_numbers, __pyx_t_17) < (0)) __PYX_ERR(0, 130, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+00131: 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, 131, __pyx_L1_error)
  __pyx_t_17 = __pyx_t_3;
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_os, __pyx_t_17) < (0)) __PYX_ERR(0, 131, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+00132: 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, 132, __pyx_L1_error)
  __pyx_t_17 = __pyx_t_3;
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_sys, __pyx_t_17) < (0)) __PYX_ERR(0, 132, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+00133: import threading
  __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_threading, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 133, __pyx_L1_error)
  __pyx_t_17 = __pyx_t_3;
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_threading, __pyx_t_17) < (0)) __PYX_ERR(0, 133, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+00134: 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, 134, __pyx_L1_error)
  __pyx_t_17 = __pyx_t_3;
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_time, __pyx_t_17) < (0)) __PYX_ERR(0, 134, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+00135: 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, 135, __pyx_L1_error)
  __pyx_t_17 = __pyx_t_3;
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_uuid, __pyx_t_17) < (0)) __PYX_ERR(0, 135, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+00136: 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, 136, __pyx_L1_error)
  __pyx_t_17 = __pyx_t_3;
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_warnings, __pyx_t_17) < (0)) __PYX_ERR(0, 136, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+00137: import logging
  __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_logging, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 137, __pyx_L1_error)
  __pyx_t_17 = __pyx_t_3;
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_logging, __pyx_t_17) < (0)) __PYX_ERR(0, 137, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 00138: 
+00139: 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, 139, __pyx_L1_error)
  __pyx_t_17 = __pyx_t_3;
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_numpy, __pyx_t_17) < (0)) __PYX_ERR(0, 139, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 00140: cimport numpy as cnp
 00141: from numpy cimport NPY_DOUBLE, PyArrayObject
 00142: 
 00143: # Functions we need to import as `PyObject` to avoid Cython's `object` type
 00144: from .extra_numpy cimport *
 00145: 
+00146: cnp.import_array()
  __pyx_t_12 = __pyx_f_5numpy_import_array(); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 146, __pyx_L1_error)

+00147: import_datetime()
  __pyx_f_7cpython_8datetime_import_datetime();
 00148: 
+00149: cdef bint _dataframe_columnar_count_io_stats = False
  __pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats = 0;
+00150: cdef uint64_t _dataframe_columnar_flush_calls = 0
  __pyx_v_7questdb_7_client__dataframe_columnar_flush_calls = 0;
+00151: cdef uint64_t _dataframe_columnar_flush_ns = 0
  __pyx_v_7questdb_7_client__dataframe_columnar_flush_ns = 0;
+00152: cdef uint64_t _dataframe_columnar_sync_calls = 0
  __pyx_v_7questdb_7_client__dataframe_columnar_sync_calls = 0;
+00153: cdef uint64_t _dataframe_columnar_sync_ns = 0
  __pyx_v_7questdb_7_client__dataframe_columnar_sync_ns = 0;
+00154: cdef uint64_t _dataframe_columnar_flush_retry_syncs = 0
  __pyx_v_7questdb_7_client__dataframe_columnar_flush_retry_syncs = 0;
 00155: 
+00156: cdef size_t _QWP_MAX_DEFERRED_ARROW_FRAMES = 100
  __pyx_v_7questdb_7_client__QWP_MAX_DEFERRED_ARROW_FRAMES = 0x64;
 00157: 
 00158: # Default rows per columnar batch. Only a pipelining-granularity default: the
 00159: # column sender splits any frame exceeding the negotiated batch cap regardless
 00160: # of this size. Mirrors the Rust core's `DEFAULT_MAX_CHUNK_ROWS`; both sides
 00161: # pin the value in tests so it cannot drift. Keep them in sync when changing it.
+00162: 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, 162, __pyx_L1_error)
 00163: 
 00164: 
 00165: # This value is automatically updated by the `bump2version` tool.
 00166: # If you need to update it, also update the search definition in
 00167: # .bumpversion.cfg.
+00168: VERSION = '6.0.0'
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_VERSION, __pyx_mstate_global->__pyx_kp_u_6_0_0) < (0)) __PYX_ERR(0, 168, __pyx_L1_error)
 00169: 
+00170: 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, 170, __pyx_L1_error)
 00171: 
 00172: 
+00173: 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;
}
+00174:     return gs[0] == NULL
  {

    __pyx_r = ((__pyx_v_gs[0]) == NULL);
  }
  goto __pyx_L0;
 00175: 
 00176: 
+00177: 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;
}
 00178:     """Returns True if previously had the GIL, False otherwise."""
+00179:     if _has_gil(gs):
  __pyx_t_1 = __pyx_f_7questdb_7_client__has_gil(__pyx_v_gs);

  if (__pyx_t_1) {
/* … */
  }
+00180:         gs[0] = PyEval_SaveThread()
    (__pyx_v_gs[0]) = PyEval_SaveThread();
+00181:         return True
    {

      __pyx_r = 1;
    }
    goto __pyx_L0;
+00182:     return False
  {

    __pyx_r = 0;
  }
  goto __pyx_L0;
 00183: 
 00184: 
+00185: 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 */

}
+00186:     if not _has_gil(gs):
  __pyx_t_1 = (!__pyx_f_7questdb_7_client__has_gil(__pyx_v_gs));

  if (__pyx_t_1) {
/* … */
  }
+00187:         PyEval_RestoreThread(gs[0])
    PyEval_RestoreThread((__pyx_v_gs[0]));
+00188:         gs[0] = NULL
    (__pyx_v_gs[0]) = NULL;
 00189: 
 00190: 
+00191: class QuestDBErrorCode(Enum):
  __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_Enum); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  {
    PyObject* __pyx_temp[1] = {__pyx_t_17};
    __pyx_t_18 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 191, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_18);
  }
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __pyx_t_17 = __Pyx_PEP560_update_bases(__pyx_t_18); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_19 = __Pyx_CalculateMetaclass(NULL, __pyx_t_17); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __pyx_t_20 = __Pyx_Py3MetaclassPrepare(__pyx_t_19, __pyx_t_17, __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, 191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  if (__pyx_t_17 != __pyx_t_18) {
    if (unlikely((PyDict_SetItemString(__pyx_t_20, "__orig_bases__", __pyx_t_18) < 0))) __PYX_ERR(0, 191, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
/* … */
  __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode, __pyx_t_17, __pyx_t_20, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 191, __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_QuestDBErrorCode, __pyx_t_4) < (0)) __PYX_ERR(0, 191, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 00192:     """Category of Error."""
+00193:     CouldNotResolveAddr = line_sender_error_could_not_resolve_addr
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_could_not_resolve_addr); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_CouldNotResolveAddr, __pyx_t_18) < (0)) __PYX_ERR(0, 193, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00194:     InvalidApiCall = line_sender_error_invalid_api_call
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_invalid_api_call); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 194, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_InvalidApiCall, __pyx_t_18) < (0)) __PYX_ERR(0, 194, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00195:     SocketError = line_sender_error_socket_error
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_socket_error); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 195, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_SocketError, __pyx_t_18) < (0)) __PYX_ERR(0, 195, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00196:     InvalidUtf8 = line_sender_error_invalid_utf8
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_invalid_utf8); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 196, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_InvalidUtf8, __pyx_t_18) < (0)) __PYX_ERR(0, 196, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00197:     InvalidName = line_sender_error_invalid_name
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_invalid_name); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 197, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_InvalidName, __pyx_t_18) < (0)) __PYX_ERR(0, 197, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00198:     InvalidTimestamp = line_sender_error_invalid_timestamp
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_invalid_timestamp); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 198, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp, __pyx_t_18) < (0)) __PYX_ERR(0, 198, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00199:     AuthError = line_sender_error_auth_error
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_auth_error); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 199, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_AuthError, __pyx_t_18) < (0)) __PYX_ERR(0, 199, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00200:     TlsError = line_sender_error_tls_error
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_tls_error); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_TlsError, __pyx_t_18) < (0)) __PYX_ERR(0, 200, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00201:     HttpNotSupported = line_sender_error_http_not_supported
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_http_not_supported); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 201, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_HttpNotSupported, __pyx_t_18) < (0)) __PYX_ERR(0, 201, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00202:     ServerFlushError = line_sender_error_server_flush_error
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_flush_error); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerFlushError, __pyx_t_18) < (0)) __PYX_ERR(0, 202, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00203:     ServerRejection = line_sender_error_server_rejection
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_rejection); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 203, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerRejection, __pyx_t_18) < (0)) __PYX_ERR(0, 203, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00204:     RoleMismatch = line_sender_error_role_mismatch
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_role_mismatch); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 204, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_RoleMismatch, __pyx_t_18) < (0)) __PYX_ERR(0, 204, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00205:     ConfigError = line_sender_error_config_error
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_config_error); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 205, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ConfigError, __pyx_t_18) < (0)) __PYX_ERR(0, 205, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00206:     ArrayError = line_sender_error_array_error
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_array_error); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 206, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ArrayError, __pyx_t_18) < (0)) __PYX_ERR(0, 206, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00207:     ProtocolVersionError = line_sender_error_protocol_version_error
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_protocol_version_error); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ProtocolVersionError, __pyx_t_18) < (0)) __PYX_ERR(0, 207, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00208:     DecimalError = line_sender_error_invalid_decimal
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_invalid_decimal); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_DecimalError, __pyx_t_18) < (0)) __PYX_ERR(0, 208, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00209:     ArrowUnsupportedColumnKind = line_sender_error_arrow_unsupported_column_kind
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_arrow_unsupported_column_kind); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 209, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ArrowUnsupportedColumnKind, __pyx_t_18) < (0)) __PYX_ERR(0, 209, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00210:     ArrowIngest = line_sender_error_arrow_ingest
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_arrow_ingest); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 210, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ArrowIngest, __pyx_t_18) < (0)) __PYX_ERR(0, 210, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00211:     FailoverRetry = line_sender_error_failover_retry
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_failover_retry); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 211, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_FailoverRetry, __pyx_t_18) < (0)) __PYX_ERR(0, 211, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00212:     ConnectTimeout = line_sender_error_connect_timeout
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_connect_timeout); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 212, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ConnectTimeout, __pyx_t_18) < (0)) __PYX_ERR(0, 212, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 00213:     # Query / reader (egress) categories. The error model is unified across
 00214:     # ingest and query, so these are real FFI codes (no longer bucketed).
+00215:     HandshakeError = line_sender_error_handshake_error
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_handshake_error); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 215, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_HandshakeError, __pyx_t_18) < (0)) __PYX_ERR(0, 215, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00216:     UnsupportedServer = line_sender_error_unsupported_server
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_unsupported_server); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 216, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_UnsupportedServer, __pyx_t_18) < (0)) __PYX_ERR(0, 216, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00217:     ProtocolError = line_sender_error_protocol_error
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_protocol_error); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 217, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ProtocolError, __pyx_t_18) < (0)) __PYX_ERR(0, 217, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00218:     InvalidBind = line_sender_error_invalid_bind
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_invalid_bind); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 218, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_InvalidBind, __pyx_t_18) < (0)) __PYX_ERR(0, 218, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00219:     ServerSchemaMismatch = line_sender_error_server_schema_mismatch
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_schema_mismatch); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 219, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerSchemaMismatch, __pyx_t_18) < (0)) __PYX_ERR(0, 219, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00220:     ServerParseError = line_sender_error_server_parse_error
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_parse_error); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 220, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerParseError, __pyx_t_18) < (0)) __PYX_ERR(0, 220, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00221:     ServerInternalError = line_sender_error_server_internal_error
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_internal_error); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerInternalError, __pyx_t_18) < (0)) __PYX_ERR(0, 221, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00222:     ServerSecurityError = line_sender_error_server_security_error
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_security_error); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 222, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerSecurityError, __pyx_t_18) < (0)) __PYX_ERR(0, 222, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00223:     LimitExceeded = line_sender_error_limit_exceeded
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_limit_exceeded); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 223, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_LimitExceeded, __pyx_t_18) < (0)) __PYX_ERR(0, 223, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00224:     ServerLimitExceeded = line_sender_error_server_limit_exceeded
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_limit_exceeded); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerLimitExceeded, __pyx_t_18) < (0)) __PYX_ERR(0, 224, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00225:     Cancelled = line_sender_error_cancelled
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_cancelled); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 225, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_Cancelled, __pyx_t_18) < (0)) __PYX_ERR(0, 225, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00226:     FailoverWouldDuplicate = line_sender_error_failover_would_duplicate
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_failover_would_duplicate); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 226, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_FailoverWouldDuplicate, __pyx_t_18) < (0)) __PYX_ERR(0, 226, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00227:     SchemaDrift = line_sender_error_schema_drift
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_schema_drift); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 227, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_SchemaDrift, __pyx_t_18) < (0)) __PYX_ERR(0, 227, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00228:     NoSchema = line_sender_error_no_schema
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_no_schema); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 228, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_NoSchema, __pyx_t_18) < (0)) __PYX_ERR(0, 228, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00229:     ArrowExport = line_sender_error_arrow_export
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_arrow_export); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 229, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ArrowExport, __pyx_t_18) < (0)) __PYX_ERR(0, 229, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00230:     BatchTooLarge = line_sender_error_batch_too_large
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_batch_too_large); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 230, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_BatchTooLarge, __pyx_t_18) < (0)) __PYX_ERR(0, 230, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00231:     StoreResendRequired = line_sender_error_store_resend_required
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_store_resend_required); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 231, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_StoreResendRequired, __pyx_t_18) < (0)) __PYX_ERR(0, 231, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00232:     SymbolDictFull = line_sender_error_symbol_dict_full
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_symbol_dict_full); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 232, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_SymbolDictFull, __pyx_t_18) < (0)) __PYX_ERR(0, 232, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00233:     QueryTimeout = line_sender_error_query_timeout
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_query_timeout); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 233, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_QueryTimeout, __pyx_t_18) < (0)) __PYX_ERR(0, 233, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 00234:     # Python-only sentinel with no backing FFI code: raised by the Cython
 00235:     # DataFrame-shape validation path. Sits in a reserved high band, disjoint
 00236:     # from the contiguous FFI code space, so an appended FFI variant can never
 00237:     # collide with it. Compared by identity; never sent over FFI.
+00238:     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, 238, __pyx_L1_error)
 00239: 
+00240:     def __str__(self) -> str:
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_16QuestDBErrorCode_1__str__(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 240, __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, 240, __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, 240, __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, 240, __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, 240, __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, 240, __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_18 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 240, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_str_2) < (0)) __PYX_ERR(0, 240, __pyx_L1_error)
  __pyx_t_4 = __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[64])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 240, __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_18);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_str, __pyx_t_4) < (0)) __PYX_ERR(0, 240, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 00241:         """Return the name of the enum."""
+00242:         return self.name
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 242, __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, 242, __pyx_L1_error)
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = ((PyObject*)__pyx_t_1);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 00243: 
 00244: 
+00245: class QuestDBError(Exception):
  {
    PyObject* __pyx_temp[1] = {((PyObject *)(((PyTypeObject*)PyExc_Exception)))};
    __pyx_t_17 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 245, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
  }
  __pyx_t_19 = __Pyx_PEP560_update_bases(__pyx_t_17); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __pyx_t_20 = __Pyx_CalculateMetaclass(NULL, __pyx_t_19); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_20, __pyx_t_19, __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_4)) __PYX_ERR(0, 245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__pyx_t_19 != __pyx_t_17) {
    if (unlikely((PyDict_SetItemString(__pyx_t_4, "__orig_bases__", __pyx_t_17) < 0))) __PYX_ERR(0, 245, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __pyx_t_17 = PyList_New(0); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
/* … */
  __pyx_t_16 = __Pyx_Py3ClassCreate(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_QuestDBError, __pyx_t_19, __pyx_t_4, NULL, 0, 0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 245, __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_CyFunction_InitClassCell(__pyx_t_17, __pyx_t_16) < (0)) __PYX_ERR(0, 245, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_QuestDBError, __pyx_t_16) < (0)) __PYX_ERR(0, 245, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 00246:     """An error whilst using the QuestDB client."""
+00247:     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_VECTORCALL
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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 247, __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, 247, __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, 247, __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, 247, __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, 247, __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, 247, __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, 247, __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, 247, __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, 247, __pyx_L3_error)
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 247, __pyx_L3_error)
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 247, __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, 247, __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_18 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 247, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_in_doubt, ((PyObject*)Py_False)) < (0)) __PYX_ERR(0, 247, __pyx_L1_error)
  __pyx_t_16 = __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[65])); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 247, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_16);
  #endif
  PyList_Append(__pyx_t_17, __pyx_t_16);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_16, __pyx_mstate_global->__pyx_tuple[49]);
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_16, __pyx_t_18);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_init, __pyx_t_16) < (0)) __PYX_ERR(0, 247, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+00248:         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, 248, __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, 248, __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, 248, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+00249:         self._code = code
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_code_2, __pyx_v_code) < (0)) __PYX_ERR(0, 249, __pyx_L1_error)
+00250:         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, 250, __pyx_L1_error)
+00251:         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, 251, __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, 251, __pyx_L1_error)
  __Pyx_DECREF((PyObject *)__pyx_t_1); __pyx_t_1 = 0;
 00252: 
+00253:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12QuestDBError_3code(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 253, __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, 253, __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, 253, __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, 253, __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, 253, __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, 253, __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_18 = NULL;
  __pyx_t_21 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 253, __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, 253, __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[66])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 253, __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_18, __pyx_t_25};
    __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_25); __pyx_t_25 = 0;
    if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 253, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
  }
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_code, __pyx_t_16) < (0)) __PYX_ERR(0, 253, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 00254:     def code(self) -> QuestDBErrorCode:
 00255:         """Return the error code."""
+00256:         return self._code
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_code_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 00257: 
+00258:     @property
/* Python wrapper */
static PyLongObject *__pyx_pw_7questdb_7_client_12QuestDBError_5in_doubt(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 258, __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, 258, __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, 258, __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, 258, __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, 258, __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, 258, __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_18 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 258, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(0, 258, __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[67])); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 258, __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_18);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_25, __pyx_t_21};
    __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_25); __pyx_t_25 = 0;
    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
    if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 258, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
  }
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_t_16) < (0)) __PYX_ERR(0, 258, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 00259:     def in_doubt(self) -> bool:
 00260:         """
 00261:         Whether the failed ingestion operation may already have delivered
 00262:         its input. For QWP ``dataframe()``, this covers the entire DataFrame,
 00263:         including earlier batches from the same call, even when a later batch
 00264:         fails local validation. For a sender flush, it describes that flush;
 00265:         it does not summarize earlier independent calls on the sender.
 00266: 
 00267:         Retrying that input when this is true requires an appropriate
 00268:         application- or table-level deduplication guarantee. A false value says
 00269:         only that duplicate delivery is not known to be possible; a consumed
 00270:         one-shot input may still be impossible to replay.
 00271:         """
+00272:         return self._in_doubt
  __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, 272, __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, 272, __pyx_L1_error)
  {
    PyLongObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = ((PyLongObject *)__pyx_t_1);
    }
    __Pyx_XDECREF((PyObject *)__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 00273: 
+00274:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12QuestDBError_7sender_error(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 274, __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, 274, __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, 274, __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, 274, __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, 274, __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, 274, __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[68])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 274, __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_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_21); __pyx_t_21 = 0;
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
    if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 274, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
  }
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_sender_error, __pyx_t_16) < (0)) __PYX_ERR(0, 274, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 00275:     def sender_error(self):
 00276:         """
 00277:         Return the structured QWP/WebSocket diagnostic, if this error carries
 00278:         one from a QWP/WebSocket sender failure.
 00279:         """
+00280:         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, 280, __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) {
/* … */
  }
+00281:             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, 281, __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, 281, __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, 281, __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, 281, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+00282:         return self._sender_error
  __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, 282, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 00283: 
 00284: 
+00285: class QuestDBServerRejectionError(QuestDBError):
  __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 285, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  {
    PyObject* __pyx_temp[1] = {__pyx_t_19};
    __pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 285, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_20);
  }
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __pyx_t_19 = __Pyx_PEP560_update_bases(__pyx_t_20); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 285, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __pyx_t_4 = __Pyx_CalculateMetaclass(NULL, __pyx_t_19); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 285, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_16 = __Pyx_Py3MetaclassPrepare(__pyx_t_4, __pyx_t_19, __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_16)) __PYX_ERR(0, 285, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  if (__pyx_t_19 != __pyx_t_20) {
    if (unlikely((PyDict_SetItemString(__pyx_t_16, "__orig_bases__", __pyx_t_20) < 0))) __PYX_ERR(0, 285, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __pyx_t_20 = __Pyx_Py3ClassCreate(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBServerRejectionError, __pyx_t_19, __pyx_t_16, NULL, 0, 0); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 285, __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, 285, __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_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 00286:     """
 00287:     A terminal QWP/WebSocket server rejection.
 00288: 
 00289:     The structured server payload is available through
 00290:     :attr:`QuestDBError.sender_error`.
 00291:     """
 00292: 
 00293: 
+00294: class UnsupportedDataFrameShapeError(QuestDBError):
  __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 294, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  {
    PyObject* __pyx_temp[1] = {__pyx_t_19};
    __pyx_t_4 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 294, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __pyx_t_19 = __Pyx_PEP560_update_bases(__pyx_t_4); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 294, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __pyx_t_16 = __Pyx_CalculateMetaclass(NULL, __pyx_t_19); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 294, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_20 = __Pyx_Py3MetaclassPrepare(__pyx_t_16, __pyx_t_19, __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, 294, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  if (__pyx_t_19 != __pyx_t_4) {
    if (unlikely((PyDict_SetItemString(__pyx_t_20, "__orig_bases__", __pyx_t_4) < 0))) __PYX_ERR(0, 294, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 294, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
/* … */
  __pyx_t_17 = __Pyx_Py3ClassCreate(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_UnsupportedDataFrameShapeError, __pyx_t_19, __pyx_t_20, NULL, 0, 0); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 294, __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_4, __pyx_t_17) < (0)) __PYX_ERR(0, 294, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_UnsupportedDataFrameShapeError, __pyx_t_17) < (0)) __PYX_ERR(0, 294, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 00295:     """
 00296:     A DataFrame shape is not supported by the optimized columnar client path.
 00297: 
 00298:     ``column_failures`` carries structured per-column rejection details where
 00299:     available; each is a ``dict`` with ``column`` (name or ``None`` for a
 00300:     whole-frame issue), ``target``, ``source_code``, and ``reason``. The same
 00301:     per-column reasons are also folded into ``str(exc)`` so a bare
 00302:     ``print(exc)`` explains *why* the frame was rejected, and — when the
 00303:     designated timestamp is at fault — how to fix it on
 00304:     :meth:`QuestDB.dataframe` (name a valid timestamp column, or pass
 00305:     ``ServerTimestamp``).
 00306:     """
+00307:     def __init__(self, msg, column_failures=None):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_30UnsupportedDataFrameShapeError_1__init__(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 307, __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, 307, __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, 307, __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, 307, __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, 307, __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, 307, __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, 307, __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, 307, __pyx_L3_error)
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 307, __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, 307, __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_17 = __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[69])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 307, __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_4, __pyx_t_17);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_17, __pyx_mstate_global->__pyx_tuple[49]);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_init, __pyx_t_17) < (0)) __PYX_ERR(0, 307, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+00308:         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, 308, __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, 308, __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, 308, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+00309:         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, 309, __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, 309, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_t_1 = __pyx_t_4;
  __Pyx_INCREF(__pyx_t_1);
+00310:             QuestDBErrorCode.BadDataFrame,
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 310, __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, 310, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+00311:             _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, 311, __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, 311, __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, 311, __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, 311, __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, 309, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 00312: 
 00313: 
+00314: 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_11);
  __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;
}
 00315:     # Surface the per-column reasons (otherwise stranded on the
 00316:     # `.column_failures` attribute) so a plain `str(exc)` says what to fix
 00317:     # instead of a bare "columnar v1". When the designated timestamp is the
 00318:     # problem, point at the two client-side remedies (name a valid column,
 00319:     # or let the server stamp) — keeping the user on QuestDB.dataframe()
 00320:     # rather than steering them off to the row path.
+00321:     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, 321, __pyx_L1_error)
    __pyx_t_1 = (__pyx_temp != 0);
  }

  __pyx_t_2 = (!__pyx_t_1);


  if (__pyx_t_2) {
/* … */
  }
+00322:         return msg
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_msg);
        __pyx_r = __pyx_v_msg;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+00323:     cdef list lines = [msg]
  __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 323, __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, 323, __pyx_L1_error);
  __pyx_v_lines = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
 00324:     cdef object failure, column, reason
+00325:     cdef bint ts_related = False
  __pyx_v_ts_related = 0;
+00326:     for failure in column_failures:
  if (unlikely(__pyx_v_column_failures == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not iterable");
    __PYX_ERR(0, 326, __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, 326, __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, 326, __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;
+00327:         if isinstance(failure, dict):
    __pyx_t_2 = PyDict_Check(__pyx_v_failure); 
    if (__pyx_t_2) {
/* … */
      goto __pyx_L6;
    }
+00328:             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, 328, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      __Pyx_XDECREF_SET(__pyx_v_column, __pyx_t_5);
      __pyx_t_5 = 0;
+00329:             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, 329, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      __Pyx_XDECREF_SET(__pyx_v_reason, __pyx_t_5);
      __pyx_t_5 = 0;
+00330:             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, 330, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_designated_timestamp, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 330, __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) {
/* … */
      }
+00331:                     or 'ServerTimestamp' in str(reason)):
      __pyx_t_5 = __Pyx_PyObject_Unicode(__pyx_v_reason); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 331, __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, 331, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

      __pyx_t_2 = __pyx_t_1;

      __pyx_L8_bool_binop_done:;
+00332:                 ts_related = True
        __pyx_v_ts_related = 1;
 00333:         else:
+00334:             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:;
+00335:         if column is not None:
    __pyx_t_2 = (__pyx_v_column != Py_None);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L10;
    }
+00336:             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, 336, __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, 336, __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__2;
      __pyx_t_8[3] = __pyx_t_5;
      __pyx_t_9 = 13;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8[3]);
      #endif
      __pyx_t_10 = 0;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_10 |= __Pyx_PyUnicode_KIND_04(__pyx_t_8[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_8[3]);
      #endif
      __pyx_t_11 = __Pyx_PyUnicode_Join(__pyx_t_8, 4, __pyx_t_9, __pyx_t_10);
      if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 336, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_lines, __pyx_t_11); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 336, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;

 00337:         else:
+00338:             lines.append(f'  - {reason}')
    /*else*/ {
      __pyx_t_11 = __Pyx_PyObject_FormatSimple(__pyx_v_reason, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 338, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u__24, __pyx_t_11); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 338, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_lines, __pyx_t_5); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 338, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

    }
    __pyx_L10:;
+00339:     if ts_related:
  if (__pyx_v_ts_related) {
/* … */
  }
+00340:         lines.append(
    __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_lines, __pyx_mstate_global->__pyx_kp_u_For_the_designated_timestamp_na); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 340, __pyx_L1_error)

 00341:             "  For the designated timestamp, name a valid timestamp column "
 00342:             "with at='<column>', or pass at=ServerTimestamp to have the "
 00343:             "server assign each row's timestamp on arrival.")
+00344:     return '\n'.join(lines)
  __pyx_t_3 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__25, __pyx_v_lines); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 344, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = ((PyObject*)__pyx_t_3);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_3 = 0;
  goto __pyx_L0;
 00345: 
 00346: 
+00347: 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;
}
+00348:     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:
+00349:         return QuestDBErrorCode.CouldNotResolveAddr
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 349, __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, 349, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+00350:     elif code == line_sender_error_invalid_api_call:
    break;
    case line_sender_error_socket_error:
+00351:         return QuestDBErrorCode.InvalidApiCall
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 351, __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, 351, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_1;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00352:     elif code == line_sender_error_socket_error:
    break;
    case line_sender_error_invalid_utf8:
+00353:         return QuestDBErrorCode.SocketError
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 353, __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, 353, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+00354:     elif code == line_sender_error_invalid_utf8:
    break;
    case line_sender_error_invalid_name:
+00355:         return QuestDBErrorCode.InvalidUtf8
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __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, 355, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_1;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00356:     elif code == line_sender_error_invalid_name:
    break;
    case line_sender_error_invalid_timestamp:
+00357:         return QuestDBErrorCode.InvalidName
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __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, 357, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+00358:     elif code == line_sender_error_invalid_timestamp:
    break;
    case line_sender_error_auth_error:
+00359:         return QuestDBErrorCode.InvalidTimestamp
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 359, __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, 359, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_1;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00360:     elif code == line_sender_error_auth_error:
    break;
    case line_sender_error_tls_error:
+00361:         return QuestDBErrorCode.AuthError
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 361, __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, 361, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+00362:     elif code == line_sender_error_tls_error:
    break;
    case line_sender_error_http_not_supported:
+00363:         return QuestDBErrorCode.TlsError
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 363, __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, 363, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_1;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00364:     elif code == line_sender_error_http_not_supported:
    break;
    case line_sender_error_server_flush_error:
+00365:         return QuestDBErrorCode.HttpNotSupported
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 365, __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, 365, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+00366:     elif code == line_sender_error_server_flush_error:
    break;
    case line_sender_error_server_rejection:
+00367:         return QuestDBErrorCode.ServerFlushError
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 367, __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, 367, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_1;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00368:     elif code == line_sender_error_server_rejection:
    break;
    case line_sender_error_role_mismatch:
+00369:         return QuestDBErrorCode.ServerRejection
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 369, __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, 369, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+00370:     elif code == line_sender_error_role_mismatch:
    break;
    case line_sender_error_config_error:
+00371:         return QuestDBErrorCode.RoleMismatch
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 371, __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, 371, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_1;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00372:     elif code == line_sender_error_config_error:
    break;
    case line_sender_error_array_error:
+00373:         return QuestDBErrorCode.ConfigError
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 373, __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, 373, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+00374:     elif code == line_sender_error_array_error:
    break;
    case line_sender_error_protocol_version_error:
+00375:         return QuestDBErrorCode.ArrayError
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 375, __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, 375, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_1;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00376:     elif code == line_sender_error_protocol_version_error:
    break;
    case line_sender_error_invalid_decimal:
+00377:         return QuestDBErrorCode.ProtocolVersionError
    __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_ProtocolVersionError); 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;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+00378:     elif code == line_sender_error_invalid_decimal:
    break;
    case line_sender_error_arrow_unsupported_column_kind:
+00379:         return QuestDBErrorCode.DecimalError
    __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_DecimalError); 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;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_1;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00380:     elif code == line_sender_error_arrow_unsupported_column_kind:
    break;
    case line_sender_error_arrow_ingest:
+00381:         return QuestDBErrorCode.ArrowUnsupportedColumnKind
    __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_ArrowUnsupportedColumnKind); 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;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+00382:     elif code == line_sender_error_arrow_ingest:
    break;
    case line_sender_error_failover_retry:
+00383:         return QuestDBErrorCode.ArrowIngest
    __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_ArrowIngest); 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;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_1;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00384:     elif code == line_sender_error_failover_retry:
    break;
    case line_sender_error_connect_timeout:
+00385:         return QuestDBErrorCode.FailoverRetry
    __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_FailoverRetry); 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;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+00386:     elif code == line_sender_error_connect_timeout:
    break;
    case line_sender_error_handshake_error:
+00387:         return QuestDBErrorCode.ConnectTimeout
    __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_ConnectTimeout); 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;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_1;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00388:     elif code == line_sender_error_handshake_error:
    break;
    case line_sender_error_unsupported_server:
+00389:         return QuestDBErrorCode.HandshakeError
    __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_HandshakeError); 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;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+00390:     elif code == line_sender_error_unsupported_server:
    break;
    case line_sender_error_protocol_error:
+00391:         return QuestDBErrorCode.UnsupportedServer
    __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_UnsupportedServer); 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;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_1;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00392:     elif code == line_sender_error_protocol_error:
    break;
    case line_sender_error_invalid_bind:
+00393:         return QuestDBErrorCode.ProtocolError
    __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_ProtocolError); 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;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+00394:     elif code == line_sender_error_invalid_bind:
    break;
    case line_sender_error_server_schema_mismatch:
+00395:         return QuestDBErrorCode.InvalidBind
    __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_InvalidBind); 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;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_1;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00396:     elif code == line_sender_error_server_schema_mismatch:
    break;
    case line_sender_error_server_parse_error:
+00397:         return QuestDBErrorCode.ServerSchemaMismatch
    __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_ServerSchemaMismatch); 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;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+00398:     elif code == line_sender_error_server_parse_error:
    break;
    case line_sender_error_server_internal_error:
+00399:         return QuestDBErrorCode.ServerParseError
    __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_ServerParseError); 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;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_1;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00400:     elif code == line_sender_error_server_internal_error:
    break;
    case line_sender_error_server_security_error:
+00401:         return QuestDBErrorCode.ServerInternalError
    __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_ServerInternalError); 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;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+00402:     elif code == line_sender_error_server_security_error:
    break;
    case line_sender_error_limit_exceeded:
+00403:         return QuestDBErrorCode.ServerSecurityError
    __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_ServerSecurityError); 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;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_1;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00404:     elif code == line_sender_error_limit_exceeded:
    break;
    case line_sender_error_server_limit_exceeded:
+00405:         return QuestDBErrorCode.LimitExceeded
    __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_LimitExceeded); 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;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+00406:     elif code == line_sender_error_server_limit_exceeded:
    break;
    case line_sender_error_cancelled:
+00407:         return QuestDBErrorCode.ServerLimitExceeded
    __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_ServerLimitExceeded); 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;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_1;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00408:     elif code == line_sender_error_cancelled:
    break;
    case line_sender_error_failover_would_duplicate:
+00409:         return QuestDBErrorCode.Cancelled
    __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_Cancelled); 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;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+00410:     elif code == line_sender_error_failover_would_duplicate:
    break;
    case line_sender_error_schema_drift:
+00411:         return QuestDBErrorCode.FailoverWouldDuplicate
    __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_FailoverWouldDuplicate); 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;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_1;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00412:     elif code == line_sender_error_schema_drift:
    break;
    case line_sender_error_no_schema:
+00413:         return QuestDBErrorCode.SchemaDrift
    __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_SchemaDrift); 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;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+00414:     elif code == line_sender_error_no_schema:
    break;
    case line_sender_error_arrow_export:
+00415:         return QuestDBErrorCode.NoSchema
    __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_NoSchema); 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;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_1;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00416:     elif code == line_sender_error_arrow_export:
    break;
    case line_sender_error_batch_too_large:
+00417:         return QuestDBErrorCode.ArrowExport
    __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_ArrowExport); 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;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+00418:     elif code == line_sender_error_batch_too_large:
    break;
    case line_sender_error_store_resend_required:
+00419:         return QuestDBErrorCode.BatchTooLarge
    __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_BatchTooLarge); 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;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_1;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00420:     elif code == line_sender_error_store_resend_required:
    break;
    case line_sender_error_symbol_dict_full:
+00421:         return QuestDBErrorCode.StoreResendRequired
    __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_StoreResendRequired); 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;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+00422:     elif code == line_sender_error_symbol_dict_full:
    break;
    case line_sender_error_query_timeout:
+00423:         return QuestDBErrorCode.SymbolDictFull
    __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_SymbolDictFull); 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;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_1;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00424:     elif code == line_sender_error_query_timeout:
    break;
    default:
+00425:         return QuestDBErrorCode.QueryTimeout
    __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_QueryTimeout); 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;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
 00426:     else:
+00427:         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, 427, __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, 427, __pyx_L1_error)
    break;
  }
 00428: 
 00429: 
+00430: def _debug_error_code_to_py(int raw_code):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_18_debug_error_code_to_py(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_17_debug_error_code_to_py, "Internal ABI test hook for the native-to-Python error mapping.");
static PyMethodDef __pyx_mdef_7questdb_7_client_18_debug_error_code_to_py = {"_debug_error_code_to_py", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_18_debug_error_code_to_py, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_17_debug_error_code_to_py};
static PyObject *__pyx_pw_7questdb_7_client_18_debug_error_code_to_py(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 430, __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, 430, __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, 430, __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, 430, __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, 430, __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, 430, __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, 430, __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_17_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_17_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_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_18_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[70])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 430, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_error_code_to_py, __pyx_t_19) < (0)) __PYX_ERR(0, 430, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 00431:     """Internal ABI test hook for the native-to-Python error mapping."""
+00432:     return c_err_code_to_py(<line_sender_error_code>raw_code)
  __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, 432, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 00433: 
 00434: 
+00435: 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;
}
 00436:         line_sender_qwpws_error_view view):
 00437:     cdef object message
+00438:     if view.message == NULL:
  __pyx_t_1 = (__pyx_v_view.message == NULL);

  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+00439:         message = ''
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u__6);
    __pyx_v_message = __pyx_mstate_global->__pyx_kp_u__6;
 00440:     else:
+00441:         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, 441, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_message = __pyx_t_2;
    __pyx_t_2 = 0;
  }
  __pyx_L3:;
 00442:             view.message, <Py_ssize_t>view.message_len)
 00443:     return (
+00444:         <int>view.category,
  __pyx_t_2 = __Pyx_PyLong_From_int(((int)__pyx_v_view.category)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 444, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
/* … */
  __pyx_t_8 = PyTuple_New(7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 444, __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, 444, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_3);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_3) != (0)) __PYX_ERR(0, 444, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_4);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_4) != (0)) __PYX_ERR(0, 444, __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, 444, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_5);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 4, __pyx_t_5) != (0)) __PYX_ERR(0, 444, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_6);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 5, __pyx_t_6) != (0)) __PYX_ERR(0, 444, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_7);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 6, __pyx_t_7) != (0)) __PYX_ERR(0, 444, __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;
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_8;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_8 = 0;
  goto __pyx_L0;
+00445:         <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, 445, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
+00446:         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, 446, __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;
  }

 00447:         message,
+00448:         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, 448, __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;
  }

+00449:         view.from_fsn,
  __pyx_t_6 = __Pyx_PyLong_From_uint64_t(__pyx_v_view.from_fsn); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 449, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
+00450:         view.to_fsn)
  __pyx_t_7 = __Pyx_PyLong_From_uint64_t(__pyx_v_view.to_fsn); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 450, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
 00451: 
 00452: 
+00453: 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;
}
 00454:     """Extract ``QuestDBError`` fields from a C error, which will be freed."""
+00455:     if err == NULL:
  __pyx_t_1 = (__pyx_v_err == NULL);

  if (__pyx_t_1) {
/* … */
  }
 00456:         return (
+00457:             QuestDBErrorCode.SocketError,
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 457, __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, 457, __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, 457, __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, 457, __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, 457, __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, 457, __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, 457, __pyx_L1_error);
    __pyx_t_3 = 0;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
 00458:             'Unknown error: the client library reported failure without '
 00459:             'a diagnostic.',
 00460:             None,
 00461:             False)
+00462:     cdef questdb_error_code code = questdb_error_get_code(err)
  __pyx_v_code = questdb_error_get_code(__pyx_v_err);
+00463:     cdef size_t c_len = 0
  __pyx_v_c_len = 0;
+00464:     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));
 00465:     cdef line_sender_qwpws_error_view qwp_ws_view
+00466:     cdef bint in_doubt = questdb_error_in_doubt(err)
  __pyx_v_in_doubt = questdb_error_in_doubt(__pyx_v_err);
 00467:     cdef object py_msg
 00468:     cdef object py_code
+00469:     cdef object py_sender_error = None
  __Pyx_INCREF(Py_None);
  __pyx_v_py_sender_error = Py_None;
+00470:     try:
  /*try:*/ {
+00471:         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, 471, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_py_code = __pyx_t_2;
    __pyx_t_2 = 0;
+00472:         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, 472, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_py_msg = __pyx_t_2;
    __pyx_t_2 = 0;
+00473:         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) {
/* … */
    }
+00474:             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, 474, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF_SET(__pyx_v_py_sender_error, __pyx_t_2);
      __pyx_t_2 = 0;
+00475:         return (py_code, py_msg, py_sender_error, in_doubt)
    __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_in_doubt); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 475, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 475, __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, 475, __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, 475, __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, 475, __pyx_L5_error);
    __Pyx_GIVEREF(__pyx_t_2);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_2) != (0)) __PYX_ERR(0, 475, __pyx_L5_error);
    __pyx_t_2 = 0;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_3;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_3 = 0;
    goto __pyx_L4_return;
  }
 00476:     finally:
+00477:         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);
      }
      __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_L4_return: {
      __pyx_t_12 = __pyx_r;
      __pyx_r = 0;
      questdb_error_free(__pyx_v_err);
      __pyx_r = __pyx_t_12;
      __pyx_t_12 = 0;
      goto __pyx_L0;
    }
  }
 00478: 
 00479: 
+00480: 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) {
  PyObject *__pyx_v_tup = 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_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_tup);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00481:     """Construct a ``QuestDBError`` from a C error, which will be freed."""
+00482:     cdef object tup = c_err_to_fields(err)
  __pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_fields(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tup = __pyx_t_1;
  __pyx_t_1 = 0;
+00483:     if tup[0] == QuestDBErrorCode.ServerRejection:
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_tup, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 483, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 483, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ServerRejection); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 483, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_1, __pyx_t_3, Py_EQ); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 483, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_4) {
/* … */
  }
+00484:         return QuestDBServerRejectionError(
    __pyx_t_1 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBServerRejectionError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 484, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
/* … */
  {
    PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_in_doubt};
    __pyx_mstate_global->__pyx_tuple[23] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[23])) __PYX_ERR(0, 484, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[23]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[23]);
+00485:             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, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 485, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_tup, 1, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 485, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_tup, 2, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 485, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
/* … */
    __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_tup, 3, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 485, __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_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_9 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[5] = {__pyx_t_1, __pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8};
      #if CYTHON_VECTORCALL
      __pyx_t_10 = __pyx_mstate_global->__pyx_tuple[23];
      if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 484, __pyx_L1_error)
      __Pyx_INCREF(__pyx_t_10);
      #else
      {
        PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_in_doubt};
        __pyx_t_10 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+4, 1);
        if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 484, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
      }
      #endif
      __pyx_t_3 = __Pyx_Object_VectorcallKwds((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_1); __pyx_t_1 = 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, 484, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_3;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_3 = 0;
    goto __pyx_L0;
+00486:     return QuestDBError(tup[0], tup[1], tup[2], in_doubt=tup[3])
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 486, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_tup, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 486, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_tup, 1, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 486, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_tup, 2, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 486, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_tup, 3, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 486, __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[5] = {__pyx_t_2, __pyx_t_8, __pyx_t_7, __pyx_t_6, __pyx_t_5};
    #if CYTHON_VECTORCALL
    __pyx_t_1 = __pyx_mstate_global->__pyx_tuple[23];
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 486, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_1);
    #else
    {
      PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_in_doubt};
      __pyx_t_1 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+4, 1);
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 486, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    #endif
    __pyx_t_3 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_10, __pyx_callargs+__pyx_t_9, (4-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_1);
    __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_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 486, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_3;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_3 = 0;
  goto __pyx_L0;
 00487: 
 00488: 
+00489: 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_tup = 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_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_fmt", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tup);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00490:     """Construct a ``QuestDBError`` from a C error, which will be freed."""
+00491:     cdef object tup = c_err_to_fields(err)
  __pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_fields(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tup = __pyx_t_1;
  __pyx_t_1 = 0;
+00492:     if tup[0] == QuestDBErrorCode.ServerRejection:
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_tup, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 492, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 492, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ServerRejection); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 492, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_1, __pyx_t_3, Py_EQ); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 492, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_4) {
/* … */
  }
+00493:         return QuestDBServerRejectionError(
    __pyx_t_1 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBServerRejectionError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 493, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
+00494:             tup[0], fmt.format(tup[1]), tup[2], in_doubt=tup[3])
    __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_tup, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 494, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_tup, 1, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 494, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_CallUnboundCMethod1(&__pyx_mstate_global->__pyx_umethod_PyUnicode_Type__format, __pyx_v_fmt, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 494, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (!(likely(PyUnicode_CheckExact(__pyx_t_7)) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_7))) __PYX_ERR(0, 494, __pyx_L1_error)
    __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_tup, 2, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 494, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
/* … */
    __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_tup, 3, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 494, __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_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_9 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[5] = {__pyx_t_1, __pyx_t_5, __pyx_t_7, __pyx_t_6, __pyx_t_8};
      #if CYTHON_VECTORCALL
      __pyx_t_10 = __pyx_mstate_global->__pyx_tuple[23];
      if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 493, __pyx_L1_error)
      __Pyx_INCREF(__pyx_t_10);
      #else
      {
        PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_in_doubt};
        __pyx_t_10 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+4, 1);
        if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 493, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
      }
      #endif
      __pyx_t_3 = __Pyx_Object_VectorcallKwds((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_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__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;
      __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, 493, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_3;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_3 = 0;
    goto __pyx_L0;
+00495:     return QuestDBError(
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 495, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
+00496:         tup[0], fmt.format(tup[1]), tup[2], in_doubt=tup[3])
  __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_tup, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 496, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_tup, 1, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 496, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_CallUnboundCMethod1(&__pyx_mstate_global->__pyx_umethod_PyUnicode_Type__format, __pyx_v_fmt, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 496, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (!(likely(PyUnicode_CheckExact(__pyx_t_7)) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_7))) __PYX_ERR(0, 496, __pyx_L1_error)
  __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_tup, 2, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 496, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
/* … */
  __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_tup, 3, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 496, __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[5] = {__pyx_t_2, __pyx_t_8, __pyx_t_7, __pyx_t_6, __pyx_t_5};
    #if CYTHON_VECTORCALL
    __pyx_t_1 = __pyx_mstate_global->__pyx_tuple[23];
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 495, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_1);
    #else
    {
      PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_in_doubt};
      __pyx_t_1 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+4, 1);
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 495, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    #endif
    __pyx_t_3 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_10, __pyx_callargs+__pyx_t_9, (4-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_1);
    __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_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 495, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_3;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_3 = 0;
  goto __pyx_L0;
 00497: 
 00498: 
+00499: 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;
}
 00500:         line_sender_buffer* buffer,
 00501:         size_t additional) except -1:
+00502:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+00503:     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)) {
/* … */
  }
+00504:         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, 504, __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, 504, __pyx_L1_error)
 00505: 
 00506: 
+00507: 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_10);
  __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;
}
 00508:         PyObject* string, uint32_t bad_codepoint):
+00509:     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;
+00510:     return 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, 510, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
+00511:         QuestDBErrorCode.InvalidUtf8,
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 511, __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, 511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+00512:         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, 512, __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, 512, __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 = 60;
  #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
  __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7[3]);
  #endif
  __pyx_t_9 = 0;
  #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
  __pyx_t_9 |= __Pyx_PyUnicode_KIND_04(__pyx_t_7[3]);
  #endif
  __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_7, 5, __pyx_t_8, __pyx_t_9);
  if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 512, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_11 = 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_11 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_5, __pyx_t_10};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_11, (3-__pyx_t_11) | (__pyx_t_11*__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_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 510, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 00513:         'Cannot be encoded as UTF-8.')
 00514: 
 00515: 
+00516: 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;
}
+00517:     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, 517, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_builtins, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 517, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+00518:         return obj.__qualname__
    __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, 518, __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, 518, __pyx_L1_error)
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = ((PyObject*)__pyx_t_1);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L0;
 00519:     else:
+00520:         return f'{obj.__module__}.{obj.__qualname__}'
  /*else*/ {
    __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, 520, __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, 520, __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, 520, __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, 520, __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__3;
    __pyx_t_5[2] = __pyx_t_4;
    __pyx_t_6 = 1;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5[0]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5[2]);
    #endif
    __pyx_t_7 = 0;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_7 |= __Pyx_PyUnicode_KIND_04(__pyx_t_5[0]) | __Pyx_PyUnicode_KIND_04(__pyx_t_5[2]);
    #endif
    __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_5, 3, __pyx_t_6, __pyx_t_7);
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 520, __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;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = ((PyObject*)__pyx_t_1);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }
 00521: 
 00522: 
+00523: 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_8);
  __Pyx_AddTraceback("questdb._client._encode_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;




  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00524:         qdb_pystr_buf* b,
 00525:         PyObject* string,
 00526:         line_sender_utf8* utf8_out) except -1:
+00527:     cdef uint32_t bad_codepoint = 0
  __pyx_v_bad_codepoint = 0;
+00528:     cdef size_t count = <size_t>(PyUnicode_GET_LENGTH(string))
  __pyx_v_count = ((size_t)PyUnicode_GET_LENGTH(__pyx_v_string));
+00529:     cdef int kind = PyUnicode_KIND(string)
  __pyx_v_kind = PyUnicode_KIND(__pyx_v_string);
+00530:     if kind == PyUnicode_1BYTE_KIND:
  switch (__pyx_v_kind) {
    case PyUnicode_1BYTE_KIND:
/* … */
    break;
    case PyUnicode_2BYTE_KIND:
 00531:         # No error handling for UCS1: All code points translate into valid UTF8.
+00532:         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));
 00533:             b,
 00534:             count,
 00535:             PyUnicode_1BYTE_DATA(string),
 00536:             &utf8_out.len,
 00537:             &utf8_out.buf)
+00538:     elif kind == PyUnicode_2BYTE_KIND:
    break;
    case PyUnicode_4BYTE_KIND:
+00539:         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)) {
/* … */
    }
 00540:                 b,
 00541:                 count,
 00542:                 PyUnicode_2BYTE_DATA(string),
 00543:                 &utf8_out.len,
 00544:                 &utf8_out.buf,
 00545:                 &bad_codepoint):
+00546:             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, 546, __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, 546, __pyx_L1_error)
+00547:     elif kind == PyUnicode_4BYTE_KIND:
    break;
    default:
+00548:         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)) {
/* … */
    }
 00549:                 b,
 00550:                 count,
 00551: 
 00552:                 # This cast is required and is possibly a Cython compiler bug.
 00553:                 # It doesn't recognize that `const Py_UCS4*`
 00554:                 # is the same as `const uint32_t*`.
 00555:                 <const uint32_t*>PyUnicode_4BYTE_DATA(string),
 00556: 
 00557:                 &utf8_out.len,
 00558:                 &utf8_out.buf,
 00559:                 &bad_codepoint):
+00560:             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, 560, __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, 560, __pyx_L1_error)
 00561:     else:
+00562:         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, 562, __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__3;
    __pyx_t_6 = 19;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5[1]);
    #endif
    __pyx_t_7 = 0;
    __pyx_t_8 = __Pyx_PyUnicode_Join(__pyx_t_5, 3, __pyx_t_6, __pyx_t_7);
    if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 562, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_9 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_8};
      __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_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 562, __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, 562, __pyx_L1_error)
    break;
  }
 00563: 
 00564: 
+00565: 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;
}
 00566:         qdb_pystr_buf* b,
 00567:         PyObject* string,
 00568:         line_sender_utf8* utf8_out) except -1:
 00569:     """
 00570:     Convert a Python string to a UTF-8 borrowed buffer.
 00571:     This is done without allocating new Python `bytes` objects.
 00572:     In case the string is an ASCII string, it's also generally zero-copy.
 00573:     The `utf8_out` param will point to (borrow from) either the ASCII buffer
 00574:     inside the original Python object or a part of memory allocated inside the
 00575:     `b` buffer.
 00576: 
 00577:     If you need to use `utf8_out` without the GIL, call `qdb_pystr_buf_copy`.
 00578:     """
+00579:     if not PyUnicode_CheckExact(string):
  __pyx_t_1 = (!PyUnicode_CheckExact(__pyx_v_string));

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+00580:         raise TypeError(
    __pyx_t_3 = NULL;
+00581:             '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, 581, __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, 580, __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, 580, __pyx_L1_error)
+00582:             _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, 582, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+00583:     PyUnicode_READY(string)
  __pyx_t_7 = PyUnicode_READY(__pyx_v_string); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 583, __pyx_L1_error)

 00584: 
 00585:     # We optimize the common case of ASCII strings.
 00586:     # This avoid memory allocations and copies altogether.
 00587:     # We get away with this because ASCII is a subset of UTF-8.
+00588:     if PyUnicode_IS_COMPACT_ASCII(string):
  __pyx_t_1 = PyUnicode_IS_COMPACT_ASCII(__pyx_v_string);

  if (__pyx_t_1) {
/* … */
  }
+00589:         utf8_out.len = <size_t>(PyUnicode_GET_LENGTH(string))
    __pyx_v_utf8_out->len = ((size_t)PyUnicode_GET_LENGTH(__pyx_v_string));
+00590:         utf8_out.buf = <const char*>(PyUnicode_1BYTE_DATA(string))
    __pyx_v_utf8_out->buf = ((char const *)PyUnicode_1BYTE_DATA(__pyx_v_string));
+00591:         return 0
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
 00592: 
+00593:     _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, 593, __pyx_L1_error)

 00594: 
 00595: 
 00596: 
+00597: 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;
}
 00598:         qdb_pystr_buf* b,
 00599:         PyObject* string,
 00600:         line_sender_utf8* utf8_out) except -1:
 00601:     """
 00602:     Variant of `str_to_utf8` that always copies the string to a new buffer.
 00603: 
 00604:     The resulting `utf8_out` can be used when not holding the GIL:
 00605:     The pointed-to memory is owned by `b`.
 00606:     """
+00607:     if not PyUnicode_CheckExact(string):
  __pyx_t_1 = (!PyUnicode_CheckExact(__pyx_v_string));

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+00608:         raise TypeError(
    __pyx_t_3 = NULL;
+00609:             '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, 609, __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, 608, __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, 608, __pyx_L1_error)
+00610:             _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, 610, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
 00611: 
+00612:     PyUnicode_READY(string)
  __pyx_t_7 = PyUnicode_READY(__pyx_v_string); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 612, __pyx_L1_error)

+00613:     _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, 613, __pyx_L1_error)

 00614: 
 00615: 
+00616: 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;
}
 00617:         qdb_pystr_buf* b,
 00618:         PyObject* string,
 00619:         line_sender_table_name* name_out) except -1:
 00620:     """
 00621:     Python string to borrowed C table name.
 00622:     Also see `str_to_utf8`.
 00623:     """
+00624:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 00625:     cdef line_sender_utf8 utf8
+00626:     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, 626, __pyx_L1_error)

+00627:     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)) {
/* … */
  }
+00628:         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, 628, __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, 628, __pyx_L1_error)
 00629: 
 00630: 
+00631: 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;
}
 00632:         qdb_pystr_buf* b,
 00633:         PyObject* string,
 00634:         line_sender_table_name* name_out) except -1:
 00635:     """
 00636:     Python string to copied C table name.
 00637:     Also see `str_to_utf8_copy`.
 00638:     """
+00639:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 00640:     cdef line_sender_utf8 utf8
+00641:     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, 641, __pyx_L1_error)

+00642:     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)) {
/* … */
  }
+00643:         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, 643, __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, 643, __pyx_L1_error)
 00644: 
 00645: 
+00646: 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;
}
 00647:         qdb_pystr_buf* b,
 00648:         str string,
 00649:         line_sender_column_name* name_out) except -1:
 00650:     """
 00651:     Python string to borrowed C column name.
 00652:     Also see `str_to_utf8`.
 00653:     """
+00654:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 00655:     cdef line_sender_utf8 utf8
+00656:     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, 656, __pyx_L1_error)

+00657:     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)) {
/* … */
  }
+00658:         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, 658, __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, 658, __pyx_L1_error)
 00659: 
 00660: 
+00661: 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;
}
 00662:         qdb_pystr_buf* b,
 00663:         str string,
 00664:         line_sender_column_name* name_out) except -1:
 00665:     """
 00666:     Python string to copied C column name.
 00667:     Also see `str_to_utf8_copy`.
 00668:     """
+00669:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 00670:     cdef line_sender_utf8 utf8
+00671:     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, 671, __pyx_L1_error)

+00672:     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)) {
/* … */
  }
+00673:         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, 673, __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, 673, __pyx_L1_error)
 00674: 
 00675: 
+00676: cdef object _UTC = datetime.timezone.utc
  __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 676, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_timezone); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 676, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_utc); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 676, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__UTC);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__UTC, __pyx_t_19);
  __Pyx_GIVEREF(__pyx_t_19);
  __pyx_t_19 = 0;
+00677: cdef object _UTC_EPOCH = datetime.datetime(1970, 1, 1, tzinfo=_UTC)
  __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 677, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 677, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __pyx_t_19 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 677, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_tzinfo, __pyx_v_7questdb_7_client__UTC) < (0)) __PYX_ERR(0, 677, __pyx_L1_error)
  __pyx_t_20 = __Pyx_PyObject_Call(__pyx_t_16, __pyx_mstate_global->__pyx_tuple[3], __pyx_t_19); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 677, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__UTC_EPOCH);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__UTC_EPOCH, __pyx_t_20);
  __Pyx_GIVEREF(__pyx_t_20);
  __pyx_t_20 = 0;
 00678: 
 00679: 
+00680: _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, 680, __pyx_L1_error)
 00681: 
 00682: 
+00683: 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;
}
 00684:     global _NAIVE_DATETIME_WARNED
+00685:     if dt.tzinfo is not None:
  __pyx_t_1 = __pyx_f_7cpython_8datetime_8datetime_6tzinfo___get__(__pyx_v_dt); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 685, __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) {
/* … */
  }
+00686:         return dt
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF((PyObject *)__pyx_v_dt);
        __pyx_r = ((PyObject *)__pyx_v_dt);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+00687:     if dt != dt:
  __pyx_t_2 = __Pyx_PyObject_RichCompareBool(((PyObject *)__pyx_v_dt), ((PyObject *)__pyx_v_dt), Py_NE); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 687, __pyx_L1_error)
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+00688:         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, 688, __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, 688, __pyx_L1_error)
+00689:     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, 689, __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, 689, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_5 = (!__pyx_t_2);


  if (__pyx_t_5) {
/* … */
  }
+00690:         _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, 690, __pyx_L1_error)
 00691:         # cdef frames and this module's def entry points are invisible to
 00692:         # the warnings stack walker, so level 1 is already the user's call.
+00693:         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, 693, __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, 693, __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_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[4] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Naive_datetime_interpreted_as_UT, ((PyObject *)(((PyTypeObject*)PyExc_UserWarning))), __pyx_mstate_global->__pyx_int_1};
      #if CYTHON_VECTORCALL
      __pyx_t_6 = __pyx_mstate_global->__pyx_tuple[20];
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 693, __pyx_L1_error)
      __Pyx_INCREF(__pyx_t_6);
      #else
      {
        PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_stacklevel};
        __pyx_t_6 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+3, 1);
        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 693, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
      }
      #endif
      __pyx_t_1 = __Pyx_Object_VectorcallKwds((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, 693, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 00694:             'Naive datetime interpreted as UTC (questdb 4.x used local '
 00695:             'time). If you meant "now", use TimestampNanos.now() or '
 00696:             'datetime.now(timezone.utc); pass timezone-aware datetimes '
 00697:             'to silence this warning.',
 00698:             UserWarning,
 00699:             stacklevel=1)
+00700:     return dt.replace(tzinfo=datetime.timezone.utc)
  __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, 700, __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, 700, __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, 700, __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] = {__pyx_t_7, __pyx_t_6};
    #if CYTHON_VECTORCALL
    __pyx_t_3 = __pyx_mstate_global->__pyx_tuple[24];
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 700, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_3);
    #else
    {
      PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_tzinfo};
      __pyx_t_3 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 700, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    #endif
    __pyx_t_1 = __Pyx_Object_VectorcallMethodKwds((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, 700, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
/* … */
  {
    PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_tzinfo};
    __pyx_mstate_global->__pyx_tuple[24] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[24])) __PYX_ERR(0, 700, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[24]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[24]);
 00701: 
 00702: 
+00703: 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;
}
 00704:     """
 00705:     Convert a :class:`datetime.datetime` to microseconds since the epoch.
 00706: 
 00707:     Naive datetimes are interpreted as UTC.
 00708:     """
+00709:     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, 709, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_aware = __pyx_t_1;
  __pyx_t_1 = 0;
+00710:     cdef object delta = aware - _UTC_EPOCH
  __pyx_t_1 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_aware, __pyx_v_7questdb_7_client__UTC_EPOCH); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_delta = __pyx_t_1;
  __pyx_t_1 = 0;
 00711:     return (
+00712:         <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, 712, __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, 712, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+00713:         <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, 713, __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, 713, __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;
+00714:         <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, 714, __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, 714, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 00715: 
 00716: 
+00717: 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;
}
 00718:     """
 00719:     Convert a `datetime.datetime` to nanoseconds since the epoch.
 00720:     """
+00721:     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, 721, __pyx_L1_error)
  __pyx_v_micros = __pyx_t_1;
 00722:     # INT64_MAX // 1000 == 9_223_372_036_854_775 is the largest microsecond
 00723:     # value whose nanosecond product still fits in an int64.
+00724:     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)) {
/* … */
  }
+00725:             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:;
+00726:         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, 726, __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, 726, __pyx_L1_error)
 00727:             'datetime is out of range for a nanosecond timestamp: '
 00728:             'must be between 1677-09-21T00:12:43.145225Z and '
 00729:             '2262-04-11T23:47:16.854775Z.')
+00730:     return micros * 1000
  {

    __pyx_r = (__pyx_v_micros * 0x3E8);
  }
  goto __pyx_L0;
 00731: 
 00732: 
+00733: class ServerTimestampType:
  __pyx_t_20 = __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_20)) __PYX_ERR(0, 733, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __pyx_t_19 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_mstate_global->__pyx_n_u_ServerTimestampType, __pyx_mstate_global->__pyx_empty_tuple, __pyx_t_20, NULL, 0, 0); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 733, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ServerTimestampType, __pyx_t_19) < (0)) __PYX_ERR(0, 733, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 00734:     """
 00735:     A placeholder value to indicate that the data should be inserted
 00736:     using a server-generated-timestamp.
 00737: 
 00738:     Don't instantiate this class directly, use the singleton
 00739:     :data:`ServerTimestamp` instead.
 00740: 
 00741:     This feature is mostly provided for legacy compatibility.
 00742:     We recommend always specifying an explicit timestamp.
 00743: 
 00744:     Using ``ServerTimestamp`` will prevent QuestDB's deduplication
 00745:     feature from working as it would generate unique rows on resubmission.
 00746:     """
 00747:     pass
 00748: 
 00749: 
 00750: #: Singleton instance used to request server-side timestamping.
 00751: #: See :class:`ServerTimestampType` for more details.
+00752: ServerTimestamp = ServerTimestampType()
  __pyx_t_19 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_ServerTimestampType); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 752, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_19, NULL};
    __pyx_t_20 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_16, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 752, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_20);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ServerTimestamp, __pyx_t_20) < (0)) __PYX_ERR(0, 752, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 00753: 
 00754: 
+00755: cdef class TimestampMicros:
struct __pyx_obj_7questdb_7_client_TimestampMicros {
  PyObject_HEAD
  int64_t _value;
};

 00756:     """
 00757:     A timestamp in microseconds since the UNIX epoch (UTC).
 00758: 
 00759:     You may construct a ``TimestampMicros`` from an integer or a
 00760:     ``datetime.datetime``, or simply call the :func:`TimestampMicros.now`
 00761:     method.
 00762: 
 00763:     .. code-block:: python
 00764: 
 00765:         # Recommended way to get the current timestamp.
 00766:         TimestampMicros.now()
 00767: 
 00768:         # The above is equivalent to:
 00769:         TimestampMicros(time.time_ns() // 1000)
 00770: 
 00771:         # You can provide a numeric timestamp too. It can't be negative.
 00772:         TimestampMicros(1657888365426838)
 00773: 
 00774:     ``TimestampMicros`` can also be constructed from a ``datetime.datetime``
 00775:     object.
 00776: 
 00777:     .. code-block:: python
 00778: 
 00779:         TimestampMicros.from_datetime(
 00780:             datetime.datetime.now(tz=datetime.timezone.utc))
 00781: 
 00782:     We recommend that when using ``datetime`` objects, you explicitly pass in
 00783:     the timezone to use. A ``datetime`` object without an associated timezone
 00784:     is interpreted as UTC (a ``UserWarning`` is emitted once per process).
 00785:     Note that ``datetime.datetime.now()`` is your local wall clock: use
 00786:     ``datetime.datetime.now(datetime.timezone.utc)`` or ``now()`` on this
 00787:     class for the current instant.
 00788:     """
 00789:     cdef int64_t _value
 00790: 
+00791:     def __cinit__(self, value):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_15TimestampMicros_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_15TimestampMicros_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
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_VECTORCALL_TPNEW
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if !CYTHON_VECTORCALL_TPNEW
  #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
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__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_TPNEW(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 791, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 791, __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, 791, __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, 791, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 791, __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, 791, __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_2);
  __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;
}
+00792:         if value < 0:
  __pyx_t_1 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_value, __pyx_mstate_global->__pyx_int_0, Py_LT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 792, __pyx_L1_error)
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+00793:             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_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, 793, __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, 793, __pyx_L1_error)
+00794:         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, 794, __pyx_L1_error)
  __pyx_v_self->_value = __pyx_t_5;
 00795: 
+00796:     @classmethod
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_15TimestampMicros_3from_datetime(PyObject *__pyx_v_cls, 
#if CYTHON_VECTORCALL
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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 796, __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, 796, __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, 796, __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, 796, __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, 796, __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, 796, __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_20 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 796, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_dt, __pyx_mstate_global->__pyx_kp_u_datetime_datetime) < (0)) __PYX_ERR(0, 796, __pyx_L1_error)
  __pyx_t_16 = __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[71])); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 796, __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_20);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros, __pyx_mstate_global->__pyx_n_u_from_datetime, __pyx_t_16) < (0)) __PYX_ERR(0, 796, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_GetNameInClass(__pyx_t_16, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros, __pyx_mstate_global->__pyx_n_u_from_datetime); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 796, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_20 = __Pyx_Method_ClassMethod(__pyx_t_16); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 796, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros, __pyx_mstate_global->__pyx_n_u_from_datetime, __pyx_t_20) < (0)) __PYX_ERR(0, 796, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 00797:     def from_datetime(cls, dt: datetime.datetime):
 00798:         """
 00799:         Construct a ``TimestampMicros`` from a :class:`datetime.datetime` object.
 00800:         """
+00801:         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)) {
/* … */
  }
+00802:             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, 802, __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, 802, __pyx_L1_error)
+00803:         return cls(datetime_to_micros(dt))
  __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, 803, __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, 803, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyLong_From_int64_t(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 803, __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, 803, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_3;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_3 = 0;
  goto __pyx_L0;
 00804: 
+00805:     @classmethod
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_15TimestampMicros_5now(PyObject *__pyx_v_cls, 
#if CYTHON_VECTORCALL
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_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_20 = __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[72])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 805, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros, __pyx_mstate_global->__pyx_n_u_now, __pyx_t_20) < (0)) __PYX_ERR(0, 805, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_GetNameInClass(__pyx_t_20, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros, __pyx_mstate_global->__pyx_n_u_now); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 805, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __pyx_t_16 = __Pyx_Method_ClassMethod(__pyx_t_20); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 805, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros, __pyx_mstate_global->__pyx_n_u_now, __pyx_t_16) < (0)) __PYX_ERR(0, 805, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 00806:     def now(cls):
 00807:         """
 00808:         Construct a ``TimestampMicros`` from the current time as UTC.
 00809:         """
+00810:         cdef int64_t value = line_sender_now_micros()
  __pyx_v_value = line_sender_now_micros();
+00811:         return cls(value)
  __pyx_t_2 = NULL;
  __pyx_t_3 = __Pyx_PyLong_From_int64_t(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 811, __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, 811, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 00812: 
+00813:     @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;
}
 00814:     def value(self) -> int:
 00815:         """Number of microseconds (Unix epoch timestamp, UTC)."""
+00816:         return self._value
  __pyx_t_1 = __Pyx_PyLong_From_int64_t(__pyx_v_self->_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 00817: 
+00818:     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_5);
  __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;
}
+00819:         return f'TimestampMicros({self._value})'
  __pyx_t_1 = __Pyx_PyUnicode_From_int64_t(__pyx_v_self->_value, 0, ' ', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 819, __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__11;
  __pyx_t_3 = 17;
  #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
  __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2[1]);
  #endif
  __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_3, __pyx_t_4);
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 819, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_5;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_5 = 0;
  goto __pyx_L0;
 00820: 
 00821: 
+00822: cdef class TimestampNanos:
struct __pyx_obj_7questdb_7_client_TimestampNanos {
  PyObject_HEAD
  int64_t _value;
};

 00823:     """
 00824:     A timestamp in nanoseconds since the UNIX epoch (UTC).
 00825: 
 00826:     You may construct a ``TimestampNanos`` from an integer or a
 00827:     ``datetime.datetime``, or simply call the :func:`TimestampNanos.now`
 00828:     method.
 00829: 
 00830:     .. code-block:: python
 00831: 
 00832:         # Recommended way to get the current timestamp.
 00833:         TimestampNanos.now()
 00834: 
 00835:         # The above is equivalent to:
 00836:         TimestampNanos(time.time_ns())
 00837: 
 00838:         # You can provide a numeric timestamp too. It can't be negative.
 00839:         TimestampNanos(1657888365426838016)
 00840: 
 00841:     ``TimestampNanos`` can also be constructed from a ``datetime`` object.
 00842: 
 00843:     .. code-block:: python
 00844: 
 00845:         TimestampNanos.from_datetime(
 00846:             datetime.datetime.now(tz=datetime.timezone.utc))
 00847: 
 00848:     We recommend that when using ``datetime`` objects, you explicitly pass in
 00849:     the timezone to use. A ``datetime`` object without an associated timezone
 00850:     is interpreted as UTC (a ``UserWarning`` is emitted once per process).
 00851:     Note that ``datetime.datetime.now()`` is your local wall clock: use
 00852:     ``datetime.datetime.now(datetime.timezone.utc)`` or ``now()`` on this
 00853:     class for the current instant.
 00854:     """
 00855:     cdef int64_t _value
 00856: 
+00857:     def __cinit__(self, value):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_14TimestampNanos_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_14TimestampNanos_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
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_VECTORCALL_TPNEW
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if !CYTHON_VECTORCALL_TPNEW
  #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
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__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_TPNEW(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 857, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 857, __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, 857, __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, 857, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 857, __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, 857, __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_2);
  __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;
}
+00858:         if value < 0:
  __pyx_t_1 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_value, __pyx_mstate_global->__pyx_int_0, Py_LT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 858, __pyx_L1_error)
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+00859:             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_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, 859, __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, 859, __pyx_L1_error)
+00860:         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, 860, __pyx_L1_error)
  __pyx_v_self->_value = __pyx_t_5;
 00861: 
+00862:     @classmethod
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_14TimestampNanos_3from_datetime(PyObject *__pyx_v_cls, 
#if CYTHON_VECTORCALL
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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 862, __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, 862, __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, 862, __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, 862, __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, 862, __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, 862, __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_16 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 862, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_dt, __pyx_mstate_global->__pyx_kp_u_datetime_datetime) < (0)) __PYX_ERR(0, 862, __pyx_L1_error)
  __pyx_t_20 = __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[75])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 862, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_20, __pyx_t_16);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos, __pyx_mstate_global->__pyx_n_u_from_datetime, __pyx_t_20) < (0)) __PYX_ERR(0, 862, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_GetNameInClass(__pyx_t_20, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos, __pyx_mstate_global->__pyx_n_u_from_datetime); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 862, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __pyx_t_16 = __Pyx_Method_ClassMethod(__pyx_t_20); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 862, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos, __pyx_mstate_global->__pyx_n_u_from_datetime, __pyx_t_16) < (0)) __PYX_ERR(0, 862, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 00863:     def from_datetime(cls, dt: datetime.datetime):
 00864:         """
 00865:         Construct a ``TimestampNanos`` from a ``datetime.datetime`` object.
 00866:         """
+00867:         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)) {
/* … */
  }
+00868:             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, 868, __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, 868, __pyx_L1_error)
+00869:         return cls(datetime_to_nanos(dt))
  __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, 869, __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, 869, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyLong_From_int64_t(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 869, __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, 869, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_3;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_3 = 0;
  goto __pyx_L0;
 00870: 
+00871:     @classmethod
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_14TimestampNanos_5now(PyObject *__pyx_v_cls, 
#if CYTHON_VECTORCALL
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_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_16 = __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[76])); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 871, __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_TimestampNanos, __pyx_mstate_global->__pyx_n_u_now, __pyx_t_16) < (0)) __PYX_ERR(0, 871, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_GetNameInClass(__pyx_t_16, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos, __pyx_mstate_global->__pyx_n_u_now); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 871, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_20 = __Pyx_Method_ClassMethod(__pyx_t_16); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 871, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos, __pyx_mstate_global->__pyx_n_u_now, __pyx_t_20) < (0)) __PYX_ERR(0, 871, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 00872:     def now(cls):
 00873:         """
 00874:         Construct a ``TimestampNanos`` from the current time as UTC.
 00875:         """
+00876:         cdef int64_t value = line_sender_now_nanos()
  __pyx_v_value = line_sender_now_nanos();
+00877:         return cls(value)
  __pyx_t_2 = NULL;
  __pyx_t_3 = __Pyx_PyLong_From_int64_t(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 877, __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, 877, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 00878: 
+00879:     @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;
}
 00880:     def value(self) -> int:
 00881:         """Number of nanoseconds (Unix epoch timestamp, UTC)."""
+00882:         return self._value
  __pyx_t_1 = __Pyx_PyLong_From_int64_t(__pyx_v_self->_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 882, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 00883: 
+00884:     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;
}
+00885:         return f'TimestampNanos({self.value})'
  __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, 885, __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, 885, __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__11;
  __pyx_t_4 = 16;
  #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
  __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3[1]);
  #endif
  __pyx_t_5 = 0;
  #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
  __pyx_t_5 |= __Pyx_PyUnicode_KIND_04(__pyx_t_3[1]);
  #endif
  __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_4, __pyx_t_5);
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 885, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 00886: 
 00887: 
+00888: cdef class Char:
struct __pyx_obj_7questdb_7_client_Char {
  PyObject_HEAD
  uint16_t _value;
};

 00889:     """A QuestDB CHAR value stored as one UTF-16 code unit.
 00890: 
 00891:     ``'\\x00'`` is stored as code unit 0. CHAR has no physical ``NULL``
 00892:     representation: QWP/Arrow egress returns it as 0, while text output
 00893:     renders it as empty. Some QuestDB SQL operations treat code unit 0 as
 00894:     CHAR's null/absent marker.
 00895:     """
 00896:     cdef uint16_t _value
 00897: 
+00898:     def __cinit__(self, value):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_4Char_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_4Char_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
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_VECTORCALL_TPNEW
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if !CYTHON_VECTORCALL_TPNEW
  #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
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__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_TPNEW(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 898, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 898, __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, 898, __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, 898, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 898, __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, 898, __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;
}
+00899:         if not isinstance(value, str):
  __pyx_t_1 = PyUnicode_Check(__pyx_v_value); 
  __pyx_t_2 = (!__pyx_t_1);


  if (unlikely(__pyx_t_2)) {
/* … */
  }
+00900:             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, 900, __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, 900, __pyx_L1_error)
+00901:         if len(value) != 1:
  __pyx_t_6 = PyObject_Length(__pyx_v_value); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 901, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_6 != 1);


  if (unlikely(__pyx_t_2)) {
/* … */
  }
+00902:             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, 902, __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, 902, __pyx_L1_error)
+00903:         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, 903, __pyx_L1_error)
  __pyx_v_code_point = __pyx_t_7;
+00904:         if code_point > 0xFFFF:
  __pyx_t_2 = (__pyx_v_code_point > 0xFFFF);

  if (unlikely(__pyx_t_2)) {
/* … */
  }
+00905:             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, 905, __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, 905, __pyx_L1_error)
 00906:                 'a supplementary character needs a surrogate pair and '
 00907:                 'cannot fit CHAR; use str/VARCHAR instead.')
+00908:         self._value = <uint16_t>code_point
  __pyx_v_self->_value = ((uint16_t)__pyx_v_code_point);
 00909: 
+00910:     @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;
}
 00911:     def value(self) -> str:
 00912:         """The single Python code point represented by this CHAR."""
+00913:         return chr(self._value)
  __pyx_t_1 = PyUnicode_FromOrdinal(__pyx_v_self->_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 913, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 00914: 
+00915:     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;
}
+00916:         return f'Char({self.value!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, 916, __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, 916, __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__11;
  __pyx_t_4 = 6;
  #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
  __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3[1]);
  #endif
  __pyx_t_5 = 0;
  #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
  __pyx_t_5 |= __Pyx_PyUnicode_KIND_04(__pyx_t_3[1]);
  #endif
  __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_4, __pyx_t_5);
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 916, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 00917: 
 00918: 
+00919: cdef class DateMillis:
struct __pyx_obj_7questdb_7_client_DateMillis {
  PyObject_HEAD
  int64_t _value;
};

 00920:     """A QuestDB DATE value in milliseconds since the Unix epoch (UTC).
 00921: 
 00922:     QuestDB DATE is a millisecond timestamp, not a civil date. The full signed
 00923:     64-bit range is accepted, including pre-epoch values. ``INT64_MIN`` is
 00924:     accepted but reads back from QuestDB as ``NULL``.
 00925: 
 00926:     This is how :func:`Buffer.row <questdb.ingress.Buffer.row>` writes a
 00927:     DATE column. DataFrames claim DATE from the column's Arrow type
 00928:     instead — ``pa.timestamp('ms')`` (naive or tz-aware),
 00929:     ``pa.date32()``, or ``pa.date64()`` — so there is no DATE cell type
 00930:     and no ``'date'`` kind for ``schema_overrides``. A NumPy
 00931:     ``datetime64[ms]`` dtype has no route of its own to DATE and widens
 00932:     to a microsecond TIMESTAMP, unless the frame carries a
 00933:     ``df.attrs['questdb']`` claim naming the column DATE, which puts the
 00934:     Arrow type back on it first. That claim is written as
 00935:     ``{'kind': 'date'}`` under the column's entry in the version-1 claim
 00936:     mapping. Like the other QWP-only types, DATE needs a QWP sender; ILP
 00937:     senders have no DATE type, so the datetime columns they accept all
 00938:     land as TIMESTAMP.
 00939:     """
 00940:     cdef int64_t _value
 00941: 
+00942:     def __cinit__(self, millis):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_10DateMillis_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_10DateMillis_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_millis = 0;
  #if !CYTHON_VECTORCALL_TPNEW
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if !CYTHON_VECTORCALL_TPNEW
  #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
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__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_FASTCALL_TPNEW(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 942, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 942, __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, 942, __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, 942, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 942, __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, 942, __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;
}
+00943:         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, 943, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);


  if (unlikely(__pyx_t_2)) {
/* … */
  }
+00944:             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, 944, __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, 944, __pyx_L1_error)
+00945:         millis = int(millis)
  __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_v_millis); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 945, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_millis, __pyx_t_3);
  __pyx_t_3 = 0;
+00946:         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, 946, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_millis, __pyx_t_3, Py_LT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 946, __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 = __Pyx_PyLong_From_int64_t(INT64_MAX); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 946, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_CompareBoolGt_object_int(__pyx_v_millis, __pyx_t_3, Py_GT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 946, __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)) {
/* … */
  }
+00947:             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, 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:         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, 948, __pyx_L1_error)
  __pyx_v_self->_value = ((int64_t)__pyx_t_6);

 00949: 
+00950:     @classmethod
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_10DateMillis_3from_datetime(PyObject *__pyx_v_cls, 
#if CYTHON_VECTORCALL
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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 950, __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, 950, __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, 950, __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, 950, __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, 950, __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, 950, __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_20 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 950, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_dt, __pyx_mstate_global->__pyx_kp_u_datetime_datetime) < (0)) __PYX_ERR(0, 950, __pyx_L1_error)
  __pyx_t_16 = __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[81])); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 950, __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_20);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis, __pyx_mstate_global->__pyx_n_u_from_datetime, __pyx_t_16) < (0)) __PYX_ERR(0, 950, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_GetNameInClass(__pyx_t_16, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis, __pyx_mstate_global->__pyx_n_u_from_datetime); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 950, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_20 = __Pyx_Method_ClassMethod(__pyx_t_16); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 950, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis, __pyx_mstate_global->__pyx_n_u_from_datetime, __pyx_t_20) < (0)) __PYX_ERR(0, 950, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 00951:     def from_datetime(cls, dt: datetime.datetime):
 00952:         """Construct a ``DateMillis`` by flooring a datetime to milliseconds."""
+00953:         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)) {
/* … */
  }
+00954:             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, 954, __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, 954, __pyx_L1_error)
+00955:         return cls(datetime_to_micros(dt) // 1000)
  __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, 955, __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, 955, __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, 955, __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, 955, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_3;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_3 = 0;
  goto __pyx_L0;
 00956: 
+00957:     @classmethod
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_10DateMillis_5now(PyObject *__pyx_v_cls, 
#if CYTHON_VECTORCALL
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_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_20 = __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[82])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 957, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis, __pyx_mstate_global->__pyx_n_u_now, __pyx_t_20) < (0)) __PYX_ERR(0, 957, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_GetNameInClass(__pyx_t_20, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis, __pyx_mstate_global->__pyx_n_u_now); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 957, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __pyx_t_16 = __Pyx_Method_ClassMethod(__pyx_t_20); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 957, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis, __pyx_mstate_global->__pyx_n_u_now, __pyx_t_16) < (0)) __PYX_ERR(0, 957, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 00958:     def now(cls):
 00959:         """Construct a ``DateMillis`` from the current time as UTC."""
+00960:         return cls(line_sender_now_micros() // 1000)
  __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, 960, __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, 960, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 00961: 
+00962:     @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;
}
 00963:     def value(self) -> int:
 00964:         """Milliseconds since the Unix epoch (UTC)."""
+00965:         return self._value
  __pyx_t_1 = __Pyx_PyLong_From_int64_t(__pyx_v_self->_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 965, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 00966: 
+00967:     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_5);
  __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;
}
+00968:         return f'DateMillis({self._value})'
  __pyx_t_1 = __Pyx_PyUnicode_From_int64_t(__pyx_v_self->_value, 0, ' ', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 968, __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__11;
  __pyx_t_3 = 12;
  #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
  __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2[1]);
  #endif
  __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_3, __pyx_t_4);
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 968, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_5;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_5 = 0;
  goto __pyx_L0;
 00969: 
 00970: 
+00971: cdef class Long256:
struct __pyx_obj_7questdb_7_client_Long256 {
  PyObject_HEAD
  PyObject *_bytes;
};

 00972:     """An unsigned 256-bit integer for a QuestDB LONG256 column.
 00973: 
 00974:     The value whose four 64-bit limbs are all ``0x8000000000000000`` is
 00975:     accepted but reads back from QuestDB as ``NULL``.
 00976:     """
 00977:     cdef bytes _bytes
 00978: 
+00979:     def __cinit__(self, value):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_7Long256_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_7Long256_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
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_VECTORCALL_TPNEW
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if !CYTHON_VECTORCALL_TPNEW
  #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
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__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_TPNEW(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 979, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 979, __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, 979, __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, 979, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 979, __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, 979, __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;
}
+00980:         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, 980, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);


  if (unlikely(__pyx_t_2)) {
/* … */
  }
+00981:             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, 981, __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, 981, __pyx_L1_error)
+00982:         value = int(value)
  __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 982, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_3);
  __pyx_t_3 = 0;
+00983:         if value < 0 or value >= (1 << 256):
  __pyx_t_1 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_value, __pyx_mstate_global->__pyx_int_0, Py_LT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 983, __pyx_L1_error)
  if (!__pyx_t_1) {

  } else {

    __pyx_t_2 = __pyx_t_1;

    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_1 = __Pyx_PyObject_CompareBoolGe_object_object(__pyx_v_value, __pyx_mstate_global->__pyx_int_large_0x1000000000000000_xxx_000000000000000000, Py_GE); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 983, __pyx_L1_error)

  __pyx_t_2 = __pyx_t_1;

  __pyx_L5_bool_binop_done:;
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+00984:             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, 984, __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, 984, __pyx_L1_error)
 00985:         # The column write reads exactly 32 bytes from the pointer. The
 00986:         # unbound `int.to_bytes` keeps a subclass override out of the way,
 00987:         # so the result is always a `bytes` of exactly that width.
+00988:         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, 988, __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, 988, __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;
 00989: 
+00990:     @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;
}
 00991:     def value(self) -> int:
 00992:         """The unsigned integer value."""
+00993:         return int.from_bytes(self._bytes, 'little')
  __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, 993, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 00994: 
+00995:     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;
}
+00996:         return f'Long256({self.value})'
  __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, 996, __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, 996, __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__11;
  __pyx_t_4 = 9;
  #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
  __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3[1]);
  #endif
  __pyx_t_5 = 0;
  #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
  __pyx_t_5 |= __Pyx_PyUnicode_KIND_04(__pyx_t_3[1]);
  #endif
  __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_4, __pyx_t_5);
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 996, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 00997: 
 00998: 
+00999: cdef class Geohash:
struct __pyx_obj_7questdb_7_client_Geohash {
  PyObject_HEAD
  uint64_t _bits;
  uint8_t _precision;
};

 01000:     """A QuestDB GEOHASH value represented by bits and precision.
 01001: 
 01002:     This scalar wrapper is strict: ``precision`` must be in ``1..=60``
 01003:     and ``bits`` must satisfy ``0 <= bits < 2**precision``. Bulk
 01004:     GEOHASH columns, whether NumPy, Arrow or object, deliberately have
 01005:     a different, unchecked value contract; see
 01006:     :meth:`QuestDB.dataframe <questdb.QuestDB.dataframe>`.
 01007: 
 01008:     Precision is pinned per column within one buffer's worth of rows.
 01009:     The first GEOHASH cell written to a column fixes the precision for
 01010:     the rest of that batch, and a later cell at a different precision
 01011:     is rejected by :func:`Buffer.row <questdb.ingress.Buffer.row>`
 01012:     itself, with the buffer rewound to what it held before that row --
 01013:     the bad row is not left waiting for a flush.
 01014: 
 01015:     The pin goes with the buffer: a flush clears it and the next batch
 01016:     starts over. A precision the server's column does not have is
 01017:     therefore the server's to reject, at flush time.
 01018:     """
 01019:     cdef uint64_t _bits
 01020:     cdef uint8_t _precision
 01021: 
+01022:     def __cinit__(self, bits, precision):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_7Geohash_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_7Geohash_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_bits = 0;
  PyObject *__pyx_v_precision = 0;
  #if !CYTHON_VECTORCALL_TPNEW
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if !CYTHON_VECTORCALL_TPNEW
  #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
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__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_FASTCALL_TPNEW(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 1022, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1022, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1022, __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, 1022, __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, 1022, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1022, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1022, __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, 1022, __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;
}
+01023:         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, 1023, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);


  if (unlikely(__pyx_t_2)) {
/* … */
  }
+01024:             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, 1024, __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, 1024, __pyx_L1_error)
+01025:         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, 1025, __pyx_L1_error)
  __pyx_t_1 = (!__pyx_t_2);


  if (unlikely(__pyx_t_1)) {
/* … */
  }
+01026:             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, 1026, __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, 1026, __pyx_L1_error)
+01027:         bits = int(bits)
  __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_v_bits); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1027, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_bits, __pyx_t_3);
  __pyx_t_3 = 0;
+01028:         precision = int(precision)
  __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_v_precision); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1028, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_precision, __pyx_t_3);
  __pyx_t_3 = 0;
+01029:         if precision < 1 or precision > 60:
  __pyx_t_2 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_precision, __pyx_mstate_global->__pyx_int_1, Py_LT); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1029, __pyx_L1_error)
  if (!__pyx_t_2) {

  } else {

    __pyx_t_1 = __pyx_t_2;

    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_PyObject_CompareBoolGt_object_int(__pyx_v_precision, __pyx_mstate_global->__pyx_int_60, Py_GT); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1029, __pyx_L1_error)

  __pyx_t_1 = __pyx_t_2;

  __pyx_L6_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+01030:             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, 1030, __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, 1030, __pyx_L1_error)
+01031:         if bits < 0 or bits >= (1 << precision):
  __pyx_t_2 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_bits, __pyx_mstate_global->__pyx_int_0, Py_LT); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1031, __pyx_L1_error)
  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, 1031, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_CompareBoolGe_object_object(__pyx_v_bits, __pyx_t_3, Py_GE); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1031, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  __pyx_t_1 = __pyx_t_2;

  __pyx_L9_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+01032:             raise ValueError('bits must be in the range 0 <= bits < 2**precision.')
    __pyx_t_4 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_bits_must_be_in_the_range_0_bits};
      __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, 1032, __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, 1032, __pyx_L1_error)
+01033:         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, 1033, __pyx_L1_error)
  __pyx_v_self->_bits = ((uint64_t)__pyx_t_6);

+01034:         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, 1034, __pyx_L1_error)
  __pyx_v_self->_precision = ((uint8_t)__pyx_t_7);

 01035: 
+01036:     @classmethod
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7Geohash_3from_string(PyObject *__pyx_v_cls, 
#if CYTHON_VECTORCALL
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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 1036, __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, 1036, __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, 1036, __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, 1036, __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, 1036, __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, 1036, __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_13);
  __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_16 = __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[87])); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1036, __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_Geohash, __pyx_mstate_global->__pyx_n_u_from_string, __pyx_t_16) < (0)) __PYX_ERR(0, 1036, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_GetNameInClass(__pyx_t_16, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Geohash, __pyx_mstate_global->__pyx_n_u_from_string); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1036, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_20 = __Pyx_Method_ClassMethod(__pyx_t_16); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 1036, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Geohash, __pyx_mstate_global->__pyx_n_u_from_string, __pyx_t_20) < (0)) __PYX_ERR(0, 1036, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 01037:     def from_string(cls, value):
 01038:         """Construct a GEOHASH from one to twelve base32 characters."""
+01039:         if not isinstance(value, str):
  __pyx_t_1 = PyUnicode_Check(__pyx_v_value); 
  __pyx_t_2 = (!__pyx_t_1);


  if (unlikely(__pyx_t_2)) {
/* … */
  }
+01040:             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, 1040, __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, 1040, __pyx_L1_error)
+01041:         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, 1041, __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, 1041, __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)) {
/* … */
  }
+01042:             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, 1042, __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, 1042, __pyx_L1_error)
+01043:         bits = 0
  __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
  __pyx_v_bits = __pyx_mstate_global->__pyx_int_0;
+01044:         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, 1044, __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, 1044, __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, 1044, __pyx_L1_error)
          #endif
          if (__pyx_t_6 >= __pyx_temp) break;
        }
        __pyx_t_4 = __Pyx_PyList_GET_ITEM_REF(__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, 1044, __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, 1044, __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, 1044, __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;
 01045:             digit = (
+01046:                 '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, 1046, __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, 1046, __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, 1046, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);

      if (__Pyx_PyInt_FromNumber(&__pyx_t_8, NULL, 0) < (0)) __PYX_ERR(0, 1046, __pyx_L1_error)
      __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, ((PyObject*)__pyx_t_4));
    __pyx_t_4 = 0;
+01047:                 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, 1047, __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, 1047, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (__pyx_t_2) {
+01048:             if digit < 0:
    __pyx_t_2 = __Pyx_PyObject_CompareBoolLt_int_int(__pyx_v_digit, __pyx_mstate_global->__pyx_int_0, Py_LT); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1048, __pyx_L1_error)
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+01049:                 raise ValueError(
      __pyx_t_8 = NULL;
+01050:                     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, 1050, __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_10 = 90;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_11[1]);
      #endif
      __pyx_t_12 = 0;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_12 |= __Pyx_PyUnicode_KIND_04(__pyx_t_11[1]);
      #endif
      __pyx_t_13 = __Pyx_PyUnicode_Join(__pyx_t_11, 3, __pyx_t_10, __pyx_t_12);
      if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1050, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_5 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_13};
        __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_13); __pyx_t_13 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1049, __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, 1049, __pyx_L1_error)
 01051:                     'alphabet 0123456789bcdefghjkmnpqrstuvwxyz.')
+01052:             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, 1052, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_13 = __Pyx_PyNumber_Add_int_int(__pyx_t_4, __pyx_v_digit); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1052, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_bits, ((PyObject*)__pyx_t_13));
    __pyx_t_13 = 0;
+01053:         return cls(bits, 5 * len(value))
  __pyx_t_13 = NULL;
  __pyx_t_6 = PyObject_Length(__pyx_v_value); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1053, __pyx_L1_error)
  __pyx_t_4 = PyLong_FromSsize_t((5 * __pyx_t_6)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);

  __pyx_t_5 = 1;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_13, __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_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1053, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_3;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_3 = 0;
  goto __pyx_L0;
 01054: 
+01055:     @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;
}
 01056:     def bits(self) -> int:
 01057:         """The packed geohash bits."""
+01058:         return self._bits
  __pyx_t_1 = __Pyx_PyLong_From_uint64_t(__pyx_v_self->_bits); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1058, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 01059: 
+01060:     @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;
}
 01061:     def precision(self) -> int:
 01062:         """The precision in bits."""
+01063:         return self._precision
  __pyx_t_1 = __Pyx_PyLong_From_uint8_t(__pyx_v_self->_precision); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1063, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 01064: 
+01065:     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_6);
  __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;
}
+01066:         return f'Geohash({self._bits}, {self._precision})'
  __pyx_t_1 = __Pyx_PyUnicode_From_uint64_t(__pyx_v_self->_bits, 0, ' ', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1066, __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, 1066, __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__26;
  __pyx_t_3[3] = __pyx_t_2;
  __pyx_t_3[4] = __pyx_mstate_global->__pyx_kp_u__11;
  __pyx_t_4 = 11;
  #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
  __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3[3]);
  #endif
  __pyx_t_5 = 0;
  __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_3, 5, __pyx_t_4, __pyx_t_5);
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1066, __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;
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_6;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_6 = 0;
  goto __pyx_L0;
 01067: 
 01068: 
 01069: # The two value unions the `row()` family accepts, defined here as well
 01070: # as in the stub. A name carried only by `_client.pyi` type-checks and
 01071: # then `ImportError`s at runtime, so the definition lives in both.
 01072: # Not exported: they name a parameter type, they are not part of the
 01073: # ingestion surface.
+01074: TransactionColumnValue = Union[
  __Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_Union); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 1074, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
/* … */
  {
    PyObject* __pyx_temp[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_19, ((PyObject *)__pyx_mstate_global->__pyx_ptype_5numpy_ndarray), __pyx_t_16};
    __pyx_t_17 = __Pyx_PyTuple_FromArray(__pyx_temp, 10); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1074, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
  }
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __pyx_t_16 = __Pyx_PyObject_GetItem(__pyx_t_20, __pyx_t_17); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1074, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_TransactionColumnValue, __pyx_t_16) < (0)) __PYX_ERR(0, 1074, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 01075:     None, bool, int, float, str, TimestampMicros, TimestampNanos,
+01076:     datetime.datetime, cnp.ndarray, Decimal]
  __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1076, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 1076, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Decimal); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1076, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
+01077: RowColumnValue = Union[
  __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Union); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1077, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
/* … */
  {
    PyObject* __pyx_temp[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_20, ((PyObject *)__pyx_mstate_global->__pyx_ptype_5numpy_ndarray), __pyx_t_17, __pyx_t_4, __pyx_t_25, ((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)};
    __pyx_t_19 = __Pyx_PyTuple_FromArray(__pyx_temp, 19); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 1077, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_19);
  }
  __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;
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __pyx_t_25 = __Pyx_PyObject_GetItem(__pyx_t_16, __pyx_t_19); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1077, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_RowColumnValue, __pyx_t_25) < (0)) __PYX_ERR(0, 1077, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 01078:     None, bool, int, float, str, TimestampMicros, TimestampNanos,
+01079:     datetime.datetime, cnp.ndarray, Decimal, uuid.UUID,
  __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1079, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 1079, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_Decimal); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1079, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_uuid); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 1079, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_UUID); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1079, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+01080:     ipaddress.IPv4Address, bytes, bytearray, memoryview, Char, DateMillis,
  __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_ipaddress); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 1080, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __pyx_t_25 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_IPv4Address); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1080, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 01081:     Long256, Geohash]
 01082: # What `schema_overrides` accepts: a kind on its own, or a kind and its
 01083: # argument. Only 'geohash' takes one, the precision in bits.
+01084: SchemaOverrides = Dict[str, Union[str, Tuple[str, SupportsIndex]]]
  __Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_Dict); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1084, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_Union); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 1084, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Tuple); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1084, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_SupportsIndex); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1084, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  {
    PyObject* __pyx_temp[2] = {((PyObject *)(&PyUnicode_Type)), __pyx_t_4};
    __pyx_t_17 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1084, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_16, __pyx_t_17); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1084, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  {
    PyObject* __pyx_temp[2] = {((PyObject *)(&PyUnicode_Type)), __pyx_t_4};
    __pyx_t_17 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1084, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_19, __pyx_t_17); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1084, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  {
    PyObject* __pyx_temp[2] = {((PyObject *)(&PyUnicode_Type)), __pyx_t_4};
    __pyx_t_17 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1084, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_25, __pyx_t_17); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1084, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_SchemaOverrides, __pyx_t_4) < (0)) __PYX_ERR(0, 1084, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 01085: 
 01086: 
+01087: 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;
  size_t _cb_refs_key;
  struct __pyx_t_7questdb_7_client_auto_flush_mode_t _auto_flush_mode;
  int _auto_flush_bytes_dynamic;
};

+01088: 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;
  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;
  int64_t _slot_id;
  struct line_sender_opts *_qwp_ws_opts;
  size_t _cb_refs_key;
};

+01089: 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;
};

+01090: 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 _marker_set;
  int _row_depth;
  PyObject *_row_complete_sender;
};

 01091: 
 01092: 
+01093: 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;
}
+01094:     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, 1094, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
 01095:             &sender._auto_flush_mode,
 01096:             buffer._impl,
 01097:             sender._last_flush_ms[0]):
+01098:         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, 1098, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 01099: 
 01100: 
+01101: 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;
}
 01102:     return (
+01103:         (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;
 01104:         (protocol == line_sender_protocol_tcps))
 01105: 
 01106: 
+01107: 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;
}
 01108:     return (
+01109:         (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;
 01110:         (protocol == line_sender_protocol_https))
 01111: 
 01112: 
+01113: 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;
}
+01114:     return protocol == line_sender_protocol_udp
  {

    __pyx_r = (__pyx_v_protocol == line_sender_protocol_udp);
  }
  goto __pyx_L0;
 01115: 
 01116: 
+01117: 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;
}
 01118:     return (
+01119:         (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;
 01120:         (protocol == line_sender_protocol_wss))
 01121: 
 01122: 
+01123: 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 *);

 01124:     """
 01125:     A transaction for a specific table.
 01126: 
 01127:     Transactions are only supported with ILP/HTTP.
 01128: 
 01129:     The sender API can only operate on one transaction at a time.
 01130: 
 01131:     To create a transaction:
 01132: 
 01133:     .. code-block:: python
 01134: 
 01135:         with sender.transaction('table_name') as txn:
 01136:             txn.row(..)
 01137:             txn.dataframe(..)
 01138:     """
 01139:     cdef Sender _sender
 01140:     cdef str _table_name
 01141:     cdef bint _complete
 01142:     cdef bint _committing
 01143: 
+01144:     def __cinit__(self, Sender sender, str table_name):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_17SenderTransaction_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_17SenderTransaction_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
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;
  PyObject *__pyx_v_table_name = 0;
  #if !CYTHON_VECTORCALL_TPNEW
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if !CYTHON_VECTORCALL_TPNEW
  #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
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__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_FASTCALL_TPNEW(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 1144, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1144, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1144, __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, 1144, __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, 1144, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1144, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1144, __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, 1144, __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, 1144, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 1, "table_name", 1))) __PYX_ERR(0, 1144, __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;
}
+01145:         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, 1145, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);


  if (unlikely(__pyx_t_2)) {
/* … */
  }
+01146:             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, 1146, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+01147:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1147, __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, 1147, __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, 1146, __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, 1146, __pyx_L1_error)
 01148:                 'Transactions are only supported for ILP/HTTP.')
+01149:         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;
+01150:         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;
+01151:         self._complete = False
  __pyx_v_self->_complete = 0;
+01152:         self._committing = False
  __pyx_v_self->_committing = 0;
 01153: 
+01154:     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_9);
  __Pyx_AddTraceback("questdb._client.SenderTransaction._check_usable", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01155:         """Keep completion an absorbing state for the whole object."""
+01156:         if self._complete:
  if (unlikely(__pyx_v_self->_complete)) {
/* … */
  }
+01157:             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, 1157, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
+01158:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1158, __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, 1158, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+01159:                 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, 1159, __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__27;
    __pyx_t_7 = 45;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6[1]);
    #endif
    __pyx_t_8 = 0;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_8 |= __Pyx_PyUnicode_KIND_04(__pyx_t_6[1]);
    #endif
    __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_6, 3, __pyx_t_7, __pyx_t_8);
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1159, __pyx_L1_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_3))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
      assert(__pyx_t_2);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
      __pyx_t_10 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_5, __pyx_t_9};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1157, __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, 1157, __pyx_L1_error)
+01160:         if self._committing:
  if (unlikely(__pyx_v_self->_committing)) {
/* … */
  }
+01161:             raise QuestDBError(
    __pyx_t_3 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1161, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
+01162:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1162, __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, 1162, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+01163:                 f"Transaction commit is already in progress, can't call "
    __pyx_t_7 = 57;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6[1]);
    #endif
    __pyx_t_8 = 0;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_8 |= __Pyx_PyUnicode_KIND_04(__pyx_t_6[1]);
    #endif
    __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_6, 3, __pyx_t_7, __pyx_t_8);
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1163, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_10 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_9);
      assert(__pyx_t_3);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
      __pyx_t_10 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_2, __pyx_t_4};
      __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_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_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1161, __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, 1161, __pyx_L1_error)
+01164:                 f"{method}().")
    __pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1164, __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__27;
 01165: 
+01166:     def __enter__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_3__enter__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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[90])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1166, __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, 1166, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+01167:         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, 1167, __pyx_L1_error)

+01168:         if self._sender._in_txn:
  if (unlikely(__pyx_v_self->_sender->_in_txn)) {
/* … */
  }
+01169:             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, 1169, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+01170:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1170, __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, 1170, __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, 1169, __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, 1169, __pyx_L1_error)
 01171:                 'Already inside a transaction, can\'t start another.')
 01172:         # A transaction requires a clear buffer, which a `dataframe()`
 01173:         # part-way through its plan build still has -- it has written
 01174:         # nothing yet. A transaction opened there would take in rows the
 01175:         # caller wrote outside any transaction, and its rollback would
 01176:         # discard them.
+01177:         if self._sender._buffer is not None:
  __pyx_t_8 = (((PyObject *)__pyx_v_self->_sender->_buffer) != Py_None);
  if (__pyx_t_8) {
/* … */
  }
+01178:             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, 1178, __pyx_L1_error)

+01179:         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, 1179, __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) {
/* … */
  }
+01180:             if self._sender._auto_flush_mode.enabled:
    if (likely(__pyx_v_self->_sender->_auto_flush_mode.enabled)) {
/* … */
      goto __pyx_L8;
    }
+01181:                 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, 1181, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 01182:             else:
+01183:                 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, 1183, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
+01184:                     QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1184, __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, 1184, __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, 1183, __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, 1183, __pyx_L1_error)
    }
    __pyx_L8:;
 01185:                     'Sender buffer must be clear when starting a ' +
 01186:                     'transaction. You must call `.flush()` before this call.')
+01187:         self._sender._in_txn = True
  __pyx_v_self->_sender->_in_txn = 1;
+01188:         return self
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF((PyObject *)__pyx_v_self);
      __pyx_r = ((PyObject *)__pyx_v_self);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 01189: 
+01190:     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_VECTORCALL
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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 1190, __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, 1190, __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, 1190, __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, 1190, __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, 1190, __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, 1190, __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, 1190, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1190, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1190, __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, 1190, __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[91])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1190, __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, 1190, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+01191:         if exc_type is not None:
  __pyx_t_1 = (__pyx_v_exc_type != Py_None);
  if (__pyx_t_1) {
/* … */
  }
+01192:             if not self._complete:
    __pyx_t_1 = (!__pyx_v_self->_complete);

    if (__pyx_t_1) {
/* … */
    }
+01193:                 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, 1193, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+01194:             return False
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(Py_False);
        __pyx_r = Py_False;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
 01195:         else:
+01196:             if not self._complete:
  /*else*/ {
    __pyx_t_1 = (!__pyx_v_self->_complete);

    if (__pyx_t_1) {
/* … */
    }
+01197:                 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, 1197, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+01198:             return True
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(Py_True);
        __pyx_r = Py_True;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
  }
 01199: 
+01200:     def row(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_7row(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 1200, __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, 1200, __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, 1200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
/* … */
  __pyx_t_17 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_Optional_str) < (0)) __PYX_ERR(0, 1200, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_columns, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_Union_None_boo) < (0)) __PYX_ERR(0, 1200, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_ServerTimestampType_Timest) < (0)) __PYX_ERR(0, 1200, __pyx_L1_error)
  __pyx_t_25 = __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[92])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1200, __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_17);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_SenderTransaction, __pyx_mstate_global->__pyx_n_u_row_2, __pyx_t_25) < (0)) __PYX_ERR(0, 1200, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 01201:             self,
 01202:             *,
+01203:             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, 1200, __pyx_L1_error)
 01204:             columns: Optional[Dict[
 01205:                 str,
 01206:                 Union[None, bool, int, float, str, TimestampMicros, TimestampNanos, datetime.datetime, numpy.ndarray, Decimal]]
+01207:                 ]=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, 1200, __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, 1200, __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, 1200, __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, 1203, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_columns), (&PyDict_Type), 1, "columns", 2))) __PYX_ERR(0, 1204, __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, 1200, __pyx_L1_error)
 01208:             at: Union[ServerTimestampType, TimestampNanos, datetime.datetime]):
 01209:         """
 01210:         Write a row for the table in the transaction.
 01211: 
 01212:         The table name is taken from the transaction.
 01213: 
 01214:         **Note**: Support for NumPy arrays (``numpy.array``) requires QuestDB server version 9.0.0 or higher.
 01215: 
 01216:         UUID, IPV4, BINARY, CHAR, DATE, LONG256, and GEOHASH columns are
 01217:         QWP-only and are not supported by ``SenderTransaction``, which is
 01218:         ILP/HTTP-only by construction.
 01219:         """
 01220:         cdef Buffer buf
+01221:         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, 1221, __pyx_L1_error)

+01222:         if at is None:
  __pyx_t_2 = (__pyx_v_at == Py_None);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+01223:             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, 1223, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+01224:                 QuestDBErrorCode.InvalidTimestamp,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1224, __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, 1224, __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, 1223, __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, 1223, __pyx_L1_error)
 01225:                 "`at` must be of type TimestampNanos, datetime, or ServerTimestamp"
 01226:             )
 01227: 
+01228:         if self._sender._buffer is None:
  __pyx_t_2 = (((PyObject *)__pyx_v_self->_sender->_buffer) == Py_None);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+01229:             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, 1229, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
+01230:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1230, __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, 1230, __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, 1229, __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, 1229, __pyx_L1_error)
 01231:                 "row() can\'t be called: Sender is closed."
 01232:             )
 01233: 
 01234:         # The sender holds the only reference to the buffer, and a column
 01235:         # value whose conversion runs Python code can reach back in here.
 01236:         # A strong local reference keeps the buffer alive for the whole
 01237:         # row, including its cleanup.
+01238:         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;
+01239:         buf._row(
  __pyx_t_9.__pyx_n = 3;
  __pyx_t_9.symbols = ((PyObject*)__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, 1239, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

 01240:             False,  # allow_auto_flush
+01241:             self._table_name,
  __pyx_t_3 = __pyx_v_self->_table_name;
  __Pyx_INCREF(__pyx_t_3);
 01242:             symbols=symbols,
 01243:             columns=columns,
 01244:             at=at)
+01245:         return self
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF((PyObject *)__pyx_v_self);
      __pyx_r = ((PyObject *)__pyx_v_self);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 01246: 
+01247:     def dataframe(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_9dataframe(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 1247, __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, 1247, __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, 1247, __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, 1247, __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, 1247, __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, 1247, __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, 1247, __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) {
  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.dataframe", __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, 1247, __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_n_u_auto) < (0)) __PYX_ERR(0, 1247, __pyx_L1_error)
  __pyx_t_17 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1247, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Union_str_bool_List_int_List_str) < (0)) __PYX_ERR(0, 1247, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_ServerTimestampType_int_st) < (0)) __PYX_ERR(0, 1247, __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[93])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1247, __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_17);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 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, 1247, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 01248:             self,
 01249:             df,  # : pd.DataFrame
 01250:             *,
 01251:             symbols: Union[str, bool, List[int], List[str]] = 'auto',
 01252:             at: Union[ServerTimestampType, int, str, TimestampNanos, datetime.datetime]):
 01253:         """
 01254:         Write a dataframe for the table in the transaction.
 01255: 
 01256:         The table name is taken from the transaction.
 01257:         """
+01258:         self._check_usable('dataframe')
  __pyx_t_1 = __pyx_f_7questdb_7_client_17SenderTransaction__check_usable(__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, 1258, __pyx_L1_error)

+01259:         if at is None:
  __pyx_t_2 = (__pyx_v_at == Py_None);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+01260:             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, 1260, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+01261:                 QuestDBErrorCode.InvalidTimestamp,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1261, __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, 1261, __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, 1260, __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, 1260, __pyx_L1_error)
 01262:                 "`at` must be of type TimestampNanos, datetime, or ServerTimestamp"
 01263:             )
+01264:         if self._sender._buffer is None:
  __pyx_t_2 = (((PyObject *)__pyx_v_self->_sender->_buffer) == Py_None);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+01265:             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, 1265, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
+01266:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1266, __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, 1266, __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_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, 1265, __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, 1265, __pyx_L1_error)
 01267:                 "dataframe() can\'t be called: Sender is closed."
 01268:             )
+01269:         _dataframe(
  __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_3), __pyx_f_7questdb_7_client_auto_flush_blank(), __pyx_v_self->_sender->_buffer->_impl, __pyx_v_df, __pyx_t_7, Py_None, __pyx_v_symbols, __pyx_v_at); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1269, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

+01270:             self._sender._buffer,
  __pyx_t_3 = ((PyObject *)__pyx_v_self->_sender->_buffer);
  __Pyx_INCREF(__pyx_t_3);
 01271:             auto_flush_blank(),
 01272:             self._sender._buffer._impl,
 01273:             df,
+01274:             self._table_name,
  __pyx_t_7 = __pyx_v_self->_table_name;
  __Pyx_INCREF(__pyx_t_7);
 01275:             None, # table_name_col,
 01276:             symbols,
 01277:             at)
+01278:         return self
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF((PyObject *)__pyx_v_self);
      __pyx_r = ((PyObject *)__pyx_v_self);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 01279: 
+01280:     def commit(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_11commit(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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[94])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1280, __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, 1280, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 01281:         """
 01282:         Commit the transaction.
 01283: 
 01284:         A commit is also automatic at the end of a successful `with` block.
 01285: 
 01286:         This will flush the buffer.
 01287:         """
+01288:         if self._complete:
  if (unlikely(__pyx_v_self->_complete)) {
/* … */
  }
+01289:             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, 1289, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
+01290:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1290, __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, 1290, __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, 1289, __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, 1289, __pyx_L1_error)
 01291:                 'Transaction already completed, can\'t commit')
+01292:         if self._committing:
  if (unlikely(__pyx_v_self->_committing)) {
/* … */
  }
+01293:             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, 1293, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+01294:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1294, __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, 1294, __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, 1293, __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, 1293, __pyx_L1_error)
 01295:                 "Transaction commit is already in progress, can't commit.")
+01296:         if self._sender._buffer is None:
  __pyx_t_7 = (((PyObject *)__pyx_v_self->_sender->_buffer) == Py_None);
  if (unlikely(__pyx_t_7)) {
/* … */
  }
+01297:             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, 1297, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+01298:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1298, __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, 1298, __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, 1297, __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, 1297, __pyx_L1_error)
 01299:                 "commit() can't be called: Sender is closed.")
 01300:         # Checked here rather than left to the flush below, which is
 01301:         # skipped when the buffer is empty. `dataframe()` counts into
 01302:         # `_row_depth` before it writes anything, so a commit re-entered
 01303:         # from the plan build would find nothing to flush, end the
 01304:         # transaction, and leave the frame's rows to go out afterwards
 01305:         # outside it.
+01306:         self._sender._buffer._check_not_in_row('commit')
  __pyx_t_8 = __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_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1306, __pyx_L1_error)

 01307:         # `_in_txn` has to come down first, because an explicit flush
 01308:         # inside a transaction is refused.
+01309:         self._committing = True
  __pyx_v_self->_committing = 1;
+01310:         self._sender._in_txn = False
  __pyx_v_self->_sender->_in_txn = 0;
+01311:         try:
  /*try:*/ {
+01312:             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:;
    }
+01313:                 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, 1313, __pyx_L9_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_7 = (__pyx_t_12 != 0);


        if (__pyx_t_7) {
/* … */
        }
+01314:                     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] = {__pyx_t_4, Py_True};
            #if CYTHON_VECTORCALL
            __pyx_t_2 = __pyx_mstate_global->__pyx_tuple[25];
            if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1314, __pyx_L9_error)
            __Pyx_INCREF(__pyx_t_2);
            #else
            {
              PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_transactional};
              __pyx_t_2 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
              if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1314, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_2);
            }
            #endif
            __pyx_t_1 = __Pyx_Object_VectorcallMethodKwds((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, 1314, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_1);
          }
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  {
    PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_transactional};
    __pyx_mstate_global->__pyx_tuple[25] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[25])) __PYX_ERR(0, 1314, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[25]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[25]);
+01315:             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, 1315, __pyx_L11_except_error)
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_2);
        __Pyx_XGOTREF(__pyx_t_4);
 01316:                 # A flush that reached the wire clears the buffer whether it
 01317:                 # succeeded or not, so there is nothing left to commit and
 01318:                 # the transaction is over -- saying otherwise would strand
 01319:                 # the sender inside it and make the next `close(flush=True)`
 01320:                 # raise over the caller's own error.
 01321:                 #
 01322:                 # Rows are still in the buffer only when `Sender.flush`
 01323:                 # refused before making the native call, which is a short
 01324:                 # and closed list: a row part-way through being written, a
 01325:                 # call from inside the sender's own callback, and a sender
 01326:                 # already closed. In those three the transaction is still
 01327:                 # the caller's to finish or roll back.
 01328:                 #
 01329:                 # The buffer is therefore the discriminator, and it is
 01330:                 # `Sender.flush` that maintains it, not this method.
 01331:                 # `test_flush_clears_the_buffer_on_a_wire_failure` pins that
 01332:                 # behaviour by name for exactly this reason.
 01333:                 #
 01334:                 # Asking it cannot be allowed to raise: `len()` goes through
 01335:                 # `Buffer.__len__`, which refuses on a closed buffer, and a
 01336:                 # sender closed during the flush would put that error over
 01337:                 # the caller's own. A closed buffer holds no rows, which is
 01338:                 # the same answer an empty one gives.
+01339:                 rows_left = False
        __Pyx_INCREF(Py_False);
        __pyx_v_rows_left = Py_False;
+01340:                 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:;
        }
+01341:                     rows_left = (self._sender._buffer is not None
            __pyx_t_7 = (((PyObject *)__pyx_v_self->_sender->_buffer) != Py_None);
            if (__pyx_t_7) {

            } else {
              __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1341, __pyx_L18_error)
              __Pyx_GOTREF(__pyx_t_3);
              __pyx_t_5 = __pyx_t_3;
              __pyx_t_3 = 0;

              goto __pyx_L26_bool_binop_done;
            }
+01342:                                  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, 1342, __pyx_L18_error)
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __pyx_t_7 = (__pyx_t_12 > 0);


            __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1342, __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;
+01343:                 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, 1343, __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);
+01344:                     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;
+01345:                 if rows_left:
        __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_rows_left); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1345, __pyx_L11_except_error)
        if (__pyx_t_7) {
/* … */
          goto __pyx_L30;
        }
+01346:                     self._sender._in_txn = True
          __pyx_v_self->_sender->_in_txn = 1;
 01347:                 else:
+01348:                     self._complete = True
        /*else*/ {
          __pyx_v_self->_complete = 1;
        }
        __pyx_L30:;
+01349:                 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, 1349, __pyx_L11_except_error)
      }
+01350:             self._complete = True
    __pyx_v_self->_complete = 1;
  }
 01351:         finally:
 01352:             # A commit releases the GIL in `flush()`. Refuse another
 01353:             # terminal operation while that transition owns the buffer,
 01354:             # then make the transition available again only after every
 01355:             # success/failure state above has been published.
+01356:             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:;
  }
 01357: 
+01358:     def rollback(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_13rollback(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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\047s 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_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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[95])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1358, __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, 1358, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 01359:         """
 01360:         Roll back the transaction.
 01361: 
 01362:         A rollback is also automatic at the end of a failed `with` block.
 01363: 
 01364:         This will clear the buffer. When ``rollback()`` is called from
 01365:         code that a ``row()`` or ``dataframe()`` on this sender runs
 01366:         while it writes, such as a column value's conversion, it raises
 01367:         :class:`QuestDBError <questdb.QuestDBError>` (``InvalidApiCall``)
 01368:         and leaves the transaction as it was.
 01369:         """
+01370:         if self._complete:
  if (unlikely(__pyx_v_self->_complete)) {
/* … */
  }
+01371:             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, 1371, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
+01372:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1372, __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, 1372, __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, 1371, __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, 1371, __pyx_L1_error)
 01373:                 'Transaction already completed, can\'t rollback.')
+01374:         if self._committing:
  if (unlikely(__pyx_v_self->_committing)) {
/* … */
  }
+01375:             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, 1375, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+01376:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1376, __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, 1376, __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, 1375, __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, 1375, __pyx_L1_error)
 01377:                 "Transaction commit is already in progress, can't rollback.")
 01378:         # A rollback from code running inside a `row()` or `dataframe()` on
 01379:         # this buffer is refused before anything changes: clearing there
 01380:         # would discard what that call is writing. Every call that would
 01381:         # change what an in-progress call writes is refused the same way.
+01382:         if self._sender._buffer is not None:
  __pyx_t_7 = (((PyObject *)__pyx_v_self->_sender->_buffer) != Py_None);
  if (__pyx_t_7) {
/* … */
  }
+01383:             self._sender._buffer._check_not_in_row('rollback')
    __pyx_t_8 = __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_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1383, __pyx_L1_error)

+01384:         self._sender._in_txn = False
  __pyx_v_self->_sender->_in_txn = 0;
+01385:         self._complete = True
  __pyx_v_self->_complete = 1;
+01386:         if self._sender._buffer is not None:
  __pyx_t_7 = (((PyObject *)__pyx_v_self->_sender->_buffer) != Py_None);
  if (__pyx_t_7) {
/* … */
  }
+01387:             self._sender._buffer._clear_now()
    __pyx_f_7questdb_7_client_6Buffer__clear_now(__pyx_v_self->_sender->_buffer);
 01388: 
+01389: 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 *);
  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 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 *);

 01390:     """
 01391:     Internal row-serialization buffer, managed by :class:`Sender <questdb.Sender>`.
 01392: 
 01393:     Kept importable as ``questdb.ingress.Buffer`` for legacy ILP/HTTP and
 01394:     ILP/TCP code that constructs buffers explicitly and flushes them via
 01395:     ``sender.flush(buffer)``.
 01396:     """
 01397:     cdef line_sender_buffer* _impl
 01398:     cdef qdb_pystr_buf* _b
 01399:     cdef size_t _init_buf_size
 01400:     cdef size_t _max_name_len
 01401:     cdef bint _qwp
 01402:     cdef bint _marker_set
 01403:     cdef int _row_depth
 01404:     cdef object _row_complete_sender
 01405: 
+01406:     def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_6Buffer_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_6Buffer_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL_TPNEW
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if !CYTHON_VECTORCALL_TPNEW
  #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
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__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_FASTCALL_TPNEW(__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;
}
+01407:         self._impl = NULL
  __pyx_v_self->_impl = NULL;
+01408:         self._b = NULL
  __pyx_v_self->_b = NULL;
+01409:         self._init_buf_size = 0
  __pyx_v_self->_init_buf_size = 0;
+01410:         self._max_name_len = 0
  __pyx_v_self->_max_name_len = 0;
+01411:         self._qwp = False
  __pyx_v_self->_qwp = 0;
+01412:         self._marker_set = False
  __pyx_v_self->_marker_set = 0;
+01413:         self._row_depth = 0
  __pyx_v_self->_row_depth = 0;
+01414:         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;
 01415: 
+01416:     def __init__(
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_6Buffer_3__init__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_6Buffer_3__init__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_protocol_version = 0;
  PyObject *__pyx_v_init_buf_size = 0;
  PyObject *__pyx_v_max_name_len = 0;
  #if !CYTHON_VECTORCALL_TPNEW
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  #if !CYTHON_VECTORCALL_TPNEW
  #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
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__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_FASTCALL_TPNEW(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 1416, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1416, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1416, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1416, __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, 1416, __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, 1416, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1416, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1416, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1416, __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, 1418, __pyx_L3_error)
    __pyx_v_protocol_version = ((PyObject*)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "init_buf_size", 0) < (0)) __PYX_ERR(0, 1419, __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, 1420, __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, 1416, __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, 1418, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_init_buf_size), (&PyLong_Type), 0, "init_buf_size", 2))) __PYX_ERR(0, 1419, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_max_name_len), (&PyLong_Type), 0, "max_name_len", 2))) __PYX_ERR(0, 1420, __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;
}
 01417:             self,
 01418:             protocol_version: int,
 01419:             init_buf_size: int=65536,
 01420:             max_name_len: int=127):
+01421:         if self._impl != NULL:
  __pyx_t_1 = (__pyx_v_self->_impl != NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+01422:             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, 1422, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+01423:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1423, __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, 1423, __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, 1422, __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, 1422, __pyx_L1_error)
 01424:                 'Buffer is already initialized.')
+01425:         if protocol_version not in range(1, 4):
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyRange_Type)), __pyx_mstate_global->__pyx_tuple[26], NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1425, __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, 1425, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
/* … */
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_int_1, __pyx_mstate_global->__pyx_int_4};
    __pyx_mstate_global->__pyx_tuple[26] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[26])) __PYX_ERR(0, 1425, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[26]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[26]);
+01426:             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, 1426, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
+01427:                 QuestDBErrorCode.ProtocolVersionError,
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1427, __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, 1427, __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, 1426, __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, 1426, __pyx_L1_error)
 01428:                 'Invalid protocol version. Supported versions are 1-3.')
+01429:         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, 1429, __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, 1429, __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, 1429, __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, 1429, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);



  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 01430: 
+01431:     @staticmethod
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_5_new_qwp(CYTHON_UNUSED PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 1431, __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, 1431, __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, 1431, __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, 1431, __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, 1431, __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, 1431, __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, 1433, __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, 1434, __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, 1431, __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, 1433, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_max_name_len), (&PyLong_Type), 0, "max_name_len", 2))) __PYX_ERR(0, 1434, __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, 1431, __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, 1431, __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, 1431, __pyx_L1_error)
  __pyx_t_17 = __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[98])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1431, __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[50]);
  __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_Buffer, __pyx_mstate_global->__pyx_n_u_new_qwp, __pyx_t_17) < (0)) __PYX_ERR(0, 1431, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __pyx_t_4 = NULL;
  __Pyx_GetNameInClass(__pyx_t_25, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, __pyx_mstate_global->__pyx_n_u_new_qwp); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_25};
    __pyx_t_17 = __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_25); __pyx_t_25 = 0;
    if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1431, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
  }
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, __pyx_mstate_global->__pyx_n_u_new_qwp, __pyx_t_17) < (0)) __PYX_ERR(0, 1431, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
/* … */
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_int_65536, __pyx_mstate_global->__pyx_int_127};
    __pyx_mstate_global->__pyx_tuple[50] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[50])) __PYX_ERR(0, 1431, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[50]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[50]);
 01432:     def _new_qwp(
 01433:             init_buf_size: int=65536,
 01434:             max_name_len: int=127):
+01435:         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, 1435, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_buf = ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_1);
  __pyx_t_1 = 0;
+01436:         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, 1436, __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, 1436, __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, 1436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);


  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+01437:         return buf
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF((PyObject *)__pyx_v_buf);
      __pyx_r = ((PyObject *)__pyx_v_buf);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 01438: 
+01439:     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;
}
+01440:         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);
+01441:         self._b = qdb_pystr_buf_new()
  __pyx_v_self->_b = qdb_pystr_buf_new();
+01442:         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, 1442, __pyx_L1_error)

+01443:         self._init_buf_size = init_buf_size
  __pyx_v_self->_init_buf_size = __pyx_v_init_buf_size;
+01444:         self._max_name_len = max_name_len
  __pyx_v_self->_max_name_len = __pyx_v_max_name_len;
+01445:         self._qwp = False
  __pyx_v_self->_qwp = 0;
+01446:         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;
 01447: 
+01448:     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;
}
+01449:         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);
+01450:         self._b = qdb_pystr_buf_new()
  __pyx_v_self->_b = qdb_pystr_buf_new();
+01451:         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, 1451, __pyx_L1_error)

+01452:         self._init_buf_size = init_buf_size
  __pyx_v_self->_init_buf_size = __pyx_v_init_buf_size;
+01453:         self._max_name_len = max_name_len
  __pyx_v_self->_max_name_len = __pyx_v_max_name_len;
+01454:         self._qwp = True
  __pyx_v_self->_qwp = 1;
+01455:         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;
 01456: 
 01457: 
+01458:     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();
}
+01459:         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;
+01460:         qdb_pystr_buf_free(self._b)
  qdb_pystr_buf_free(__pyx_v_self->_b);
+01461:         line_sender_buffer_free(self._impl)
  line_sender_buffer_free(__pyx_v_self->_impl);
 01462: 
+01463:     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_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._check_impl", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+01464:         if self._impl == NULL:
  __pyx_t_1 = (__pyx_v_self->_impl == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+01465:             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, 1465, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+01466:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1466, __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, 1466, __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_not_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, 1465, __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, 1465, __pyx_L1_error)
 01467:                 'Buffer is not initialized.')
 01468: 
+01469:     @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;
}
 01470:     def init_buf_size(self) -> int:
 01471:         """
 01472:         The initial capacity of the buffer when first created.
 01473: 
 01474:         This may grow over time, see ``capacity()``.
 01475:         """
+01476:         return self._init_buf_size
  __pyx_t_1 = __Pyx_PyLong_FromSize_t(__pyx_v_self->_init_buf_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1476, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 01477: 
+01478:     @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;
}
 01479:     def max_name_len(self) -> int:
 01480:         """Maximum length of a table or column name."""
+01481:         return self._max_name_len
  __pyx_t_1 = __Pyx_PyLong_FromSize_t(__pyx_v_self->_max_name_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1481, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 01482: 
+01483:     def reserve(self, additional):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_9reserve(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 1483, __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, 1483, __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, 1483, __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, 1483, __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, 1483, __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, 1483, __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_2);
  __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_17 = __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[99])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1483, __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_Buffer, __pyx_mstate_global->__pyx_n_u_reserve, __pyx_t_17) < (0)) __PYX_ERR(0, 1483, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 01484:         """
 01485:         Ensure the buffer has at least `additional` bytes of future capacity.
 01486: 
 01487:         :param int additional: Additional bytes to reserve.
 01488:         """
+01489:         if additional < 0:
  __pyx_t_1 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_additional, __pyx_mstate_global->__pyx_int_0, Py_LT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1489, __pyx_L1_error)
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+01490:             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_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, 1490, __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, 1490, __pyx_L1_error)
+01491:         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, 1491, __pyx_L1_error)

+01492:         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, 1492, __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, 1492, __pyx_L1_error)


 01493: 
+01494:     def capacity(self) -> int:
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_11capacity(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_17 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1494, __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_int) < (0)) __PYX_ERR(0, 1494, __pyx_L1_error)
  __pyx_t_25 = __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[100])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1494, __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_Buffer, __pyx_mstate_global->__pyx_n_u_capacity, __pyx_t_25) < (0)) __PYX_ERR(0, 1494, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 01495:         """The current buffer capacity."""
+01496:         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, 1496, __pyx_L1_error)

+01497:         return line_sender_buffer_capacity(self._impl)
  __pyx_t_2 = __Pyx_PyLong_FromSize_t(line_sender_buffer_capacity(__pyx_v_self->_impl)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_2, NULL, 0) < (0)) __PYX_ERR(0, 1497, __pyx_L1_error)
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = ((PyObject*)__pyx_t_2);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_2 = 0;
  goto __pyx_L0;
 01498: 
+01499:     def clear(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_13clear(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_25 = __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[101])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1499, __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_clear, __pyx_t_25) < (0)) __PYX_ERR(0, 1499, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 01500:         """
 01501:         Reset the buffer.
 01502: 
 01503:         Note that flushing a buffer will (unless otherwise specified)
 01504:         also automatically clear it.
 01505: 
 01506:         This method is designed to be called only in conjunction with
 01507:         ``sender.flush(buffer, clear=False)``.
 01508: 
 01509:         Raises :class:`QuestDBError <questdb.QuestDBError>`
 01510:         (``InvalidApiCall``) if a
 01511:         :func:`Buffer.row <questdb.ingress.Buffer.row>` or
 01512:         :func:`Buffer.dataframe <questdb.ingress.Buffer.dataframe>` call
 01513:         on this buffer is still in progress.
 01514:         """
+01515:         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, 1515, __pyx_L1_error)

+01516:         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, 1516, __pyx_L1_error)

+01517:         self._clear_now()
  __pyx_f_7questdb_7_client_6Buffer__clear_now(__pyx_v_self);
 01518: 
+01519:     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 */

}
+01520:         line_sender_buffer_clear(self._impl)
  line_sender_buffer_clear(__pyx_v_self->_impl);
+01521:         qdb_pystr_buf_clear(self._b)
  qdb_pystr_buf_clear(__pyx_v_self->_b);
 01522: 
+01523:     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 */

}
+01524:         self._row_depth -= 1
  __pyx_v_self->_row_depth = (__pyx_v_self->_row_depth - 1);
 01525: 
+01526:     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;
}
 01527:         """
 01528:         The current number of bytes currently in the buffer, read mid-row
 01529:         on the same terms as :func:`Buffer.__bytes__`.
 01530: 
 01531:         For ILP buffers this is exact, and equivalent (but cheaper) to
 01532:         ``len(bytes(buffer))``. For QWP buffers it is an estimate of the
 01533:         encoded size. Over QWP/WebSocket it is never below the size of the
 01534:         frame a flush encodes, unless store-and-forward has fallen back to
 01535:         sending full symbol dictionaries.
 01536:         """
+01537:         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, 1537, __pyx_L1_error)

+01538:         return line_sender_buffer_size(self._impl)
  {

    __pyx_r = line_sender_buffer_size(__pyx_v_self->_impl);
  }
  goto __pyx_L0;
 01539: 
+01540:     def __bytes__(self) -> bytes:
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_17__bytes__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_25 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1540, __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_bytes) < (0)) __PYX_ERR(0, 1540, __pyx_L1_error)
  __pyx_t_17 = __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[102])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1540, __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_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_bytes_2, __pyx_t_17) < (0)) __PYX_ERR(0, 1540, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 01541:         """Return the constructed buffer as bytes. Use for debugging.
 01542: 
 01543:         Read from inside a part-written row -- from a column value whose
 01544:         conversion runs Python -- this returns the buffer as it stands,
 01545:         so the last line has no terminator yet. That is deliberate: a
 01546:         read changes nothing, and a snapshot of a buffer mid-row is an
 01547:         honest answer to what the buffer holds at that moment. Every
 01548:         call that would *act* on the buffer is refused there instead.
 01549:         """
+01550:         return self._to_bytes()
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__to_bytes(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1550, __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, 1550, __pyx_L1_error)
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = ((PyObject*)__pyx_t_1);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 01551: 
+01552:     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;
}
+01553:         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, 1553, __pyx_L1_error)

+01554:         cdef line_sender_buffer_view view = line_sender_buffer_peek(self._impl)
  __pyx_v_view = line_sender_buffer_peek(__pyx_v_self->_impl);
+01555:         return PyBytes_FromStringAndSize(<const char *> view.buf, <Py_ssize_t> view.len)
  __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, 1555, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_2;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_2 = 0;
  goto __pyx_L0;
 01556: 
+01557:     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;
};
+01558:             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;
    }
  }
 01559:         """
 01560:         Refuse a call that arrives while a row is part-way through
 01561:         being written into this buffer.
 01562: 
 01563:         `row()` and the row-serializing `dataframe()` both hold a
 01564:         rewind point across values whose conversion runs Python code,
 01565:         and that code re-enters on the same thread, so nothing else
 01566:         stands between it and the buffer. The native buffer refuses a
 01567:         half-written row anyway; what it cannot do is stop the caller's
 01568:         own error handling from acting on the refusal.
 01569: 
 01570:         `hint` is a further sentence for the message, for a refused call
 01571:         with a remedy of its own.
 01572:         """
+01573:         if self._row_depth != 0:
  __pyx_t_1 = (__pyx_v_self->_row_depth != 0);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+01574:             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, 1574, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+01575:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1575, __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, 1575, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+01576:                 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, 1576, __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, 1576, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 01577:                 "written into this buffer. `row()` or `dataframe()` is "
 01578:                 "part-way through and something it called has come "
 01579:                 "back here, most likely a column value whose "
+01580:                 "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, 1580, __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, 1574, __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, 1574, __pyx_L1_error)
+01581:                 ("" 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__6);
      __pyx_t_5 = __pyx_mstate_global->__pyx_kp_u__6;
    } 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, 1581, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_5 = __pyx_t_8;
      __pyx_t_8 = 0;
    }

 01582: 
+01583:     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;
}
+01584:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+01585:         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)) {
/* … */
  }
+01586:             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, 1586, __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, 1586, __pyx_L1_error)
+01587:         self._marker_set = True
  __pyx_v_self->_marker_set = 1;
 01588: 
+01589:     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;
}
+01590:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 01591:         # The rewind point is spent either way: a successful rewind
 01592:         # consumes it, and a failed one leaves nothing worth keeping.
+01593:         self._marker_set = False
  __pyx_v_self->_marker_set = 0;
+01594:         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)) {
/* … */
  }
+01595:             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, 1595, __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, 1595, __pyx_L1_error)
 01596: 
+01597:     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;
}
+01598:         line_sender_buffer_clear_marker(self._impl)
  line_sender_buffer_clear_marker(__pyx_v_self->_impl);
+01599:         self._marker_set = False
  __pyx_v_self->_marker_set = 0;
 01600: 
+01601:     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;
}
 01602:         """
 01603:         Drop the part-written row while an error is already on its way
 01604:         out to the caller.
 01605: 
 01606:         A flush the row itself triggered takes the rewind point with it,
 01607:         and so does anything that re-enters the buffer while the row is
 01608:         being assembled. Either way there is no rewind point left, the
 01609:         part-written row is gone with it, and the error already being
 01610:         raised is the one the caller needs to see.
 01611:         """
+01612:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+01613:         if not self._marker_set:
  __pyx_t_1 = (!__pyx_v_self->_marker_set);

  if (__pyx_t_1) {
/* … */
  }
+01614:             return
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+01615:         self._marker_set = False
  __pyx_v_self->_marker_set = 0;
+01616:         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) {
/* … */
  }
+01617:             line_sender_error_free(err)
    line_sender_error_free(__pyx_v_err);
 01618: 
+01619:     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;
}
+01620:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 01621:         cdef line_sender_table_name c_table_name
+01622:         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, 1622, __pyx_L1_error)


+01623:             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, 1623, __pyx_L1_error)
+01624:         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)) {
/* … */
  }
+01625:             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, 1625, __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, 1625, __pyx_L1_error)
 01626: 
+01627:     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;
}
+01628:         qdb_pystr_buf_clear(self._b)
  qdb_pystr_buf_clear(__pyx_v_self->_b);
+01629:         return self._b
  {

    __pyx_r = __pyx_v_self->_b;
  }
  goto __pyx_L0;
 01630: 
+01631:     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;
}
+01632:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 01633:         cdef line_sender_column_name c_name
 01634:         cdef line_sender_utf8 c_value
+01635:         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, 1635, __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, 1635, __pyx_L1_error)


+01636:         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, 1636, __pyx_L1_error)

+01637:         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)) {
/* … */
  }
+01638:             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, 1638, __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, 1638, __pyx_L1_error)
 01639: 
+01640:     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;
}
 01641:             self, str name, bint value) except -1:
+01642:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 01643:         cdef line_sender_column_name c_name
+01644:         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, 1644, __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, 1644, __pyx_L1_error)


+01645:         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)) {
/* … */
  }
+01646:             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, 1646, __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, 1646, __pyx_L1_error)
 01647: 
+01648:     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;
}
 01649:             self, str name, object value) except -1:
 01650:         cdef line_sender_column_name c_name
+01651:         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, 1651, __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, 1651, __pyx_L1_error)


+01652:         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, 1652, __pyx_L1_error)
  {
    __pyx_r = __pyx_t_2;
  }
  goto __pyx_L0;
 01653: 
+01654:     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;
}
 01655:             self, str type_name) except -1:
+01656:         if not self._qwp:
  __pyx_t_1 = (!__pyx_v_self->_qwp);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+01657:             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, 1657, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+01658:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1658, __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, 1658, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+01659:                 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, 1659, __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, 1659, __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, 1657, __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, 1657, __pyx_L1_error)
 01660:                 "(protocol 'udp', 'ws' or 'wss'); this buffer uses "
 01661:                 "the ILP protocol (tcp/tcps/http/https).")
 01662: 
+01663:     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;
}
 01664:             self, str name, object value) except -1:
+01665:         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, 1665, __pyx_L1_error)

+01666:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 01667:         cdef line_sender_column_name c_name
 01668:         cdef const uint8_t* data
 01669:         cdef size_t data_len
 01670:         cdef Py_buffer view
+01671:         cdef bint release_view = False
  __pyx_v_release_view = 0;
+01672:         if isinstance(value, bytes):
  __pyx_t_2 = PyBytes_Check(__pyx_v_value); 
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+01673:             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, 1673, __pyx_L1_error)
    __pyx_v_data = ((uint8_t const *)__pyx_t_3);

+01674:             data_len = <size_t>PyBytes_GET_SIZE(value)
    __pyx_v_data_len = ((size_t)PyBytes_GET_SIZE(__pyx_v_value));
+01675:         elif isinstance(value, bytearray):
  __pyx_t_2 = PyByteArray_Check(__pyx_v_value); 
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+01676:             data = <const uint8_t*>PyByteArray_AsString(value)
    __pyx_v_data = ((uint8_t const *)PyByteArray_AsString(__pyx_v_value));
+01677:             data_len = <size_t>PyByteArray_Size(value)
    __pyx_v_data_len = ((size_t)PyByteArray_Size(__pyx_v_value));
 01678:         else:
+01679:             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, 1679, __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, 1679, __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, 1679, __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, 1679, __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)) {
/* … */
    }
+01680:                 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, 1680, __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, 1680, __pyx_L1_error)
 01681:                     'memoryview BINARY values must be C-contiguous with '
 01682:                     'one-byte items.')
+01683:             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, 1683, __pyx_L1_error)

+01684:             release_view = True
    __pyx_v_release_view = 1;
+01685:             data = <const uint8_t*>view.buf
    __pyx_v_data = ((uint8_t const *)__pyx_v_view.buf);
+01686:             data_len = <size_t>view.len
    __pyx_v_data_len = ((size_t)__pyx_v_view.len);
  }
  __pyx_L3:;
+01687:         try:
  /*try:*/ {
+01688:             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, 1688, __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, 1688, __pyx_L8_error)


+01689:             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)) {
/* … */
    }
  }
 01690:                     self._impl, c_name, data, data_len, &err):
+01691:                 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, 1691, __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, 1691, __pyx_L8_error)
 01692:         finally:
+01693:             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:;
  }
+01694:                 PyBuffer_Release(&view)
        PyBuffer_Release((&__pyx_v_view));
/* … */
          PyBuffer_Release((&__pyx_v_view));
 01695: 
+01696:     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;
}
 01697:             self, str name, object value) except -1:
+01698:         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, 1698, __pyx_L1_error)

+01699:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 01700:         cdef line_sender_column_name c_name
 01701:         # Reading `value.int` runs Python code: `UUID` accepts subclasses and
 01702:         # a subclass may define `int` as a property. That code can recycle
 01703:         # the string arena an encoded column name borrows from, so the value
 01704:         # is reduced to C scalars first and the name is encoded after.
 01705:         #
 01706:         # `int.to_bytes` is called unbound, so a replaced `UUID.int`
 01707:         # cannot narrow the result: it is always the 16 bytes
 01708:         # `UUID.bytes` would give, in one C-implemented call rather than
 01709:         # the two Python integers a mask and a shift would allocate.
+01710:         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, 1710, __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, 1710, __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, 1710, __pyx_L1_error)
  __pyx_v_be_bytes = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+01711:         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, 1711, __pyx_L1_error)
  __pyx_v_be = __pyx_t_7;
 01712:         cdef uint64_t hi_raw
 01713:         cdef uint64_t lo_raw
+01714:         memcpy(&hi_raw, be, 8)
  (void)(memcpy((&__pyx_v_hi_raw), __pyx_v_be, 8));
+01715:         memcpy(&lo_raw, be + 8, 8)
  (void)(memcpy((&__pyx_v_lo_raw), (__pyx_v_be + 8), 8));
+01716:         cdef uint64_t hi = bswap64(hi_raw)
  __pyx_v_hi = __pyx_f_7questdb_7_client_bswap64(__pyx_v_hi_raw);
+01717:         cdef uint64_t lo = bswap64(lo_raw)
  __pyx_v_lo = __pyx_f_7questdb_7_client_bswap64(__pyx_v_lo_raw);
+01718:         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, 1718, __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, 1718, __pyx_L1_error)


+01719:         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)) {
/* … */
  }
 01720:                 self._impl, c_name, lo, hi, &err):
+01721:             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, 1721, __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, 1721, __pyx_L1_error)
 01722: 
+01723:     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;
}
 01724:             self, str name, object value) except -1:
+01725:         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, 1725, __pyx_L1_error)

+01726:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 01727:         cdef line_sender_column_name c_name
 01728:         # `IPv4Address.__int__` is pure Python and can recycle the string
 01729:         # arena an encoded column name borrows from, so the value is reduced
 01730:         # to a C scalar first and the name is encoded after.
+01731:         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, 1731, __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, 1731, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_bits = ((uint32_t)__pyx_t_3);

+01732:         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, 1732, __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, 1732, __pyx_L1_error)


+01733:         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)) {
/* … */
  }
 01734:                 self._impl, c_name, bits, &err):
+01735:             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, 1735, __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, 1735, __pyx_L1_error)
 01736: 
+01737:     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;
}
 01738:             self, str name, Char value) except -1:
+01739:         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, 1739, __pyx_L1_error)

+01740:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 01741:         cdef line_sender_column_name c_name
+01742:         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, 1742, __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, 1742, __pyx_L1_error)


+01743:         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)) {
/* … */
  }
 01744:                 self._impl, c_name, value._value, &err):
+01745:             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, 1745, __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, 1745, __pyx_L1_error)
 01746: 
+01747:     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;
}
 01748:             self, str name, DateMillis value) except -1:
+01749:         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, 1749, __pyx_L1_error)

+01750:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 01751:         cdef line_sender_column_name c_name
+01752:         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, 1752, __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, 1752, __pyx_L1_error)


+01753:         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)) {
/* … */
  }
 01754:                 self._impl, c_name, value._value, &err):
+01755:             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, 1755, __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, 1755, __pyx_L1_error)
 01756: 
+01757:     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;
}
 01758:             self, str name, Long256 value) except -1:
+01759:         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, 1759, __pyx_L1_error)

+01760:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 01761:         cdef line_sender_column_name c_name
+01762:         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, 1762, __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, 1762, __pyx_L1_error)


+01763:         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)) {
/* … */
  }
 01764:                 self._impl, c_name,
+01765:                 <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, 1765, __pyx_L1_error)
+01766:             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, 1766, __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, 1766, __pyx_L1_error)
 01767: 
+01768:     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;
}
 01769:             self, str name, Geohash value) except -1:
+01770:         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, 1770, __pyx_L1_error)

+01771:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 01772:         cdef line_sender_column_name c_name
+01773:         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, 1773, __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, 1773, __pyx_L1_error)


+01774:         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)) {
/* … */
  }
 01775:                 self._impl, c_name, value._bits, value._precision, &err):
+01776:             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, 1776, __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, 1776, __pyx_L1_error)
 01777: 
+01778:     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_11);
  __Pyx_AddTraceback("questdb._client.Buffer._column_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;



  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01779:             self, str name, object value) except -1:
 01780:         # A plain `int` goes to a LONG column, which holds 64 bits. A
 01781:         # wider value fits only in a LONG256 column, and the `Long256`
 01782:         # wrapper is what puts it there, so the error names the wrapper.
 01783:         # `PyLong_AsLongLongAndOverflow` sets a flag instead of raising,
 01784:         # which is what lets the message be written here.
 01785:         #
 01786:         # Only QWP senders have a LONG256 column. On an ILP buffer there
 01787:         # is nothing to point the user at, so the value goes straight to
 01788:         # `_column_i64` and the coercion to `int64_t` raises.
+01789:         cdef int overflow = 0
  __pyx_v_overflow = 0;
 01790:         cdef int64_t as_i64
+01791:         if not self._qwp:
  __pyx_t_1 = (!__pyx_v_self->_qwp);

  if (__pyx_t_1) {
/* … */
  }
+01792:             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, 1792, __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, 1792, __pyx_L1_error)

    {
      __pyx_r = __pyx_t_3;
    }
    goto __pyx_L0;
+01793:         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, 1793, __pyx_L1_error)
  __pyx_v_as_i64 = ((int64_t)__pyx_t_4);

+01794:         if overflow < 0:
  __pyx_t_1 = (__pyx_v_overflow < 0);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+01795:             raise OverflowError(
    __pyx_t_6 = NULL;
+01796:                 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, 1796, __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 = 123;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8[1]);
    #endif
    __pyx_t_10 = 0;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_10 |= __Pyx_PyUnicode_KIND_04(__pyx_t_8[1]);
    #endif
    __pyx_t_11 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, __pyx_t_9, __pyx_t_10);
    if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1796, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_12 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_11};
      __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_OverflowError)), __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;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1795, __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, 1795, __pyx_L1_error)
 01797:                 f'LONG column (-2**63). LONG256 is unsigned and cannot '
 01798:                 f'store negative values.')
+01799:         if overflow > 0:
  __pyx_t_1 = (__pyx_v_overflow > 0);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+01800:             raise OverflowError(
    __pyx_t_11 = NULL;
+01801:                 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, 1801, __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_9 = 131;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8[1]);
    #endif
    __pyx_t_10 = 0;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_10 |= __Pyx_PyUnicode_KIND_04(__pyx_t_8[1]);
    #endif
    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, __pyx_t_9, __pyx_t_10);
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1801, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_12 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_7};
      __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_OverflowError)), __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (__pyx_t_12*__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_5)) __PYX_ERR(0, 1800, __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, 1800, __pyx_L1_error)
 01802:                 f'column (-2**63 .. 2**63-1). Wrap it in `Long256(...)` '
 01803:                 f'to store it in a LONG256 column.')
+01804:         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, 1804, __pyx_L1_error)
  {
    __pyx_r = __pyx_t_3;
  }
  goto __pyx_L0;
 01805: 
+01806:     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;
}
 01807:             self, str name, int64_t value) except -1:
+01808:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 01809:         cdef line_sender_column_name c_name
+01810:         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, 1810, __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, 1810, __pyx_L1_error)


+01811:         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)) {
/* … */
  }
+01812:             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, 1812, __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, 1812, __pyx_L1_error)
+01813:         return 0
  {

    __pyx_r = 0;
  }
  goto __pyx_L0;
 01814: 
+01815:     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;
}
 01816:             self, str name, double value) except -1:
+01817:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 01818:         cdef line_sender_column_name c_name
+01819:         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, 1819, __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, 1819, __pyx_L1_error)


+01820:         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)) {
/* … */
  }
+01821:             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, 1821, __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, 1821, __pyx_L1_error)
 01822: 
+01823:     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;
}
 01824:             self, str name, str value) except -1:
+01825:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 01826:         cdef line_sender_column_name c_name
 01827:         cdef line_sender_utf8 c_value
 01828:         # The name is encoded first because `_cleared_b()` recycles the
 01829:         # arena; the value is appended after it, and an append leaves
 01830:         # every pointer already handed out where it is.
+01831:         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, 1831, __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, 1831, __pyx_L1_error)


+01832:         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, 1832, __pyx_L1_error)

+01833:         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)) {
/* … */
  }
+01834:             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, 1834, __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, 1834, __pyx_L1_error)
 01835: 
+01836:     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;
}
 01837:             self, str name, TimestampMicros ts) except -1:
+01838:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 01839:         cdef line_sender_column_name c_name
+01840:         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, 1840, __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, 1840, __pyx_L1_error)


+01841:         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)) {
/* … */
  }
+01842:             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, 1842, __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, 1842, __pyx_L1_error)
 01843: 
+01844:     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;
}
 01845:             self, str name, TimestampNanos ts) except -1:
+01846:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 01847:         cdef line_sender_column_name c_name
+01848:         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, 1848, __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, 1848, __pyx_L1_error)


+01849:         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)) {
/* … */
  }
+01850:             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, 1850, __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, 1850, __pyx_L1_error)
 01851: 
+01852:     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;
}
 01853:             self, str name, cnp.ndarray arr) except -1:
+01854:         if cnp.PyArray_TYPE(arr) != cnp.NPY_FLOAT64:
  __pyx_t_1 = (PyArray_TYPE(__pyx_v_arr) != NPY_FLOAT64);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+01855:             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, 1855, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+01856:                 QuestDBErrorCode.ArrayError,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1856, __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, 1856, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+01857:                 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, 1857, __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, 1857, __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, 1857, __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, 1855, __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, 1855, __pyx_L1_error)
 01858:         cdef:
+01859:             size_t rank = cnp.PyArray_NDIM(arr)
  __pyx_v_rank = PyArray_NDIM(__pyx_v_arr);
+01860:             const double * data_ptr = <const double*> cnp.PyArray_DATA(arr)
  __pyx_v_data_ptr = ((double const *)PyArray_DATA(__pyx_v_arr));
+01861:             line_sender_error * err = NULL
  __pyx_v_err = NULL;
 01862:             line_sender_column_name c_name
 01863: 
+01864:         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, 1864, __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, 1864, __pyx_L1_error)


 01865: 
+01866:         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;
  }
+01867:             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)) {
/* … */
    }
 01868:                     self._impl,
 01869:                     c_name,
 01870:                     rank,
 01871:                     <const size_t*> cnp.PyArray_DIMS(arr),
 01872:                     data_ptr,
 01873:                     cnp.PyArray_SIZE(arr),
 01874:                     &err):
+01875:                 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, 1875, __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, 1875, __pyx_L1_error)
 01876:         else:
+01877:             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:;
 01878:                     self._impl,
 01879:                     c_name,
 01880:                     rank,
 01881:                     <const size_t*> cnp.PyArray_DIMS(arr),
 01882:                     <const ssize_t*> cnp.PyArray_STRIDES(arr), # N.B.: Strides expressed as byte jumps
 01883:                     data_ptr,
 01884:                     cnp.PyArray_SIZE(arr),
 01885:                     &err):
+01886:                 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, 1886, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(0, 1886, __pyx_L1_error)
 01887: 
+01888:     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;
}
 01889:             self, str name, cp_datetime dt) except -1:
+01890:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 01891:         cdef line_sender_column_name c_name
 01892:         # We limit ourselves to micros, since this is the maxium precision
 01893:         # exposed by the datetime library in Python.
 01894:         #
 01895:         # `datetime_to_micros` runs Python: subtracting two aware datetimes
 01896:         # calls the caller's `tzinfo.utcoffset()`, and a naive one reaches
 01897:         # `warnings.warn`. That code can recycle the string arena an encoded
 01898:         # column name borrows from, so the value is reduced to a C scalar
 01899:         # first and the name is encoded after.
+01900:         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, 1900, __pyx_L1_error)
  __pyx_v_micros = __pyx_t_1;
+01901:         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, 1901, __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, 1901, __pyx_L1_error)


+01902:         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)) {
/* … */
  }
 01903:                 self._impl, c_name, micros, &err):
+01904:             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, 1904, __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, 1904, __pyx_L1_error)
 01905: 
+01906:     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;
}
 01907:         # An encoded column name borrows storage that `Buffer.clear()`
 01908:         # recycles, so it stays valid only while no Python code runs. Every
 01909:         # branch therefore takes the name as a `str` and encodes it itself,
 01910:         # immediately before its own native call and after any conversion
 01911:         # that runs the caller's Python. The property that keeps this true
 01912:         # is visible in the signatures: no `_column_*` helper accepts a
 01913:         # `line_sender_column_name`, and
 01914:         # `test_no_column_helper_takes_a_pre_encoded_name` holds it there.
+01915:         if PyBool_Check(<PyObject*>value):
  __pyx_t_1 = PyBool_Check(((PyObject *)__pyx_v_value));

  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+01916:             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, 1916, __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, 1916, __pyx_L1_error)


+01917:         elif PyLong_CheckExact(<PyObject*>value):
  __pyx_t_1 = PyLong_CheckExact(((PyObject *)__pyx_v_value));

  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+01918:             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, 1918, __pyx_L1_error)

+01919:         elif PyFloat_CheckExact(<PyObject*>value):
  __pyx_t_1 = PyFloat_CheckExact(((PyObject *)__pyx_v_value));

  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+01920:             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, 1920, __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, 1920, __pyx_L1_error)


+01921:         elif PyUnicode_CheckExact(<PyObject*>value):
  __pyx_t_1 = PyUnicode_CheckExact(((PyObject *)__pyx_v_value));

  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+01922:             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, 1922, __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, 1922, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

+01923:         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;
  }
+01924:             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, 1924, __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, 1924, __pyx_L1_error)

+01925:         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;
  }
+01926:             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, 1926, __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, 1926, __pyx_L1_error)

+01927:         elif PyArray_CheckExact(<PyObject *> value):
  __pyx_t_1 = PyArray_CheckExact(((PyObject *)__pyx_v_value));

  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+01928:             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, 1928, __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, 1928, __pyx_L1_error)

+01929:         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;
  }
+01930:             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, 1930, __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, 1930, __pyx_L1_error)

+01931:         elif _is_decimal(value):
  __pyx_t_1 = __pyx_f_7questdb_7_client__is_decimal(__pyx_v_value);

  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+01932:             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, 1932, __pyx_L1_error)

 01933:         else:
+01934:             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, 1934, __pyx_L1_error)

  }
  __pyx_L3:;
 01935: 
+01936:     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_12);
  __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;
}
 01937:             self, str name, object value) except -1:
 01938:         # The QWP-only cell types and the unsupported-type error live
 01939:         # out of line, and deliberately not `inline`. `_column` dispatches
 01940:         # every cell of every row, and with these branches out of it the
 01941:         # common bool / int / float / str / datetime cells run through a
 01942:         # short function.
 01943:         #
 01944:         # Within this function the four wrapper classes come before
 01945:         # `uuid.UUID` and the IPV4 test. They are the cheapest checks in
 01946:         # the chain -- an exact type test against a cdef class -- and
 01947:         # none of them can be a UUID or an address, so nothing becomes
 01948:         # reachable only through the more expensive pair.
+01949:         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;
  }
+01950:             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, 1950, __pyx_L1_error)

+01951:         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;
  }
+01952:             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, 1952, __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, 1952, __pyx_L1_error)

+01953:         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;
  }
+01954:             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, 1954, __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, 1954, __pyx_L1_error)

+01955:         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;
  }
+01956:             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, 1956, __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, 1956, __pyx_L1_error)

+01957:         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;
  }
+01958:             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, 1958, __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, 1958, __pyx_L1_error)

+01959:         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, 1959, __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;
  }
+01960:             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, 1960, __pyx_L1_error)

+01961:         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, 1961, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+01962:             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, 1962, __pyx_L1_error)

 01963:         else:
+01964:             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, 1964, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+01965:                 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, 1965, __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, 1965, __pyx_L1_error)
 01966:                     'IPv6 is not supported; QuestDB has no IPv6 column type.')
+01967:             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, 1967, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(__pyx_t_1)) {
/* … */
    }
 01968:                 # It subclasses IPv4Address, so the list below would
 01969:                 # otherwise appear to contain the thing just rejected.
+01970:                 raise TypeError(
      __pyx_t_5 = NULL;
 01971:                     _IPV4_INTERFACE_REASON
+01972:                     + ' 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, 1972, __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, 1970, __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, 1970, __pyx_L1_error)
+01973:             valid = ', '.join((
    __pyx_t_4 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__26, __pyx_mstate_global->__pyx_tuple[27]); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1973, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_v_valid = ((PyObject*)__pyx_t_4);
    __pyx_t_4 = 0;
+01974:                 'bool',
  {
    PyObject* __pyx_temp[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};
    __pyx_mstate_global->__pyx_tuple[27] = __Pyx_PyTuple_FromArray(__pyx_temp, 18); if (unlikely(!__pyx_mstate_global->__pyx_tuple[27])) __PYX_ERR(0, 1974, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[27]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[27]);
 01975:                 'int',
 01976:                 'float',
 01977:                 'str',
 01978:                 'TimestampMicros',
 01979:                 'TimestampNanos',
 01980:                 'datetime.datetime',
 01981:                 'numpy.ndarray',
 01982:                 'decimal.Decimal',
 01983:                 'bytes',
 01984:                 'bytearray',
 01985:                 'memoryview',
 01986:                 'uuid.UUID',
 01987:                 'ipaddress.IPv4Address',
 01988:                 'Char',
 01989:                 'DateMillis',
 01990:                 'Long256',
 01991:                 'Geohash'))
+01992:             raise TypeError(
    __pyx_t_7 = NULL;
+01993:                 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, 1993, __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, 1993, __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, 1993, __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 = 36;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9[3]);
    #endif
    __pyx_t_11 = 0;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_11 |= __Pyx_PyUnicode_KIND_04(__pyx_t_9[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_9[3]);
    #endif
    __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_9, 4, __pyx_t_10, __pyx_t_11);
    if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1993, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __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_12};
      __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_12); __pyx_t_12 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1992, __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, 1992, __pyx_L1_error)
  }
  __pyx_L3:;
 01994: 
+01995:     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_2);
  __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;
}
+01996:         cdef PyObject* sender = NULL
  __pyx_v_sender = NULL;
+01997:         if self._row_complete_sender != None:
  __pyx_t_1 = __Pyx_PyObject_CompareBoolNe_object_object(__pyx_v_self->_row_complete_sender, Py_None, Py_NE); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1997, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+01998:             if PyWeakref_GetRef(self._row_complete_sender, &sender):
    __pyx_t_2 = __pyx_v_self->_row_complete_sender;
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyWeakref_GetRef(__pyx_t_2, (&__pyx_v_sender));

    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_1) {
/* … */
    }
+01999:                 try:
      /*try:*/ {
+02000:                     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, 2000, __pyx_L6_error)

      }
 02001:                         self, <Sender><object>sender)
 02002:                 finally:
+02003:                     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_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;
          {
            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:;
      }
 02004: 
+02005:     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;
}
+02006:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+02007:         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)) {
/* … */
  }
+02008:             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, 2008, __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, 2008, __pyx_L1_error)
 02009: 
+02010:     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;
}
+02011:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+02012:         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)) {
/* … */
  }
+02013:             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, 2013, __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, 2013, __pyx_L1_error)
 02014: 
+02015:     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;
}
+02016:         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, 2016, __pyx_L1_error)
  __pyx_v_value = __pyx_t_1;
+02017:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+02018:         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)) {
/* … */
  }
+02019:             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, 2019, __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, 2019, __pyx_L1_error)
 02020: 
+02021:     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;
}
+02022:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+02023:         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)) {
/* … */
  }
+02024:             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, 2024, __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, 2024, __pyx_L1_error)
 02025: 
+02026:     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;
}
+02027:         if ts is None:
  __pyx_t_1 = (__pyx_v_ts == Py_None);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+02028:             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, 2028, __pyx_L1_error)

+02029:         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;
  }
+02030:             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, 2030, __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, 2030, __pyx_L1_error)

+02031:         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;
  }
+02032:             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, 2032, __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, 2032, __pyx_L1_error)

+02033:         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;
  }
+02034:             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, 2034, __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, 2034, __pyx_L1_error)

 02035:         else:
+02036:             raise TypeError(
  /*else*/ {
    __pyx_t_4 = NULL;
+02037:                 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, 2037, __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, 2037, __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_8 = 66;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7[1]);
    #endif
    __pyx_t_9 = 0;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_9 |= __Pyx_PyUnicode_KIND_04(__pyx_t_7[1]);
    #endif
    __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_7, 3, __pyx_t_8, __pyx_t_9);
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2037, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_10 = 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_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_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2036, __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, 2036, __pyx_L1_error)
  }
  __pyx_L3:;
 02038:                 'TimestampNanos, datetime, None')
 02039: 
+02040:     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;
};
 02041:             self,
 02042:             bint allow_auto_flush,
 02043:             str table_name,
+02044:             dict symbols=None,
  PyObject *__pyx_v_symbols = ((PyObject*)Py_None);
+02045:             dict columns=None,
  PyObject *__pyx_v_columns = ((PyObject*)Py_None);
+02046:             object at=None,
  PyObject *__pyx_v_at = ((PyObject *)Py_None);
+02047:             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;
          }
        }
      }
    }
  }
 02048:         """
 02049:         Add a row to the buffer.
 02050:         """
+02051:         cdef bint wrote_fields = False
  __pyx_v_wrote_fields = 0;
+02052:         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, 2052, __pyx_L1_error)

+02053:         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, 2053, __pyx_L1_error)

 02054:         # A column value whose conversion runs Python code can call back
 02055:         # into whatever owns this buffer. `_row_depth` is how those owners
 02056:         # tell "a row is part-way through" from "a rewind point is held":
 02057:         # `PooledSender.row` deliberately keeps the marker set across its
 02058:         # own flush, so `_marker_set` cannot answer that question.
+02059:         self._row_depth += 1
  __pyx_v_self->_row_depth = (__pyx_v_self->_row_depth + 1);
+02060:         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:;
    }
  }
+02061:             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, 2061, __pyx_L6_error)

+02062:             if symbols is not None:
        __pyx_t_5 = (__pyx_v_symbols != ((PyObject*)Py_None));
        if (__pyx_t_5) {
/* … */
        }
+02063:                 for name, value in symbols.items():
          __pyx_t_7 = 0;
          if (unlikely(__pyx_v_symbols == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
            __PYX_ERR(0, 2063, __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, 2063, __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, 2063, __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;
+02064:                     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;
+02065:                         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, 2065, __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, 2065, __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, 2065, __pyx_L6_error)
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;

+02066:                         wrote_fields = True
              __pyx_v_wrote_fields = 1;
+02067:             if columns is not None:
        __pyx_t_5 = (__pyx_v_columns != ((PyObject*)Py_None));
        if (__pyx_t_5) {
/* … */
        }
+02068:                 for name, value in columns.items():
          __pyx_t_8 = 0;
          if (unlikely(__pyx_v_columns == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
            __PYX_ERR(0, 2068, __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, 2068, __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, 2068, __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;
+02069:                     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;
+02070:                         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, 2070, __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, 2070, __pyx_L6_error)
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;

+02071:                         wrote_fields = True
              __pyx_v_wrote_fields = 1;
+02072:             if wrote_fields:
        if (__pyx_v_wrote_fields) {
/* … */
          goto __pyx_L20;
        }
+02073:                 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, 2073, __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, 2073, __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, 2073, __pyx_L6_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

+02074:                 if not keep_marker:
          __pyx_t_13 = (!__pyx_v_keep_marker);

          if (__pyx_t_13) {
/* … */
          }
+02075:                     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, 2075, __pyx_L6_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 02076:             else:
+02077:                 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, 2077, __pyx_L6_error)

        }
        __pyx_L20:;
+02078:         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, 2078, __pyx_L8_except_error)
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_11);
        __Pyx_XGOTREF(__pyx_t_10);
+02079:             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, 2079, __pyx_L8_except_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+02080:             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, 2080, __pyx_L8_except_error)
      }
 02081:         finally:
+02082:             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:;
  }
 02083:         # Only a `Sender`'s own buffer has an auto-flush to trigger, and
 02084:         # `Sender.row` refuses a row there while another call is part-way
 02085:         # through the buffer, so this flush never cuts into an outer
 02086:         # call's work.
+02087:         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) {
/* … */
  }
+02088:             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, 2088, __pyx_L1_error)

 02089: 
+02090:     def row(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_19row(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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                \047table_name\047,\n                symbols={\047sym1\047: \047abc\047, \047sym2\047: \047def\047, \047sym3\047: None},\n                columns={\n                    \047col1\047: True,\n                    \047col2\047: 123,\n                    \047col3\047: 3.14,\n                    \047col4\047: \047xyz\047,\n                    \047col5\047: TimestampMicros(123456789),\n                    \047col6\047: datetime(2019, 1, 1, 12, 0, 0),\n                    \047col7\047: numpy.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]),\n                    \047col8\047: None},\n                at=TimestampNanos(123456789))\n\n            # Only symbols specified. Designated timestamp assigned by the db.\n            buffer.row(\n                \047table_name\047,\n                symbols={\047sym1\047: \047abc\047, \047sym2\047: \047def\047}, 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                \047sensor data\047,\n                columns={\n                    \047temperature\047: 24.5,\n                    \047humidity\047: 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 t""ypes directly and map as so:\n\n        .. list-table::\n            :header-rows: 1\n\n            * - Python type\n              - Serialized 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 impl""ementation.\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: ``\047\\x00\047`` is stored as code unit 0, although some\n        SQL operations treat it as CHAR\047s null/absent marker. GEOHASH has no\n        sentinel collision. Empty BINARY ``b\047\047`` 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 w""ill not be\n            created.\n        :param at: The timestamp of the row. This is required!\n            If ``ServerTimestamp``, timestamp is assigned 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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 2090, __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, 2090, __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, 2090, __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_17 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2090, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
/* … */
  __pyx_t_25 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 2090, __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_n_u_str_2) < (0)) __PYX_ERR(0, 2090, __pyx_L1_error)
  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, 2090, __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_2) < (0)) __PYX_ERR(0, 2090, __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, 2090, __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[103])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2090, __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_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_25);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __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_row_2, __pyx_t_4) < (0)) __PYX_ERR(0, 2090, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 02091:             self,
 02092:             table_name: str,
 02093:             *,
+02094:             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, 2090, __pyx_L1_error)
 02095:             columns: Optional[Dict[
 02096:                 str,
 02097:                 Union[None, bool, int, float, str, TimestampMicros,
 02098:                       TimestampNanos, datetime.datetime, numpy.ndarray,
 02099:                       Decimal, uuid.UUID, ipaddress.IPv4Address, bytes,
 02100:                       bytearray, memoryview, Char, DateMillis, Long256,
 02101:                       Geohash]]
+02102:                 ]=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, 2090, __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, 2090, __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, 2090, __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, 2090, __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, 2092, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_symbols), (&PyDict_Type), 1, "symbols", 2))) __PYX_ERR(0, 2094, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_columns), (&PyDict_Type), 1, "columns", 2))) __PYX_ERR(0, 2095, __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_17, __pyx_mstate_global->__pyx_n_u_columns, Py_None) < (0)) __PYX_ERR(0, 2090, __pyx_L1_error)
 02103:             at: Union[ServerTimestampType, TimestampNanos, datetime.datetime]):
 02104:         """
 02105:         Add a single row (line) to the buffer.
 02106: 
 02107:         .. code-block:: python
 02108: 
 02109:             # All fields specified.
 02110:             buffer.row(
 02111:                 'table_name',
 02112:                 symbols={'sym1': 'abc', 'sym2': 'def', 'sym3': None},
 02113:                 columns={
 02114:                     'col1': True,
 02115:                     'col2': 123,
 02116:                     'col3': 3.14,
 02117:                     'col4': 'xyz',
 02118:                     'col5': TimestampMicros(123456789),
 02119:                     'col6': datetime(2019, 1, 1, 12, 0, 0),
 02120:                     'col7': numpy.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]),
 02121:                     'col8': None},
 02122:                 at=TimestampNanos(123456789))
 02123: 
 02124:             # Only symbols specified. Designated timestamp assigned by the db.
 02125:             buffer.row(
 02126:                 'table_name',
 02127:                 symbols={'sym1': 'abc', 'sym2': 'def'}, at=Server.Timestamp)
 02128: 
 02129:             # Float columns and timestamp specified as `datetime.datetime`.
 02130:             # Pay special attention to the timezone, which if unspecified is
 02131:             # interpreted as UTC.
 02132:             buffer.row(
 02133:                 'sensor data',
 02134:                 columns={
 02135:                     'temperature': 24.5,
 02136:                     'humidity': 0.5},
 02137:                 at=datetime.datetime.now(tz=datetime.timezone.utc))
 02138: 
 02139: 
 02140:         Python strings passed as values to ``symbols`` are going to be encoded
 02141:         as the ``SYMBOL`` type in QuestDB, whilst Python strings passed as
 02142:         values to ``columns`` are going to be encoded as the ``STRING`` type.
 02143: 
 02144:         Refer to the
 02145:         `QuestDB documentation <https://questdb.com/docs/concept/symbol/>`_ to
 02146:         understand the difference between the ``SYMBOL`` and ``STRING`` types
 02147:         (TL;DR: symbols are interned strings).
 02148: 
 02149:         Column values can be specified with Python types directly and map as so:
 02150: 
 02151:         .. list-table::
 02152:             :header-rows: 1
 02153: 
 02154:             * - Python type
 02155:               - Serialized as ILP type
 02156:             * - ``bool``
 02157:               - `BOOLEAN <https://questdb.com/docs/reference/api/ilp/columnset-types#boolean>`_
 02158:             * - ``decimal``
 02159:               - `DECIMAL <https://questdb.com/docs/reference/api/ilp/columnset-types#decimal>`_
 02160:             * - ``int``
 02161:               - `INTEGER <https://questdb.com/docs/reference/api/ilp/columnset-types#integer>`_
 02162:             * - ``float``
 02163:               - `FLOAT <https://questdb.com/docs/reference/api/ilp/columnset-types#float>`_
 02164:             * - ``str``
 02165:               - `STRING <https://questdb.com/docs/reference/api/ilp/columnset-types#string>`_
 02166:             * - ``numpy.ndarray``
 02167:               - `ARRAY <https://questdb.com/docs/reference/api/ilp/columnset-types#array>`_
 02168:             * - ``datetime.datetime`` and ``TimestampMicros``
 02169:               - `TIMESTAMP <https://questdb.com/docs/reference/api/ilp/columnset-types#timestamp>`_
 02170:             * - ``uuid.UUID``
 02171:               - UUID (QWP-only)
 02172:             * - ``ipaddress.IPv4Address``
 02173:               - IPV4 (QWP-only)
 02174:             * - ``bytes``, ``bytearray``, or ``memoryview``
 02175:               - BINARY (QWP-only)
 02176:             * - ``Char``
 02177:               - CHAR (QWP-only)
 02178:             * - ``DateMillis``
 02179:               - DATE (QWP-only)
 02180:             * - ``Long256``
 02181:               - LONG256 (QWP-only)
 02182:             * - ``Geohash``
 02183:               - GEOHASH (QWP-only)
 02184:             * - ``None``
 02185:               - *Column is skipped and not serialized.*
 02186: 
 02187:         **Note**: Support for NumPy arrays (``numpy.array``) requires QuestDB server version 9.0.0 or higher.
 02188: 
 02189:         The seven QWP-only types require protocol ``udp``, ``ws``, or ``wss``
 02190:         and are rejected by ILP buffers used by ``tcp``, ``tcps``, ``http``,
 02191:         and ``https``. They require QuestDB 10 or newer, the first
 02192:         production QWP implementation.
 02193: 
 02194:         QuestDB reserves these values as ``NULL`` sentinels, but the client
 02195:         deliberately accepts them: IPV4 ``0.0.0.0``, DATE ``INT64_MIN``, UUID
 02196:         ``80000000-0000-0000-8000-000000000000``, and a LONG256 whose four
 02197:         64-bit limbs are all ``0x8000000000000000``. CHAR has no physical
 02198:         ``NULL`` sentinel: ``'\\x00'`` is stored as code unit 0, although some
 02199:         SQL operations treat it as CHAR's null/absent marker. GEOHASH has no
 02200:         sentinel collision. Empty BINARY ``b''`` is a real empty value and is
 02201:         distinct from ``NULL``.
 02202: 
 02203:         A bare ``int`` is a 64-bit LONG, so a value outside
 02204:         ``-2**63 .. 2**63-1`` raises ``OverflowError``. On a QWP buffer the
 02205:         message names :class:`Long256 <questdb.Long256>`, the wrapper that
 02206:         sends it as a 256-bit LONG256 instead; an ILP buffer, which has no
 02207:         LONG256 to offer, reports the bare conversion failure.
 02208: 
 02209:         If the destination table was already created, then the columns types
 02210:         will be cast to the types of the existing columns whenever possible
 02211:         (Refer to the QuestDB documentation pages linked above).
 02212: 
 02213:         Adding a row can trigger auto-flushing behaviour.
 02214: 
 02215:         :param table_name: The name of the table to which the row belongs.
 02216:         :param symbols: A dictionary of symbol column names to ``str`` values.
 02217:             As a convenience, you can also pass a ``None`` value which will
 02218:             have the same effect as skipping the key: If the column already
 02219:             existed, it will be recorded as ``NULL``, otherwise it will not be
 02220:             created.
 02221:         :param columns: A dictionary mapping column names to the supported
 02222:             column values listed above.
 02223:             As a convenience, you can also pass a ``None`` value which will
 02224:             have the same effect as skipping the key: If the column already
 02225:             existed, it will be recorded as ``NULL``, otherwise it will not be
 02226:             created.
 02227:         :param at: The timestamp of the row. This is required!
 02228:             If ``ServerTimestamp``, timestamp is assigned by QuestDB.
 02229:             If ``datetime``, the timestamp is converted to nanoseconds.
 02230:             A nanosecond unix epoch timestamp can be passed
 02231:             explicitly as a ``TimestampNanos`` object.
 02232:         """
+02233:         if at is None:
  __pyx_t_1 = (__pyx_v_at == Py_None);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+02234:             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, 2234, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+02235:                 QuestDBErrorCode.InvalidTimestamp,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2235, __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, 2235, __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, 2234, __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, 2234, __pyx_L1_error)
 02236:                 "`at` must be of type TimestampNanos, datetime, or ServerTimestamp"
 02237:             )
+02238:         self._row(
  __pyx_t_9.__pyx_n = 3;
  __pyx_t_9.symbols = ((PyObject*)__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, 2238, __pyx_L1_error)

 02239:             True,  # allow_auto_flush
 02240:             table_name,
 02241:             symbols,
 02242:             columns,
 02243:             at)
+02244:         return self
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF((PyObject *)__pyx_v_self);
      __pyx_r = ((PyObject *)__pyx_v_self);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 02245: 
+02246:     def dataframe(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_21dataframe(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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\047s\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\047s 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\047s index name (``df.index.name`` attribute).\n\n            If ``table_name_col`` is an integ""er, 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 ``\047auto\047`` (default), all columns of dtype ``\047categorical\047`` 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\047s 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 s""pecify a different timestamp 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                \047location\047: [\047London\047, \047Managua\047, \047London\047],\n                \047temperature\047: [24.5, 35.0, 25.5],\n                \047humidity\047: [0.5, 0.6, 0.45],\n                \047ts\047: pd.date_range(\0472021-07-01\047, periods=3)})\n            buf.dataframe(\n                df, table_name=\047weather\047, at=\047ts\047, symbols=[\047location\047])\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 Ma""ppings\n            :header-rows: 1\n\n            * - Pandas ``dtype``\n              - Nulls\n              - ILP Datatype\n            * - ``\047bool\047``\n              - N\n              - ``BOOLEAN``\n            * - ``\047boolean\047``\n              - N **\316\261**\n              - ``BOOLEAN``\n            * - ``\047object\047`` (``bool`` objects)\n              - N **\316\261**\n              - ``BOOLEAN``\n            * - ``\047uint8\047``\n              - N\n              - ``INTEGER``\n            * - ``\047int8\047``\n              - N\n              - ``INTEGER``\n            * - ``\047uint16\047``\n              - N\n              - ``INTEGER``\n            * - ``\047int16\047``\n              - N\n              - ``INTEGER``\n            * - ``\047uint32\047``\n              - N\n              - ``INTEGER``\n            * - ``\047int32\047``\n              - N\n              - ``INTEGER``\n            * - ``\047uint64\047``\n              - N\n              - ``INTEGER`` **\316\262**\n            * - ``\047int64\047``\n              - N\n              - ``INTEGER``\n            * - ``\047UInt8\047``\n              - Y\n              - ``INTEGER``\n            * - ``\047Int8\047``\n              - Y\n              - ``INTEGER``\n            * - ``\047UInt16\047``\n              - Y\n              - ``INTEGER``\n            * - ``\047Int16\047``\n              - Y\n              - ``INTEGER``\n            * - ``\047UInt32\047``\n              - Y\n              - ``INTEGER``\n            * - ``\047Int32\047``\n              - Y\n              - ``INTEGER``\n            * - ``\047UInt64\047``\n              - Y\n              - ``INTEGER`` **\316\262**\n            * - ``\047Int64\047``\n              - Y\n              - ``INTEGER``\n            * - ``\047object\047`` (``int`` objects)\n              - Y\n              - ``INTEGER`` **\316\262**\n            * - ``\047float32\047`` **\316\263**\n              - Y (``NaN``)\n              - ``FLOAT``""\n            * - ``\047float64\047``\n              - Y (``NaN``)\n              - ``FLOAT``\n            * - ``\047object\047`` (``float`` objects)\n              - Y (``NaN``)\n              - ``FLOAT``\n            * - ``\047string\047`` (``str`` objects)\n              - Y\n              - ``STRING`` (default), ``SYMBOL`` via ``symbols`` arg. **\316\264**\n            * - ``\047string[pyarrow]\047``\n              - Y\n              - ``STRING`` (default), ``SYMBOL`` via ``symbols`` arg. **\316\264**\n            * - ``\047category\047`` (``str`` objects) **\316\265**\n              - Y\n              - ``SYMBOL`` (default), ``STRING`` via ``symbols`` arg. **\316\264**\n            * - ``\047object\047`` (``str`` objects)\n              - Y\n              - ``STRING`` (default), ``SYMBOL`` via ``symbols`` arg. **\316\264**\n            * - ``\047datetime64[ns]\047``\n              - Y\n              - ``TIMESTAMP`` **\316\266**\n            * - ``\047datetime64[ns, tz]\047``\n              - Y\n              - ``TIMESTAMP`` **\316\266**\n            * - ``\047object\047`` (``Decimal`` objects)\n              - Y (``NaN``)\n              - ``DECIMAL``\n\n        .. note::\n\n            * **\316\261**: Note some pandas dtypes allow nulls (e.g. ``\047boolean\047``),\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 ``\047uint64\047``, ``\047UInt64\047`` 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 \047.dataframe()\047 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 microseconds.\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 ``\047string[python]\047`` 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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 2246, __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, 2246, __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, 2246, __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, 2246, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
/* … */
  __pyx_t_25 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 2246, __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, 2246, __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, 2246, __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, 2246, __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, 2246, __pyx_L1_error)
  __pyx_t_17 = __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[104])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2246, __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_Buffer, __pyx_mstate_global->__pyx_n_u_dataframe, __pyx_t_17) < (0)) __PYX_ERR(0, 2246, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 02247:             self,
 02248:             df,  # : pd.DataFrame
 02249:             *,
+02250:             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, 2246, __pyx_L1_error)
+02251:             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, 2246, __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, 2246, __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, 2246, __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, 2246, __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, 2250, __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, 2246, __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, 2246, __pyx_L1_error)
 02252:             symbols: Union[str, bool, List[int], List[str]] = 'auto',
 02253:             at: Union[ServerTimestampType, int, str, TimestampNanos, datetime.datetime]):
 02254:         """
 02255:         Add a pandas DataFrame to the buffer.
 02256: 
 02257:         Also see :func:`Sender.dataframe <questdb.Sender.dataframe>` if you
 02258:         are not using the buffer explicitly. Over ILP and QWP/UDP it accepts
 02259:         the arguments shown here and adds auto-flushing. Over QWP/WebSocket
 02260:         it instead uses the direct columnar path, additionally accepting
 02261:         ``max_rows_per_batch`` and ``schema_overrides``; see
 02262:         :meth:`QuestDB.dataframe <questdb.QuestDB.dataframe>` for that path's
 02263:         supported column types and arguments.
 02264: 
 02265:         Requires ``pandas`` and ``numpy``. ``pyarrow`` is only needed
 02266:         when the frame contains ``pd.ArrowDtype`` / ``pd.Categorical`` /
 02267:         ``string`` dtype columns — purely NumPy / object dtypes work
 02268:         without it.
 02269: 
 02270:         Adding a dataframe can trigger auto-flushing behaviour,
 02271:         even between rows of the same dataframe. To avoid this, you can
 02272:         use HTTP and transactions (see :func:`Sender.transaction <questdb.Sender.transaction>`).
 02273: 
 02274:         :param df: The pandas DataFrame to serialize to the buffer.
 02275:         :type df: pandas.DataFrame
 02276: 
 02277:         :param table_name: The name of the table to which the rows belong.
 02278: 
 02279:             If ``None``, the table name is taken from the ``table_name_col``
 02280:             parameter. If both ``table_name`` and ``table_name_col`` are
 02281:             ``None``, the table name is taken from the DataFrame's index
 02282:             name (``df.index.name`` attribute).
 02283:         :type table_name: str or None
 02284: 
 02285:         :param table_name_col: The name or index of the column in the DataFrame
 02286:             that contains the table name.
 02287: 
 02288:             If ``None``, the table name is taken
 02289:             from the ``table_name`` parameter. If both ``table_name`` and
 02290:             ``table_name_col`` are ``None``, the table name is taken from the
 02291:             DataFrame's index name (``df.index.name`` attribute).
 02292: 
 02293:             If ``table_name_col`` is an integer, it is interpreted as the index
 02294:             of the column starting from ``0``. The index of the column can be
 02295:             negative, in which case it is interpreted as an offset from the end
 02296:             of the DataFrame. E.g. ``-1`` is the last column.
 02297:         :type table_name_col: str or int or None
 02298: 
 02299:         :param symbols: The columns to be serialized as symbols.
 02300: 
 02301:             If ``'auto'`` (default), all columns of dtype ``'categorical'`` are
 02302:             serialized as symbols. If ``True``, all ``str`` columns are
 02303:             serialized as symbols. If ``False``, no columns are serialized as
 02304:             symbols.
 02305: 
 02306:             The list of symbols can also be specified explicitly as a ``list``
 02307:             of column names (``str``) or indices (``int``). Integer indices
 02308:             start at ``0`` and can be negative, offset from the end of the
 02309:             DataFrame. E.g. ``-1`` is the last column.
 02310: 
 02311:             Only columns containing strings can be serialized as symbols.
 02312: 
 02313:         :type symbols: str or bool or list[str] or list[int]
 02314: 
 02315:         :param at: The designated timestamp of the rows.
 02316: 
 02317:             You can specify a single value for all rows or column name or index.
 02318:             If ``ServerTimestamp``, timestamp is assigned by the server for all rows.
 02319:             To pass in a timestamp explicitly as an integer use the
 02320:             ``TimestampNanos`` wrapper type. To get the current timestamp,
 02321:             use ``TimestampNanos.now()``.
 02322:             When passing a ``datetime.datetime`` object, the timestamp is
 02323:             converted to nanoseconds.
 02324:             A naive ``datetime`` object is interpreted as UTC — never
 02325:             your machine's local timezone — and a ``UserWarning`` is
 02326:             emitted once per process
 02327:             (call ``datetime.datetime.now(tz=datetime.timezone.utc)``
 02328:             for the current timestamp to
 02329:             avoid bugs).
 02330: 
 02331:             To specify a different timestamp for each row, pass in a column name
 02332:             (``str``) or index (``int``, 0-based index, negative index
 02333:             supported): In this case, the column needs to be of dtype
 02334:             ``datetime64[ns]`` (assumed to be in the **UTC timezone** and not
 02335:             local, due to differences in Pandas and Python datetime handling) or
 02336:             ``datetime64[ns, tz]``. When a timezone is specified in the column,
 02337:             it is converted to UTC automatically.
 02338: 
 02339:             A timestamp column can also contain ``None`` values. The server will
 02340:             assign the current timestamp to those rows.
 02341: 
 02342:             **Note**: All timestamps are always converted to nanoseconds and in
 02343:             the UTC timezone. Timezone information is dropped before sending and
 02344:             QuestDB will not store any timezone information.
 02345:         :type at: TimestampNanos, datetime.datetime, int or str or None
 02346: 
 02347:         **Note**: It is an error to specify both ``table_name`` and
 02348:         ``table_name_col``.
 02349: 
 02350:         **Note**: The "index" column of the DataFrame is never serialized,
 02351:         even if it is named.
 02352: 
 02353:         Example:
 02354: 
 02355:         .. code-block:: python
 02356: 
 02357:             import pandas as pd
 02358:             import questdb as qi
 02359: 
 02360:             buf = qi.ingress.Buffer(protocol_version=2)
 02361:             # ...
 02362: 
 02363:             df = pd.DataFrame({
 02364:                 'location': ['London', 'Managua', 'London'],
 02365:                 'temperature': [24.5, 35.0, 25.5],
 02366:                 'humidity': [0.5, 0.6, 0.45],
 02367:                 'ts': pd.date_range('2021-07-01', periods=3)})
 02368:             buf.dataframe(
 02369:                 df, table_name='weather', at='ts', symbols=['location'])
 02370: 
 02371:             # ...
 02372:             sender.flush(buf)
 02373: 
 02374:         **Pandas to ILP datatype mappings**
 02375: 
 02376:         .. seealso:: https://questdb.com/docs/reference/api/ilp/columnset-types/
 02377: 
 02378:         .. list-table:: Pandas Mappings
 02379:             :header-rows: 1
 02380: 
 02381:             * - Pandas ``dtype``
 02382:               - Nulls
 02383:               - ILP Datatype
 02384:             * - ``'bool'``
 02385:               - N
 02386:               - ``BOOLEAN``
 02387:             * - ``'boolean'``
 02388:               - N **α**
 02389:               - ``BOOLEAN``
 02390:             * - ``'object'`` (``bool`` objects)
 02391:               - N **α**
 02392:               - ``BOOLEAN``
 02393:             * - ``'uint8'``
 02394:               - N
 02395:               - ``INTEGER``
 02396:             * - ``'int8'``
 02397:               - N
 02398:               - ``INTEGER``
 02399:             * - ``'uint16'``
 02400:               - N
 02401:               - ``INTEGER``
 02402:             * - ``'int16'``
 02403:               - N
 02404:               - ``INTEGER``
 02405:             * - ``'uint32'``
 02406:               - N
 02407:               - ``INTEGER``
 02408:             * - ``'int32'``
 02409:               - N
 02410:               - ``INTEGER``
 02411:             * - ``'uint64'``
 02412:               - N
 02413:               - ``INTEGER`` **β**
 02414:             * - ``'int64'``
 02415:               - N
 02416:               - ``INTEGER``
 02417:             * - ``'UInt8'``
 02418:               - Y
 02419:               - ``INTEGER``
 02420:             * - ``'Int8'``
 02421:               - Y
 02422:               - ``INTEGER``
 02423:             * - ``'UInt16'``
 02424:               - Y
 02425:               - ``INTEGER``
 02426:             * - ``'Int16'``
 02427:               - Y
 02428:               - ``INTEGER``
 02429:             * - ``'UInt32'``
 02430:               - Y
 02431:               - ``INTEGER``
 02432:             * - ``'Int32'``
 02433:               - Y
 02434:               - ``INTEGER``
 02435:             * - ``'UInt64'``
 02436:               - Y
 02437:               - ``INTEGER`` **β**
 02438:             * - ``'Int64'``
 02439:               - Y
 02440:               - ``INTEGER``
 02441:             * - ``'object'`` (``int`` objects)
 02442:               - Y
 02443:               - ``INTEGER`` **β**
 02444:             * - ``'float32'`` **γ**
 02445:               - Y (``NaN``)
 02446:               - ``FLOAT``
 02447:             * - ``'float64'``
 02448:               - Y (``NaN``)
 02449:               - ``FLOAT``
 02450:             * - ``'object'`` (``float`` objects)
 02451:               - Y (``NaN``)
 02452:               - ``FLOAT``
 02453:             * - ``'string'`` (``str`` objects)
 02454:               - Y
 02455:               - ``STRING`` (default), ``SYMBOL`` via ``symbols`` arg. **δ**
 02456:             * - ``'string[pyarrow]'``
 02457:               - Y
 02458:               - ``STRING`` (default), ``SYMBOL`` via ``symbols`` arg. **δ**
 02459:             * - ``'category'`` (``str`` objects) **ε**
 02460:               - Y
 02461:               - ``SYMBOL`` (default), ``STRING`` via ``symbols`` arg. **δ**
 02462:             * - ``'object'`` (``str`` objects)
 02463:               - Y
 02464:               - ``STRING`` (default), ``SYMBOL`` via ``symbols`` arg. **δ**
 02465:             * - ``'datetime64[ns]'``
 02466:               - Y
 02467:               - ``TIMESTAMP`` **ζ**
 02468:             * - ``'datetime64[ns, tz]'``
 02469:               - Y
 02470:               - ``TIMESTAMP`` **ζ**
 02471:             * - ``'object'`` (``Decimal`` objects)
 02472:               - Y (``NaN``)
 02473:               - ``DECIMAL``
 02474: 
 02475:         .. note::
 02476: 
 02477:             * **α**: Note some pandas dtypes allow nulls (e.g. ``'boolean'``),
 02478:               where the QuestDB database does not.
 02479: 
 02480:             * **β**: The valid range for integer values is -2^63 to 2^63-1.
 02481:               Any ``'uint64'``, ``'UInt64'`` or python ``int`` object values
 02482:               outside this range will raise an error during serialization.
 02483: 
 02484:             * **γ**: Upcast to 64-bit float during serialization.
 02485: 
 02486:             * **δ**: Columns containing strings can also be used to specify the
 02487:               table name. See ``table_name_col``.
 02488: 
 02489:             * **ε**: We only support categories containing strings. If the
 02490:               category contains non-string values, an error will be raised.
 02491: 
 02492:             * **ζ**: The '.dataframe()' method only supports datetimes with
 02493:               nanosecond precision. The designated timestamp column (see ``at``
 02494:               parameter) maintains the nanosecond precision, whilst values
 02495:               stored as columns have their precision truncated to microseconds.
 02496:               All dates are sent as UTC and any additional timezone information
 02497:               is dropped. If no timezone is specified, we follow
 02498:               the pandas convention of assuming the timezone is UTC.
 02499:               Datetimes before 1970-01-01 00:00:00 UTC are not supported.
 02500:               If a datetime value is specified as ``None`` (``NaT``), it is
 02501:               interpreted as the current QuestDB server time set on receipt of
 02502:               message.
 02503: 
 02504:         **Error Handling and Recovery**
 02505: 
 02506:         In case an exception is raised during dataframe serialization, the
 02507:         buffer is left in its previous state.
 02508:         The buffer remains in a valid state and can be used for further calls
 02509:         even after an error.
 02510: 
 02511:         For clarification, as an example, if an invalid ``None``
 02512:         value appears at the 3rd row for a ``bool`` column, neither the 3rd nor
 02513:         the preceding rows are added to the buffer.
 02514: 
 02515:         **Note**: This differs from the :func:`Sender.dataframe <questdb.Sender.dataframe>` method, which
 02516:         modifies this guarantee due to its ``auto_flush`` logic.
 02517: 
 02518:         **Performance Considerations**
 02519: 
 02520:         The Python GIL is released during serialization if it is not needed.
 02521:         If any column requires the GIL, the entire serialization is done whilst
 02522:         holding the GIL.
 02523: 
 02524:         Column types that require the GIL are:
 02525: 
 02526:         * Columns of ``str``, ``float`` or ``int`` or ``float`` Python objects.
 02527:         * The ``'string[python]'`` dtype.
 02528:         """
+02529:         if at is None:
  __pyx_t_1 = (__pyx_v_at == Py_None);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+02530:             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, 2530, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+02531:                 QuestDBErrorCode.InvalidTimestamp,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2531, __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, 2531, __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, 2530, __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, 2530, __pyx_L1_error)
 02532:                 "`at` must be of type TimestampNanos, datetime, or ServerTimestamp"
 02533:             )
+02534:         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, 2534, __pyx_L1_error)

+02535:         _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, 2535, __pyx_L1_error)

 02536:             self,
 02537:             auto_flush_blank(),
 02538:             self._impl,
 02539:             df,
 02540:             table_name,
 02541:             table_name_col,
 02542:             symbols,
 02543:             at)
+02544:         return self
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF((PyObject *)__pyx_v_self);
      __pyx_r = ((PyObject *)__pyx_v_self);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 02545: 
 02546: 
 02547: _FLUSH_FMT = ('{} - See https://py-questdb-client.readthedocs.io/en/'
+02548:     'v' + VERSION +
  __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_VERSION); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2548, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_25 = PyNumber_Add(__pyx_mstate_global->__pyx_kp_u_See_https_py_questdb_client_rea, __pyx_t_17); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 2548, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __pyx_t_17 = PyNumber_Add(__pyx_t_25, __pyx_mstate_global->__pyx_kp_u_troubleshooting_html_inspecting); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2548, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_FLUSH_FMT, __pyx_t_17) < (0)) __PYX_ERR(0, 2547, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 02549:     '/troubleshooting.html#inspecting-and-debugging-errors#flush-failed')
 02550: 
 02551: 
+02552: 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_10);
  __Pyx_AddTraceback("questdb._client._timedelta_to_millis", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;


  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02553:     """
 02554:     Convert a timedelta to milliseconds.
 02555:     """
 02556:     cdef int64_t millis = (
+02557:         <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, 2557, __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, 2557, __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, 2557, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);


+02558:         <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, 2558, __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, 2558, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_t_4 = __Pyx_PyNumber_Add_int_object(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2558, __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, 2558, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_millis = __pyx_t_3;
+02559:         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, 2559, __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, 2559, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+02560:     if millis < 0:
  __pyx_t_6 = (__pyx_v_millis < 0);

  if (unlikely(__pyx_t_6)) {
/* … */
  }
+02561:         raise ValueError(
    __pyx_t_5 = NULL;
+02562:             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, 2562, __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__3;
    __pyx_t_8 = 33;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7[1]);
    #endif
    __pyx_t_9 = 0;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_9 |= __Pyx_PyUnicode_KIND_04(__pyx_t_7[1]);
    #endif
    __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_7, 3, __pyx_t_8, __pyx_t_9);
    if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2562, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_11 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_10};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2561, __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, 2561, __pyx_L1_error)
+02563:     if millis == 0 and timedelta:
  __pyx_t_12 = (__pyx_v_millis == 0);

  if (__pyx_t_12) {

  } else {

    __pyx_t_6 = __pyx_t_12;

    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_12 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_timedelta)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 2563, __pyx_L1_error)

  __pyx_t_6 = __pyx_t_12;

  __pyx_L5_bool_binop_done:;
  if (__pyx_t_6) {
/* … */
  }
 02564:         # Never silently turn a positive finite duration into 0ms, which
 02565:         # several options interpret as "no deadline".
+02566:         return 1
    {

      __pyx_r = 1;
    }
    goto __pyx_L0;
+02567:     return millis
  {

    __pyx_r = __pyx_v_millis;
  }
  goto __pyx_L0;
 02568: 
 02569: 
+02570: 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;
}
 02571:     """A Python ``int`` that is not a boolean.
 02572: 
 02573:     For the connection options, whose values come from a conf string or
 02574:     a literal in the caller's code. The claim vocabulary reads its
 02575:     numbers out of arrays and pandas cells too, so it uses
 02576:     `_is_integral_not_bool` instead.
 02577:     """
+02578:     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;
 02579: 
 02580: 
+02581: 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;
}
 02582:     """A whole number that is not a boolean.
 02583: 
 02584:     The one predicate for every number in the round-trip claim
 02585:     vocabulary: the claim version, a geohash precision wherever it is
 02586:     read, the ``schema_overrides`` geohash bits, and the arguments the
 02587:     QWP-only wrapper classes take. Those numbers arrive from array
 02588:     metadata and from pandas cells as often as from a literal, and
 02589:     `numpy.int64` is what a claim rebuilt from array metadata carries,
 02590:     so holding a field to `int` alone drops it over its type.
 02591: 
 02592:     ``True == 1``, so a boolean would otherwise read as a version, a
 02593:     one-bit precision, or a geohash of zero bits. Identity settles it:
 02594:     `bool` cannot be subclassed, and `numpy.bool_` is not registered as
 02595:     `numbers.Integral`.
 02596: 
 02597:     A caller of this holds the value to a range next, and hands it on
 02598:     to C. Both want a plain `int`, so each site coerces with `int()`
 02599:     once the predicate has passed.
 02600:     """
+02601:     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;
  }
+02602:             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, 2602, __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, 2602, __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, 2602, __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;
 02603: 
 02604: 
+02605: 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;
}
+02606:     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, 2606, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+02607:         return 75000
    {

      __pyx_r = 0x124F8;
    }
    goto __pyx_L0;
 02608:     else:
+02609:         return 600
  /*else*/ {
    {

      __pyx_r = 0x258;
    }
    goto __pyx_L0;
  }
 02610: 
 02611: 
+02612: 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;
}
 02613:     line_sender_protocol protocol,
 02614:     object auto_flush,
 02615:     object auto_flush_rows,
 02616:     object auto_flush_bytes,
 02617:     object auto_flush_interval,
 02618:     auto_flush_mode_t* c_auto_flush,
 02619:     size_t max_datagram_size
 02620: ) except -1:
 02621:     # Set defaults.
+02622:     if auto_flush_rows is None:
  __pyx_t_1 = (__pyx_v_auto_flush_rows == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+02623:         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, 2623, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyLong_From_int64_t(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2623, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);

    __Pyx_DECREF_SET(__pyx_v_auto_flush_rows, __pyx_t_3);
    __pyx_t_3 = 0;
 02624: 
+02625:     if auto_flush_bytes is None:
  __pyx_t_1 = (__pyx_v_auto_flush_bytes == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+02626:         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, 2626, __pyx_L1_error)
    if (__pyx_t_1) {
/* … */
      goto __pyx_L5;
    }
+02627:             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, 2627, __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;
 02628:         else:
+02629:             auto_flush_bytes = False
    /*else*/ {
      __Pyx_INCREF(Py_False);
      __Pyx_DECREF_SET(__pyx_v_auto_flush_bytes, Py_False);
    }
    __pyx_L5:;
 02630: 
+02631:     if auto_flush_interval is None:
  __pyx_t_1 = (__pyx_v_auto_flush_interval == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+02632:         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);
 02633: 
+02634:     if isinstance(auto_flush, str):
  __pyx_t_1 = PyUnicode_Check(__pyx_v_auto_flush); 
  if (__pyx_t_1) {
/* … */
  }
+02635:         if auto_flush == 'off':
    __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_auto_flush, __pyx_mstate_global->__pyx_n_u_off, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2635, __pyx_L1_error)
    if (__pyx_t_1) {
/* … */
      goto __pyx_L8;
    }
+02636:             auto_flush = False
      __Pyx_INCREF(Py_False);
      __Pyx_DECREF_SET(__pyx_v_auto_flush, Py_False);
+02637:         elif auto_flush == 'on':
    __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_auto_flush, __pyx_mstate_global->__pyx_n_u_on, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2637, __pyx_L1_error)
    if (likely(__pyx_t_1)) {
/* … */
      goto __pyx_L8;
    }
+02638:             auto_flush = True
      __Pyx_INCREF(Py_True);
      __Pyx_DECREF_SET(__pyx_v_auto_flush, Py_True);
 02639:         else:
+02640:             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, 2640, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
+02641:                 QuestDBErrorCode.ConfigError,
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2641, __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, 2641, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+02642:                 '"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, 2642, __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, 2640, __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, 2640, __pyx_L1_error)
    }
    __pyx_L8:;
+02643:                 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, 2643, __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, 2643, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 02644: 
 02645:     # Normalise auto_flush parameters to ints or False.
+02646:     if isinstance(auto_flush_rows, str):
  __pyx_t_1 = PyUnicode_Check(__pyx_v_auto_flush_rows); 
  if (__pyx_t_1) {
/* … */
    goto __pyx_L9;
  }
+02647:         if auto_flush_rows == 'on':
    __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_auto_flush_rows, __pyx_mstate_global->__pyx_n_u_on, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2647, __pyx_L1_error)
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+02648:             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, 2648, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
+02649:                 QuestDBErrorCode.ConfigError,
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2649, __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, 2649, __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, 2648, __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, 2648, __pyx_L1_error)
 02650:                 '"auto_flush_rows" cannot be "on"')
+02651:         elif auto_flush_rows == 'off':
    __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_auto_flush_rows, __pyx_mstate_global->__pyx_n_u_off, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2651, __pyx_L1_error)
    if (__pyx_t_1) {
/* … */
      goto __pyx_L10;
    }
+02652:             auto_flush_rows = False
      __Pyx_INCREF(Py_False);
      __Pyx_DECREF_SET(__pyx_v_auto_flush_rows, Py_False);
 02653:         else:
+02654:             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, 2654, __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:;
+02655:     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, 2655, __pyx_L1_error)

  __pyx_t_1 = __pyx_t_10;

  __pyx_L11_bool_binop_done:;
  if (likely(__pyx_t_1)) {

    goto __pyx_L9;
  }
 02656:         pass
 02657:     else:
+02658:         raise TypeError(
  /*else*/ {
    __pyx_t_6 = NULL;
+02659:             '"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, 2659, __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, 2658, __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, 2658, __pyx_L1_error)
  }
  __pyx_L9:;
+02660:             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, 2660, __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, 2660, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 02661: 
+02662:     if isinstance(auto_flush_bytes, str):
  __pyx_t_1 = PyUnicode_Check(__pyx_v_auto_flush_bytes); 
  if (__pyx_t_1) {
/* … */
    goto __pyx_L13;
  }
+02663:         if auto_flush_bytes == 'on':
    __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_auto_flush_bytes, __pyx_mstate_global->__pyx_n_u_on, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2663, __pyx_L1_error)
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+02664:             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, 2664, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
+02665:                 QuestDBErrorCode.ConfigError,
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2665, __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, 2665, __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, 2664, __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, 2664, __pyx_L1_error)
 02666:                 '"auto_flush_bytes" cannot be "on"')
+02667:         elif auto_flush_bytes == 'off':
    __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_auto_flush_bytes, __pyx_mstate_global->__pyx_n_u_off, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2667, __pyx_L1_error)
    if (__pyx_t_1) {
/* … */
      goto __pyx_L14;
    }
+02668:             auto_flush_bytes = False
      __Pyx_INCREF(Py_False);
      __Pyx_DECREF_SET(__pyx_v_auto_flush_bytes, Py_False);
 02669:         else:
+02670:             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, 2670, __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:;
+02671:     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, 2671, __pyx_L1_error)

  __pyx_t_1 = __pyx_t_10;

  __pyx_L15_bool_binop_done:;
  if (likely(__pyx_t_1)) {

    goto __pyx_L13;
  }
 02672:         pass
 02673:     else:
+02674:         raise TypeError(
  /*else*/ {
    __pyx_t_6 = NULL;
+02675:             '"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, 2675, __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, 2674, __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, 2674, __pyx_L1_error)
  }
  __pyx_L13:;
+02676:             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, 2676, __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, 2676, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 02677: 
+02678:     if isinstance(auto_flush_interval, str):
  __pyx_t_1 = PyUnicode_Check(__pyx_v_auto_flush_interval); 
  if (__pyx_t_1) {
/* … */
    goto __pyx_L17;
  }
+02679:         if auto_flush_interval == 'on':
    __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_auto_flush_interval, __pyx_mstate_global->__pyx_n_u_on, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2679, __pyx_L1_error)
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+02680:             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, 2680, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
+02681:                 QuestDBErrorCode.ConfigError,
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2681, __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, 2681, __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, 2680, __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, 2680, __pyx_L1_error)
 02682:                 '"auto_flush_interval" cannot be "on"')
+02683:         elif auto_flush_interval == 'off':
    __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_auto_flush_interval, __pyx_mstate_global->__pyx_n_u_off, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2683, __pyx_L1_error)
    if (__pyx_t_1) {
/* … */
      goto __pyx_L18;
    }
+02684:             auto_flush_interval = False
      __Pyx_INCREF(Py_False);
      __Pyx_DECREF_SET(__pyx_v_auto_flush_interval, Py_False);
 02685:         else:
+02686:             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, 2686, __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:;
+02687:     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, 2687, __pyx_L1_error)

  __pyx_t_1 = __pyx_t_10;

  __pyx_L19_bool_binop_done:;
  if (__pyx_t_1) {

    goto __pyx_L17;
  }
 02688:         pass
+02689:     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;
  }
+02690:         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, 2690, __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, 2690, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2690, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);

    __Pyx_DECREF_SET(__pyx_v_auto_flush_interval, __pyx_t_3);
    __pyx_t_3 = 0;
 02691:     else:
+02692:         raise TypeError(
  /*else*/ {
    __pyx_t_6 = NULL;
+02693:             '"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, 2693, __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, 2692, __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, 2692, __pyx_L1_error)
  }
  __pyx_L17:;
+02694:             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, 2694, __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, 2694, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 02695: 
 02696:     # Coerce auto_flush to bool if None.
+02697:     if auto_flush is None:
  __pyx_t_1 = (__pyx_v_auto_flush == Py_None);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L21;
  }
 02698:         auto_flush = (
+02699:             (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, 2699, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = __pyx_t_5;
      __pyx_t_5 = 0;

      goto __pyx_L22_bool_binop_done;
    }
+02700:             (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, 2700, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = __pyx_t_5;
      __pyx_t_5 = 0;

      goto __pyx_L22_bool_binop_done;
    }
+02701:             (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, 2701, __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;
+02702:     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:;
+02703:         raise ValueError(
    __pyx_t_5 = NULL;
+02704:             '"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, 2704, __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, 2703, __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, 2703, __pyx_L1_error)
+02705:             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, 2705, __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, 2705, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 02706: 
 02707:     # Validate auto_flush parameters.
+02708:     if auto_flush and \
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_auto_flush); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2708, __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)) {
/* … */
  }
+02709:             (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;
  }
+02710:             (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;
  }
+02711:             (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:;
+02712:         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, 2712, __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, 2712, __pyx_L1_error)
 02713:             '"auto_flush" is enabled but no other auto-flush '
 02714:             'parameters are enabled. Please set at least one of '
 02715:             '"auto_flush_rows", "auto_flush_bytes" or '
 02716:             '"auto_flush_interval".')
 02717: 
+02718:     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_1 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_auto_flush_rows, __pyx_mstate_global->__pyx_int_1, Py_LT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2718, __pyx_L1_error)

  __pyx_t_10 = __pyx_t_1;

  __pyx_L31_bool_binop_done:;
  if (unlikely(__pyx_t_10)) {
/* … */
  }
+02719:         raise ValueError(
    __pyx_t_6 = NULL;
+02720:             '"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, 2720, __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, 2719, __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, 2719, __pyx_L1_error)
+02721:             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, 2721, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
 02722: 
+02723:     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_1 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_auto_flush_bytes, __pyx_mstate_global->__pyx_int_1, Py_LT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2723, __pyx_L1_error)

  __pyx_t_10 = __pyx_t_1;

  __pyx_L34_bool_binop_done:;
  if (unlikely(__pyx_t_10)) {
/* … */
  }
+02724:         raise ValueError(
    __pyx_t_7 = NULL;
+02725:             '"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, 2725, __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, 2724, __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, 2724, __pyx_L1_error)
+02726:             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, 2726, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
 02727: 
+02728:     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_1 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_auto_flush_interval, __pyx_mstate_global->__pyx_int_1, Py_LT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2728, __pyx_L1_error)

  __pyx_t_10 = __pyx_t_1;

  __pyx_L37_bool_binop_done:;
  if (unlikely(__pyx_t_10)) {
/* … */
  }
+02729:         raise ValueError(
    __pyx_t_5 = NULL;
+02730:             '"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, 2730, __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, 2729, __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, 2729, __pyx_L1_error)
+02731:             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, 2731, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
 02732: 
 02733:     # Parse individual auto_flush parameters to C struct.
+02734:     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, 2734, __pyx_L1_error)
  __pyx_v_c_auto_flush->enabled = __pyx_t_10;
 02735: 
+02736:     if auto_flush_rows is False:
  __pyx_t_10 = (__pyx_v_auto_flush_rows == Py_False);
  if (__pyx_t_10) {
/* … */
    goto __pyx_L39;
  }
+02737:         c_auto_flush.row_count = -1
    __pyx_v_c_auto_flush->row_count = -1L;
 02738:     else:
+02739:         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, 2739, __pyx_L1_error)
    __pyx_v_c_auto_flush->row_count = __pyx_t_2;
  }
  __pyx_L39:;
 02740: 
+02741:     if auto_flush_bytes is False:
  __pyx_t_10 = (__pyx_v_auto_flush_bytes == Py_False);
  if (__pyx_t_10) {
/* … */
    goto __pyx_L40;
  }
+02742:         c_auto_flush.byte_count = -1
    __pyx_v_c_auto_flush->byte_count = -1L;
 02743:     else:
+02744:         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, 2744, __pyx_L1_error)
    __pyx_v_c_auto_flush->byte_count = __pyx_t_2;
  }
  __pyx_L40:;
 02745: 
+02746:     if auto_flush_interval is False:
  __pyx_t_10 = (__pyx_v_auto_flush_interval == Py_False);
  if (__pyx_t_10) {
/* … */
    goto __pyx_L41;
  }
+02747:         c_auto_flush.interval = -1
    __pyx_v_c_auto_flush->interval = -1L;
 02748:     else:
+02749:         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, 2749, __pyx_L1_error)
    __pyx_v_c_auto_flush->interval = __pyx_t_2;
  }
  __pyx_L41:;
 02750: 
 02751: 
+02752: 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;
}
 02753:     line_sender_protocol protocol,
 02754:     object auto_flush,
 02755:     object auto_flush_rows,
 02756:     object auto_flush_bytes,
 02757:     object auto_flush_interval,
 02758:     auto_flush_mode_t* c_auto_flush,
 02759:     bint* c_auto_flush_bytes_dynamic,
 02760: ) except -1:
 02761:     """Parse the QWP pool's Java-builder-compatible auto-flush policy."""
+02762:     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;
+02763:     if auto_flush_rows is None:
  __pyx_t_1 = (__pyx_v_auto_flush_rows == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+02764:         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);
+02765:     if auto_flush_bytes is None:
  __pyx_t_1 = (__pyx_v_auto_flush_bytes == Py_None);
  if (__pyx_t_1) {
/* … */
  }
 02766:         # The pooled path derives its byte threshold from the negotiated frame
 02767:         # cap. Give the generic parser an enabled placeholder so the byte
 02768:         # trigger alone still turns auto-flush on; the separate flag records
 02769:         # that this placeholder is dynamic rather than a literal threshold.
+02770:         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);
+02771:     if auto_flush_interval is None:
  __pyx_t_1 = (__pyx_v_auto_flush_interval == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+02772:         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);
+02773:     _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, 2773, __pyx_L1_error)

 02774:         protocol,
 02775:         auto_flush,
 02776:         auto_flush_rows,
 02777:         auto_flush_bytes,
 02778:         auto_flush_interval,
 02779:         c_auto_flush,
 02780:         0)
+02781:     c_auto_flush_bytes_dynamic[0] = default_auto_flush_bytes
  (__pyx_v_c_auto_flush_bytes_dynamic[0]) = __pyx_v_default_auto_flush_bytes;
 02782: 
 02783: 
 02784: # The frame cap a QuestDB server advertises with its default settings:
 02785: # 2 MiB less 14 bytes.
+02786: cdef size_t _QWP_DEFAULT_SERVER_FRAME_CAP = 2 * 1024 * 1024 - 14
  __pyx_v_7questdb_7_client__QWP_DEFAULT_SERVER_FRAME_CAP = 0x1ffff2;
 02787: 
 02788: 
+02789: 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;
}
 02790:         size_t hard_cap, bint server_cap_known) noexcept:
 02791:     """
 02792:     The frame cap a QWP/WebSocket row buffer plans its frames for.
 02793: 
 02794:     Until the server advertises its cap, `hard_cap` is only the local
 02795:     limit, and rows buffered up to it would not fit a server running the
 02796:     default cap once that cap is known. So the buffer plans for the default
 02797:     cap until then, or for the local limit if that is lower. Only planning
 02798:     uses it: a publish refuses a frame by the local limit alone.
 02799:     """
+02800:     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) {
/* … */
  }
+02801:         return _QWP_DEFAULT_SERVER_FRAME_CAP
    {

      __pyx_r = __pyx_v_7questdb_7_client__QWP_DEFAULT_SERVER_FRAME_CAP;
    }
    goto __pyx_L0;
+02802:     return hard_cap
  {

    __pyx_r = __pyx_v_hard_cap;
  }
  goto __pyx_L0;
 02803: 
 02804: 
+02805: 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;
}
 02806:         const auto_flush_mode_t* mode,
 02807:         bint bytes_dynamic,
 02808:         size_t hard_cap) noexcept:
 02809:     """
 02810:     The `auto_flush_bytes` threshold of a QWP/WebSocket row buffer whose
 02811:     byte trigger is on, for the frame cap `hard_cap` it plans for.
 02812: 
 02813:     A threshold derived from the frame cap is 90% of it. An explicit
 02814:     threshold above 90% of the cap is lowered to it.
 02815:     """
 02816:     # floor(hard_cap * 0.9) without overflowing size_t.
 02817:     cdef size_t soft_cap = ((hard_cap // 10) * 9
+02818:                             + ((hard_cap % 10) * 9) // 10)
  __pyx_v_soft_cap = (((__pyx_v_hard_cap / 10) * 9) + (((__pyx_v_hard_cap % 10) * 9) / 10));
+02819:     if bytes_dynamic:
  if (__pyx_v_bytes_dynamic) {
/* … */
  }
+02820:         return soft_cap
    {

      __pyx_r = __pyx_v_soft_cap;
    }
    goto __pyx_L0;
+02821:     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) {
/* … */
  }
+02822:         return soft_cap
    {

      __pyx_r = __pyx_v_soft_cap;
    }
    goto __pyx_L0;
+02823:     return <size_t>mode.byte_count
  {

    __pyx_r = ((size_t)__pyx_v_mode->byte_count);
  }
  goto __pyx_L0;
 02824: 
 02825: 
+02826: 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;
}
 02827:         const auto_flush_mode_t* mode,
 02828:         bint bytes_dynamic,
 02829:         line_sender_buffer* buf,
 02830:         size_t hard_cap,
 02831:         int64_t interval_start_ms) noexcept:
 02832:     """
 02833:     Whether a QWP/WebSocket row buffer is due for auto-flush.
 02834: 
 02835:     Besides the configured row, byte and interval triggers, a buffer whose
 02836:     size estimate reaches the full frame cap is always due: it may not fit
 02837:     in one frame, and publishing now lets the rows before the newest one go
 02838:     out on their own. `auto_flush_bytes=off` therefore turns off only the
 02839:     configured byte trigger.
 02840:     """
 02841:     cdef size_t buffer_size
+02842:     if not mode.enabled:
  __pyx_t_1 = (!(__pyx_v_mode->enabled != 0));

  if (__pyx_t_1) {
/* … */
  }
+02843:         return False
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+02844:     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) {
/* … */
  }
+02845:             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:;
+02846:         return True
    {

      __pyx_r = 1;
    }
    goto __pyx_L0;
+02847:     buffer_size = line_sender_buffer_size(buf)
  __pyx_v_buffer_size = line_sender_buffer_size(__pyx_v_buf);
+02848:     if buffer_size >= hard_cap:
  __pyx_t_1 = (__pyx_v_buffer_size >= __pyx_v_hard_cap);

  if (__pyx_t_1) {
/* … */
  }
+02849:         return True
    {

      __pyx_r = 1;
    }
    goto __pyx_L0;
+02850:     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) {
/* … */
  }
+02851:             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:;
 02852:                 mode, bytes_dynamic, hard_cap)):
+02853:         return True
    {

      __pyx_r = 1;
    }
    goto __pyx_L0;
+02854:     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) {
/* … */
  }
 02855:             ((line_sender_now_micros() // 1000) - interval_start_ms)
+02856:             >= 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:;
+02857:         return True
    {

      __pyx_r = 1;
    }
    goto __pyx_L0;
+02858:     return False
  {

    __pyx_r = 0;
  }
  goto __pyx_L0;
 02859: 
 02860: 
+02861: class TaggedEnum(Enum):
  __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_Enum); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2861, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  {
    PyObject* __pyx_temp[1] = {__pyx_t_17};
    __pyx_t_25 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 2861, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
  }
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __pyx_t_17 = __Pyx_PEP560_update_bases(__pyx_t_25); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2861, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_4 = __Pyx_CalculateMetaclass(NULL, __pyx_t_17); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2861, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_19 = __Pyx_Py3MetaclassPrepare(__pyx_t_4, __pyx_t_17, __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_19)) __PYX_ERR(0, 2861, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__pyx_t_17 != __pyx_t_25) {
    if (unlikely((PyDict_SetItemString(__pyx_t_19, "__orig_bases__", __pyx_t_25) < 0))) __PYX_ERR(0, 2861, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
/* … */
  __pyx_t_16 = __Pyx_Py3ClassCreate(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_TaggedEnum, __pyx_t_17, __pyx_t_19, NULL, 0, 0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2861, __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_TaggedEnum, __pyx_t_16) < (0)) __PYX_ERR(0, 2861, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_DECREF(__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;
 02862:     """
 02863:     Base class for tagged enums.
 02864:     """
 02865: 
+02866:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_10TaggedEnum_1tag(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 2866, __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, 2866, __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, 2866, __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, 2866, __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, 2866, __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, 2866, __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_16 = NULL;
  __pyx_t_20 = __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[107])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2866, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20);
  #endif
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_16, __pyx_t_20};
    __pyx_t_25 = __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_20); __pyx_t_20 = 0;
    if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 2866, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
  }
  if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_tag, __pyx_t_25) < (0)) __PYX_ERR(0, 2866, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 02867:     def tag(self):
 02868:         """
 02869:         Short name.
 02870:         """
+02871:         return self.value[0]
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2871, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2871, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_2;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_2 = 0;
  goto __pyx_L0;
 02872: 
+02873:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_10TaggedEnum_3c_value(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 2873, __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, 2873, __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, 2873, __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, 2873, __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, 2873, __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, 2873, __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_20 = NULL;
  __pyx_t_16 = __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[108])); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2873, __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_20, __pyx_t_16};
    __pyx_t_25 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_property, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 2873, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
  }
  if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_c_value, __pyx_t_25) < (0)) __PYX_ERR(0, 2873, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 02874:     def c_value(self):
+02875:         return self.value[1]
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2875, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 1, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2875, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_2;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_2 = 0;
  goto __pyx_L0;
 02876: 
+02877:     @classmethod
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_10TaggedEnum_5parse(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 2877, __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, 2877, __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, 2877, __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, 2877, __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, 2877, __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, 2877, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 2877, __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, 2877, __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_10);
  __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_25 = __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[109])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 2877, __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_16 = __Pyx_Method_ClassMethod(__pyx_t_25); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_parse, __pyx_t_16) < (0)) __PYX_ERR(0, 2877, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 02878:     def parse(cls, tag):
 02879:         """
 02880:         Parse from the tag name.
 02881:         """
+02882:         if tag is None:
  __pyx_t_1 = (__pyx_v_tag == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+02883:             return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+02884:         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, 2884, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+02885:             return tag
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_tag);
        __pyx_r = __pyx_v_tag;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+02886:         elif isinstance(tag, str):
  __pyx_t_1 = PyUnicode_Check(__pyx_v_tag); 
  if (likely(__pyx_t_1)) {
/* … */
  }
+02887:             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, 2887, __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, 2887, __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, 2887, __pyx_L1_error)
            #endif
            if (__pyx_t_3 >= __pyx_temp) break;
          }
          __pyx_t_5 = __Pyx_PyList_GET_ITEM_REF(__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, 2887, __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, 2887, __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, 2887, __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;
+02888:                 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, 2888, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_5, __pyx_v_tag, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2888, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (__pyx_t_1) {
/* … */
      }
+02889:                     return entry
        {
          PyObject *__pyx_temp;
          {
            __pyx_temp = __pyx_r;
            __Pyx_INCREF(__pyx_v_entry);
            __pyx_r = __pyx_v_entry;
          }
          __Pyx_XDECREF(__pyx_temp);
        }
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        goto __pyx_L0;
+02890:             raise ValueError(f'Invalid value for {cls.__name__}: {tag!r}')
    __pyx_t_5 = 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, 2890, __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, 2890, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __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, 2890, __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_7;
    __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u__2;
    __pyx_t_8[3] = __pyx_t_6;
    __pyx_t_3 = 20;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8[3]);
    #endif
    __pyx_t_9 = 0;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_9 |= __Pyx_PyUnicode_KIND_04(__pyx_t_8[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_8[3]);
    #endif
    __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_8, 4, __pyx_t_3, __pyx_t_9);
    if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2890, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_11 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_10};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2890, __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, 2890, __pyx_L1_error)
 02891:         else:
+02892:             raise ValueError(f'Invalid value for {cls.__name__}: {tag!r}')
  /*else*/ {
    __pyx_t_10 = 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, 2892, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2892, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __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, 2892, __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_6;
    __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u__2;
    __pyx_t_8[3] = __pyx_t_5;
    __pyx_t_3 = 20;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8[3]);
    #endif
    __pyx_t_9 = 0;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_9 |= __Pyx_PyUnicode_KIND_04(__pyx_t_8[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_8[3]);
    #endif
    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_8, 4, __pyx_t_3, __pyx_t_9);
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2892, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_11 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_t_7};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2892, __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, 2892, __pyx_L1_error)
  }
 02893: 
 02894: 
+02895: class Protocol(TaggedEnum):
  __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  {
    PyObject* __pyx_temp[1] = {__pyx_t_17};
    __pyx_t_4 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2895, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __pyx_t_17 = __Pyx_PEP560_update_bases(__pyx_t_4); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_19 = __Pyx_CalculateMetaclass(NULL, __pyx_t_17); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 2895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __pyx_t_16 = __Pyx_Py3MetaclassPrepare(__pyx_t_19, __pyx_t_17, __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_16)) __PYX_ERR(0, 2895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  if (__pyx_t_17 != __pyx_t_4) {
    if (unlikely((PyDict_SetItemString(__pyx_t_16, "__orig_bases__", __pyx_t_4) < 0))) __PYX_ERR(0, 2895, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
  __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_Protocol, __pyx_t_17, __pyx_t_16, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2895, __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, 2895, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__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;
 02896:     """
 02897:     Protocol to use for sending data to QuestDB.
 02898: 
 02899:     See :ref:`sender_which_protocol` for more information.
 02900:     """
+02901:     Tcp = ('tcp', 0)
  if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Tcp, __pyx_mstate_global->__pyx_tuple[51]) < (0)) __PYX_ERR(0, 2901, __pyx_L1_error)
/* … */
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_tcp, __pyx_mstate_global->__pyx_int_0};
    __pyx_mstate_global->__pyx_tuple[51] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[51])) __PYX_ERR(0, 2901, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[51]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[51]);
+02902:     Tcps = ('tcps', 1)
  if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Tcps, __pyx_mstate_global->__pyx_tuple[52]) < (0)) __PYX_ERR(0, 2902, __pyx_L1_error)
/* … */
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_tcps, __pyx_mstate_global->__pyx_int_1};
    __pyx_mstate_global->__pyx_tuple[52] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[52])) __PYX_ERR(0, 2902, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[52]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[52]);
+02903:     Http = ('http', 2)
  if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Http, __pyx_mstate_global->__pyx_tuple[53]) < (0)) __PYX_ERR(0, 2903, __pyx_L1_error)
/* … */
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_http, __pyx_mstate_global->__pyx_int_2};
    __pyx_mstate_global->__pyx_tuple[53] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[53])) __PYX_ERR(0, 2903, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[53]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[53]);
+02904:     Https = ('https', 3)
  if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Https, __pyx_mstate_global->__pyx_tuple[54]) < (0)) __PYX_ERR(0, 2904, __pyx_L1_error)
/* … */
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_https, __pyx_mstate_global->__pyx_int_3};
    __pyx_mstate_global->__pyx_tuple[54] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[54])) __PYX_ERR(0, 2904, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[54]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[54]);
+02905:     Udp = ('udp', 4)
  if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Udp, __pyx_mstate_global->__pyx_tuple[55]) < (0)) __PYX_ERR(0, 2905, __pyx_L1_error)
/* … */
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_udp, __pyx_mstate_global->__pyx_int_4};
    __pyx_mstate_global->__pyx_tuple[55] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[55])) __PYX_ERR(0, 2905, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[55]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[55]);
+02906:     Ws = ('ws', 5)
  if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Ws, __pyx_mstate_global->__pyx_tuple[56]) < (0)) __PYX_ERR(0, 2906, __pyx_L1_error)
/* … */
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_ws, __pyx_mstate_global->__pyx_int_5};
    __pyx_mstate_global->__pyx_tuple[56] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[56])) __PYX_ERR(0, 2906, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[56]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[56]);
+02907:     Wss = ('wss', 6)
  if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Wss, __pyx_mstate_global->__pyx_tuple[57]) < (0)) __PYX_ERR(0, 2907, __pyx_L1_error)
/* … */
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_wss, __pyx_mstate_global->__pyx_int_6};
    __pyx_mstate_global->__pyx_tuple[57] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[57])) __PYX_ERR(0, 2907, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[57]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[57]);
 02908: 
+02909:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_8Protocol_1tls_enabled(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 2909, __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, 2909, __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, 2909, __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, 2909, __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, 2909, __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, 2909, __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_25 = NULL;
  __pyx_t_20 = __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[110])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2909, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20);
  #endif
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_25, __pyx_t_20};
    __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_25); __pyx_t_25 = 0;
    __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2909, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_tls_enabled, __pyx_t_4) < (0)) __PYX_ERR(0, 2909, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 02910:     def tls_enabled(self):
+02911:         return self in (Protocol.Tcps, Protocol.Https, Protocol.Wss)
  __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, 2911, __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, 2911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_1, __pyx_t_4, Py_EQ); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 2911, __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_L3_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_Protocol); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_Https); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_1, __pyx_t_3, Py_EQ); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 2911, __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, 2911, __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, 2911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_1, __pyx_t_4, Py_EQ); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 2911, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 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, 2911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 02912: 
 02913: 
+02914: class QwpWsProgress(TaggedEnum):
  __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2914, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  {
    PyObject* __pyx_temp[1] = {__pyx_t_17};
    __pyx_t_19 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 2914, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_19);
  }
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __pyx_t_17 = __Pyx_PEP560_update_bases(__pyx_t_19); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2914, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_16 = __Pyx_CalculateMetaclass(NULL, __pyx_t_17); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2914, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_16, __pyx_t_17, __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, 2914, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__pyx_t_17 != __pyx_t_19) {
    if (unlikely((PyDict_SetItemString(__pyx_t_4, "__orig_bases__", __pyx_t_19) < 0))) __PYX_ERR(0, 2914, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
/* … */
  __pyx_t_19 = __Pyx_Py3ClassCreate(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_QwpWsProgress, __pyx_t_17, __pyx_t_4, NULL, 0, 0); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 2914, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_QwpWsProgress, __pyx_t_19) < (0)) __PYX_ERR(0, 2914, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 02915:     """
 02916:     Progress mode for QWP/WebSocket senders.
 02917:     """
+02918:     Background = ('background', LINE_SENDER_QWPWS_PROGRESS_BACKGROUND)
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_qwpws_progress(LINE_SENDER_QWPWS_PROGRESS_BACKGROUND); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 2918, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_background, __pyx_t_19};
    __pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2918, __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_Background, __pyx_t_20) < (0)) __PYX_ERR(0, 2918, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+02919:     Manual = ('manual', LINE_SENDER_QWPWS_PROGRESS_MANUAL)
  __pyx_t_20 = __Pyx_PyLong_From_enum__line_sender_qwpws_progress(LINE_SENDER_QWPWS_PROGRESS_MANUAL); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2919, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_manual, __pyx_t_20};
    __pyx_t_19 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 2919, __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_Manual, __pyx_t_19) < (0)) __PYX_ERR(0, 2919, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 02920: 
 02921: 
+02922: class SenderErrorCategory(TaggedEnum):
  __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  {
    PyObject* __pyx_temp[1] = {__pyx_t_17};
    __pyx_t_16 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2922, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
  }
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __pyx_t_17 = __Pyx_PEP560_update_bases(__pyx_t_16); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_4 = __Pyx_CalculateMetaclass(NULL, __pyx_t_17); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_19 = __Pyx_Py3MetaclassPrepare(__pyx_t_4, __pyx_t_17, __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_19)) __PYX_ERR(0, 2922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__pyx_t_17 != __pyx_t_16) {
    if (unlikely((PyDict_SetItemString(__pyx_t_19, "__orig_bases__", __pyx_t_16) < 0))) __PYX_ERR(0, 2922, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
/* … */
  __pyx_t_16 = __Pyx_Py3ClassCreate(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_SenderErrorCategory, __pyx_t_17, __pyx_t_19, NULL, 0, 0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2922, __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_SenderErrorCategory, __pyx_t_16) < (0)) __PYX_ERR(0, 2922, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_DECREF(__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;
 02923:     """
 02924:     Category of a structured QWP/WebSocket diagnostic.
 02925:     """
 02926:     SchemaMismatch = (
+02927:         'schema_mismatch',
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_schema_mismatch, __pyx_t_16};
    __pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2927, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_20);
  }
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_SchemaMismatch, __pyx_t_20) < (0)) __PYX_ERR(0, 2926, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+02928:         LINE_SENDER_QWPWS_ERROR_SCHEMA_MISMATCH)
  __pyx_t_16 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_SCHEMA_MISMATCH); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2928, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
+02929:     ParseError = ('parse_error', LINE_SENDER_QWPWS_ERROR_PARSE_ERROR)
  __pyx_t_20 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_PARSE_ERROR); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2929, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_parse_error, __pyx_t_20};
    __pyx_t_16 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2929, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
  }
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_ParseError, __pyx_t_16) < (0)) __PYX_ERR(0, 2929, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+02930:     InternalError = ('internal_error', LINE_SENDER_QWPWS_ERROR_INTERNAL_ERROR)
  __pyx_t_16 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_INTERNAL_ERROR); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2930, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_internal_error, __pyx_t_16};
    __pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2930, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_20);
  }
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_InternalError, __pyx_t_20) < (0)) __PYX_ERR(0, 2930, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+02931:     SecurityError = ('security_error', LINE_SENDER_QWPWS_ERROR_SECURITY_ERROR)
  __pyx_t_20 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_SECURITY_ERROR); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2931, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_security_error, __pyx_t_20};
    __pyx_t_16 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2931, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
  }
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_SecurityError, __pyx_t_16) < (0)) __PYX_ERR(0, 2931, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+02932:     WriteError = ('write_error', LINE_SENDER_QWPWS_ERROR_WRITE_ERROR)
  __pyx_t_16 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_WRITE_ERROR); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2932, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_write_error, __pyx_t_16};
    __pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2932, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_20);
  }
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_WriteError, __pyx_t_20) < (0)) __PYX_ERR(0, 2932, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+02933:     NotWritable = ('not_writable', LINE_SENDER_QWPWS_ERROR_NOT_WRITABLE)
  __pyx_t_20 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_NOT_WRITABLE); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2933, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_not_writable, __pyx_t_20};
    __pyx_t_16 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2933, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
  }
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_NotWritable, __pyx_t_16) < (0)) __PYX_ERR(0, 2933, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 02934:     ProtocolViolation = (
+02935:         'protocol_violation',
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_protocol_violation, __pyx_t_16};
    __pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2935, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_20);
  }
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_ProtocolViolation, __pyx_t_20) < (0)) __PYX_ERR(0, 2934, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+02936:         LINE_SENDER_QWPWS_ERROR_PROTOCOL_VIOLATION)
  __pyx_t_16 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_PROTOCOL_VIOLATION); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2936, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
+02937:     Unknown = ('unknown', LINE_SENDER_QWPWS_ERROR_UNKNOWN)
  __pyx_t_20 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_UNKNOWN); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2937, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_unknown, __pyx_t_20};
    __pyx_t_16 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2937, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
  }
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_Unknown, __pyx_t_16) < (0)) __PYX_ERR(0, 2937, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 02938: 
 02939: 
+02940: class SenderErrorPolicy(TaggedEnum):
  __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2940, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  {
    PyObject* __pyx_temp[1] = {__pyx_t_17};
    __pyx_t_4 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2940, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __pyx_t_17 = __Pyx_PEP560_update_bases(__pyx_t_4); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2940, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_19 = __Pyx_CalculateMetaclass(NULL, __pyx_t_17); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 2940, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __pyx_t_16 = __Pyx_Py3MetaclassPrepare(__pyx_t_19, __pyx_t_17, __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_16)) __PYX_ERR(0, 2940, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  if (__pyx_t_17 != __pyx_t_4) {
    if (unlikely((PyDict_SetItemString(__pyx_t_16, "__orig_bases__", __pyx_t_4) < 0))) __PYX_ERR(0, 2940, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
  __pyx_t_20 = __Pyx_Py3ClassCreate(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy, __pyx_t_17, __pyx_t_16, NULL, 0, 0); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2940, __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_SenderErrorPolicy, __pyx_t_20) < (0)) __PYX_ERR(0, 2940, __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_19); __pyx_t_19 = 0;
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 02941:     """
 02942:     Applied policy for a structured QWP/WebSocket diagnostic.
 02943:     """
+02944:     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, 2944, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_retriable, __pyx_t_4};
    __pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2944, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_20);
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Retriable, __pyx_t_20) < (0)) __PYX_ERR(0, 2944, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 02945:     RetriableOther = (
+02946:         'retriable_other',
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_retriable_other, __pyx_t_20};
    __pyx_t_4 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2946, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_RetriableOther, __pyx_t_4) < (0)) __PYX_ERR(0, 2945, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+02947:         LINE_SENDER_QWPWS_ERROR_RETRIABLE_OTHER)
  __pyx_t_20 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_policy(LINE_SENDER_QWPWS_ERROR_RETRIABLE_OTHER); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2947, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
+02948:     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, 2948, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_terminal, __pyx_t_4};
    __pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2948, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_20);
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Terminal, __pyx_t_20) < (0)) __PYX_ERR(0, 2948, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 02949: 
 02950: 
+02951: @dataclass(frozen=True)
  __pyx_t_20 = NULL;
  __pyx_t_25 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_dataclass); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 2951, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_21);
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_25, Py_True};
    #if CYTHON_VECTORCALL
    __pyx_t_18 = __pyx_mstate_global->__pyx_tuple[58];
    if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 2951, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_18);
    #else
    {
      PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_frozen};
      __pyx_t_18 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
      if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 2951, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
    }
    #endif
    __pyx_t_4 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_21, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_18);
    __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
    __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2951, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_20, __pyx_t_19};
    __pyx_t_16 = __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_20); __pyx_t_20 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2951, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_SenderError, __pyx_t_16) < (0)) __PYX_ERR(0, 2952, __pyx_L1_error)
  __Pyx_DECREF(__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;
/* … */
  {
    PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_frozen};
    __pyx_mstate_global->__pyx_tuple[58] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[58])) __PYX_ERR(0, 2951, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[58]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[58]);
+02952: class SenderError:
  __pyx_t_17 = __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_17)) __PYX_ERR(0, 2952, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_19 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 2952, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_category, __pyx_mstate_global->__pyx_n_u_SenderErrorCategory) < (0)) __PYX_ERR(0, 2952, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_applied_policy, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy) < (0)) __PYX_ERR(0, 2952, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_status, __pyx_mstate_global->__pyx_kp_u_Optional_int) < (0)) __PYX_ERR(0, 2952, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_message, __pyx_mstate_global->__pyx_n_u_str_2) < (0)) __PYX_ERR(0, 2952, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_message_sequence, __pyx_mstate_global->__pyx_kp_u_Optional_int) < (0)) __PYX_ERR(0, 2952, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_from_fsn, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 2952, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_to_fsn, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 2952, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_annotations, __pyx_t_19) < (0)) __PYX_ERR(0, 2952, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
/* … */
  __pyx_t_19 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_mstate_global->__pyx_n_u_SenderError, __pyx_mstate_global->__pyx_empty_tuple, __pyx_t_17, NULL, 0, 0); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 2952, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
 02953:     """Structured QWP/WebSocket server diagnostic."""
 02954:     category: SenderErrorCategory
 02955:     applied_policy: SenderErrorPolicy
 02956:     status: Optional[int]
 02957:     message: str
 02958:     message_sequence: Optional[int]
 02959:     from_fsn: int
 02960:     to_fsn: int
 02961: 
 02962: 
+02963: class ConnectionEventKind(TaggedEnum):
  __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  {
    PyObject* __pyx_temp[1] = {__pyx_t_17};
    __pyx_t_19 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 2963, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_19);
  }
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __pyx_t_17 = __Pyx_PEP560_update_bases(__pyx_t_19); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_16 = __Pyx_CalculateMetaclass(NULL, __pyx_t_17); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_16, __pyx_t_17, __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_4)) __PYX_ERR(0, 2963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__pyx_t_17 != __pyx_t_19) {
    if (unlikely((PyDict_SetItemString(__pyx_t_4, "__orig_bases__", __pyx_t_19) < 0))) __PYX_ERR(0, 2963, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
/* … */
  __pyx_t_19 = __Pyx_Py3ClassCreate(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_ConnectionEventKind, __pyx_t_17, __pyx_t_4, NULL, 0, 0); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 2963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ConnectionEventKind, __pyx_t_19) < (0)) __PYX_ERR(0, 2963, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 02964:     """
 02965:     Connection-state transitions observed by the ingress connection pool.
 02966:     """
 02967:     #: First successful connect of the pool's lifetime.
+02968:     Connected = ('connected', 0)
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_Connected, __pyx_mstate_global->__pyx_tuple[59]) < (0)) __PYX_ERR(0, 2968, __pyx_L1_error)
/* … */
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_connected, __pyx_mstate_global->__pyx_int_0};
    __pyx_mstate_global->__pyx_tuple[59] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[59])) __PYX_ERR(0, 2968, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[59]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[59]);
 02969:     #: An active wire connection died.
+02970:     Disconnected = ('disconnected', 1)
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_Disconnected, __pyx_mstate_global->__pyx_tuple[60]) < (0)) __PYX_ERR(0, 2970, __pyx_L1_error)
/* … */
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_disconnected, __pyx_mstate_global->__pyx_int_1};
    __pyx_mstate_global->__pyx_tuple[60] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[60])) __PYX_ERR(0, 2970, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[60]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[60]);
 02971:     #: Reconnect succeeded against the same endpoint after a failure.
+02972:     Reconnected = ('reconnected', 2)
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_Reconnected, __pyx_mstate_global->__pyx_tuple[61]) < (0)) __PYX_ERR(0, 2972, __pyx_L1_error)
/* … */
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_reconnected, __pyx_mstate_global->__pyx_int_2};
    __pyx_mstate_global->__pyx_tuple[61] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[61])) __PYX_ERR(0, 2972, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[61]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[61]);
 02973:     #: Reconnect succeeded against a different endpoint.
+02974:     FailedOver = ('failed_over', 3)
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_FailedOver, __pyx_mstate_global->__pyx_tuple[62]) < (0)) __PYX_ERR(0, 2974, __pyx_L1_error)
/* … */
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_failed_over, __pyx_mstate_global->__pyx_int_3};
    __pyx_mstate_global->__pyx_tuple[62] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[62])) __PYX_ERR(0, 2974, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[62]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[62]);
 02975:     #: One endpoint connect/upgrade attempt failed; the walk moves on.
+02976:     EndpointAttemptFailed = ('endpoint_attempt_failed', 4)
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_EndpointAttemptFailed, __pyx_mstate_global->__pyx_tuple[63]) < (0)) __PYX_ERR(0, 2976, __pyx_L1_error)
/* … */
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_endpoint_attempt_failed, __pyx_mstate_global->__pyx_int_4};
    __pyx_mstate_global->__pyx_tuple[63] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[63])) __PYX_ERR(0, 2976, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[63]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[63]);
 02977:     #: Every configured endpoint was attempted and none accepted.
+02978:     AllEndpointsUnreachable = ('all_endpoints_unreachable', 5)
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_AllEndpointsUnreachable, __pyx_mstate_global->__pyx_tuple[64]) < (0)) __PYX_ERR(0, 2978, __pyx_L1_error)
/* … */
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_all_endpoints_unreachable, __pyx_mstate_global->__pyx_int_5};
    __pyx_mstate_global->__pyx_tuple[64] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[64])) __PYX_ERR(0, 2978, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[64]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[64]);
 02979:     #: Terminal: the server rejected credentials.
+02980:     AuthFailed = ('auth_failed', 6)
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_AuthFailed, __pyx_mstate_global->__pyx_tuple[65]) < (0)) __PYX_ERR(0, 2980, __pyx_L1_error)
/* … */
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_auth_failed, __pyx_mstate_global->__pyx_int_6};
    __pyx_mstate_global->__pyx_tuple[65] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[65])) __PYX_ERR(0, 2980, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[65]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[65]);
 02981: 
 02982: 
+02983: @dataclass(frozen=True)
  __pyx_t_19 = NULL;
  __pyx_t_21 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_dataclass); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 2983, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_21, Py_True};
    #if CYTHON_VECTORCALL
    __pyx_t_25 = __pyx_mstate_global->__pyx_tuple[58];
    if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 2983, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_25);
    #else
    {
      PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_frozen};
      __pyx_t_25 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
      if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 2983, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
    }
    #endif
    __pyx_t_20 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_18, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_25);
    __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
    __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
    if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2983, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_20);
  }
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_19, __pyx_t_16};
    __pyx_t_4 = __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_19); __pyx_t_19 = 0;
    __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2983, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ConnectionEvent, __pyx_t_4) < (0)) __PYX_ERR(0, 2984, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+02984: class ConnectionEvent:
  __pyx_t_17 = __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_17)) __PYX_ERR(0, 2984, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_16 = __Pyx_PyDict_NewPresized(9); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2984, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_kind, __pyx_mstate_global->__pyx_n_u_ConnectionEventKind) < (0)) __PYX_ERR(0, 2984, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_host, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 2984, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_port, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 2984, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_previous_host, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 2984, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_previous_port, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 2984, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_attempt_number, __pyx_mstate_global->__pyx_kp_u_Optional_int) < (0)) __PYX_ERR(0, 2984, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_cause_code, __pyx_mstate_global->__pyx_kp_u_Optional_QuestDBErrorCode) < (0)) __PYX_ERR(0, 2984, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_cause_msg, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 2984, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_timestamp_millis, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 2984, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_annotations, __pyx_t_16) < (0)) __PYX_ERR(0, 2984, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
/* … */
  __pyx_t_16 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_mstate_global->__pyx_n_u_ConnectionEvent, __pyx_mstate_global->__pyx_empty_tuple, __pyx_t_17, NULL, 0, 0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2984, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_16);
  #endif
 02985:     """
 02986:     One connection-state transition, delivered to the
 02987:     ``connection_listener`` registered via :meth:`QuestDB.from_conf`.
 02988: 
 02989:     Listeners run on a dedicated dispatcher thread — never on an I/O or
 02990:     caller thread — fed by a bounded inbox with a drop-oldest overflow
 02991:     policy, so a slow listener cannot stall ingest or reconnects.
 02992:     Successful events are queued only after negotiated connection state,
 02993:     including the server-advertised frame cap, is committed. They are not
 02994:     data-delivery or acknowledgement barriers.
 02995:     Exceptions raised by the listener are logged and swallowed.
 02996:     """
 02997:     kind: ConnectionEventKind
 02998:     host: Optional[str]
 02999:     port: Optional[str]
 03000:     #: For :attr:`ConnectionEventKind.FailedOver`, the previously-active
 03001:     #: endpoint.
 03002:     previous_host: Optional[str]
 03003:     previous_port: Optional[str]
 03004:     #: Monotonic connect-attempt counter at the time the event fired.
 03005:     attempt_number: Optional[int]
 03006:     cause_code: Optional[QuestDBErrorCode]
 03007:     cause_msg: Optional[str]
 03008:     #: Wall-clock time of the event, milliseconds since the Unix epoch.
 03009:     timestamp_millis: int
 03010: 
 03011: 
+03012: 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;
}
+03013:     if buf == NULL:
  __pyx_t_1 = (__pyx_v_buf == NULL);

  if (__pyx_t_1) {
/* … */
  }
+03014:         return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+03015:     return PyUnicode_FromStringAndSize(buf, <Py_ssize_t>buf_len)
  __pyx_t_2 = PyUnicode_FromStringAndSize(__pyx_v_buf, ((Py_ssize_t)__pyx_v_buf_len)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3015, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_2;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_2 = 0;
  goto __pyx_L0;
 03016: 
 03017: 
+03018: cdef class _DispatchContext:
struct __pyx_obj_7questdb_7_client__DispatchContext {
  PyObject_HEAD
  PyObject *owner_token;
  PyObject *error_handler;
  PyObject *connection_listener;
};

 03019:     """Python callback targets and the exact owner they dispatch for.
 03020: 
 03021:     Native callback registrations borrow a pointer to this object. Its owner
 03022:     field is deliberately an opaque token rather than the owning handle, so
 03023:     the context does not create an owner/context cycle by itself.
 03024:     """
 03025:     cdef object owner_token
 03026:     cdef object error_handler
 03027:     cdef object connection_listener
 03028: 
 03029: 
+03030: 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;
}
 03031:         object owner_token, object error_handler, object listener):
+03032:     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, 3032, __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;
+03033:     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;
+03034:     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;
+03035:     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;
+03036:     return context
  {
    struct __pyx_obj_7questdb_7_client__DispatchContext *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF((PyObject *)__pyx_v_context);
      __pyx_r = __pyx_v_context;
    }
    __Pyx_XDECREF((PyObject *)__pyx_temp);
  }
  goto __pyx_L0;
 03037: 
 03038: 
 03039: # Module-level strong root for callback contexts registered with the native
 03040: # dispatchers. It keeps the exact object passed as native `void* user_data`
 03041: # reachable from a GC root for as long as its dispatchers can still fire, so
 03042: # the cycle collector never clears a live callback's internals (which would
 03043: # crash the interpreter when a dispatch calls it). A handle abandoned in a
 03044: # reference cycle through its own callback therefore leaks rather than
 03045: # crashing; explicit close() removes the entry once the dispatchers are joined
 03046: # and lets the cycle collect.
+03047: _LIVE_CALLBACK_REFS = {}
  __pyx_t_17 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3047, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_LIVE_CALLBACK_REFS, __pyx_t_17) < (0)) __PYX_ERR(0, 3047, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 03048: 
 03049: 
 03050: # The registry is keyed by a value captured while the owner is alive and
 03051: # released through that key alone: `tp_dealloc` must never pass the dying
 03052: # owner back into Python-level calls (PyPy's cpyext aborts on reviving a
 03053: # dying object mid-dealloc).
+03054: 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;
}
+03055:     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, 3055, __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, 3055, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_key = __pyx_t_3;
+03056:     _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, 3056, __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, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 3056, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+03057:     return key
  {

    __pyx_r = __pyx_v_key;
  }
  goto __pyx_L0;
 03058: 
 03059: 
+03060: 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;
}
+03061:     if key != 0:
  __pyx_t_1 = (__pyx_v_key != 0);

  if (__pyx_t_1) {
/* … */
  }
+03062:         _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, 3062, __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, 3062, __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, 3062, __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, 3062, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 03063: 
 03064: 
 03065: # Scoped call depths and callback-dispatch depths live in native
 03066: # thread-local storage, keyed by owner token identity, because `row()`
 03067: # raises and lowers a scoped depth on every pooled row and checks the
 03068: # dispatch depth on every standalone ws row while auto-flush is on: the
 03069: # whole table is reached through a single `PyThread_tss_get`, and the
 03070: # per-owner entry through a scan of the handful of owners a thread has
 03071: # calls or dispatches in progress on. The key is process-wide -- OS TLS
 03072: # keys are a capped process resource, so one per handle exhausts them --
 03073: # and holds a table per thread rather than a single count, so each count
 03074: # belongs to one owner.
 03075: cdef Py_tss_t _SCOPED_DEPTH_KEY
 03076: 
+03077: 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)) {
/* … */
  }
+03078:     raise RuntimeError('Could not create the QuestDB thread-state key.')
    __pyx_t_16 = NULL;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_16, __pyx_mstate_global->__pyx_kp_u_Could_not_create_the_QuestDB_thr};
      __pyx_t_17 = __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_16); __pyx_t_16 = 0;
      if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3078, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_17);
    }
    __Pyx_Raise(__pyx_t_17, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    __PYX_ERR(0, 3078, __pyx_L1_error)
 03079: 
+03080: cdef enum:
enum  {
  __pyx_e_7questdb_7_client__SCOPED_TABLE_INIT_SLOTS = 4
};
 03081:     _SCOPED_TABLE_INIT_SLOTS = 4
 03082: 
 03083: 
+03084: ctypedef struct scoped_slot_t:
struct __pyx_t_7questdb_7_client_scoped_slot_t {
  void *owner;
  uintptr_t depth;
  uintptr_t dispatch;
};
 03085:     # Borrowed identity only, never dereferenced: the owning handle keeps
 03086:     # its token alive for as long as it can have calls in progress, a
 03087:     # dispatch context keeps it alive for as long as its callbacks can
 03088:     # run, and an entry is dropped the moment both its counts reach zero,
 03089:     # so an address a later token reuses is never already in the table.
 03090:     void* owner
 03091:     # Scoped calls in progress for this owner on this thread.
 03092:     uintptr_t depth
 03093:     # Callback dispatches in progress for this owner on this thread.
 03094:     uintptr_t dispatch
 03095: 
 03096: 
+03097: 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;
};
 03098:     size_t used
 03099:     size_t cap
 03100:     scoped_slot_t* slots
 03101: 
 03102: 
+03103: 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;
 03104: 
 03105: # The key the owning capsule is stored under in each thread state's dict.
 03106: # The dict is shared by everything in the process, so the key is an object
 03107: # unique to this module instance: no other writer, including another loaded
 03108: # copy of this extension, can replace the capsule and free a table that a
 03109: # call in progress is using. A module global rather than a C constant, so
 03110: # a test can substitute a key whose hash runs code at the moment the table
 03111: # is first recorded.
+03112: _SCOPED_TABLE_KEY = object()
  __pyx_t_16 = NULL;
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_16, NULL};
    __pyx_t_17 = __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_16); __pyx_t_16 = 0;
    if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3112, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_SCOPED_TABLE_KEY, __pyx_t_17) < (0)) __PYX_ERR(0, 3112, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 03113: 
 03114: 
+03115: 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:;


}
+03116:     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, 3116, __pyx_L1_error)
  __pyx_v_table = ((__pyx_t_7questdb_7_client_scoped_table_t *)__pyx_t_1);

 03117:         capsule, _SCOPED_TABLE_CAPSULE_NAME)
+03118:     if table == NULL:
  __pyx_t_2 = (__pyx_v_table == NULL);

  if (__pyx_t_2) {
/* … */
  }
+03119:         return
    {
    }
    goto __pyx_L0;
 03120:     # A thread's Python state can end while its OS thread lives on: every
 03121:     # call into Python from a native thread gets a fresh one. That state's
 03122:     # table is freed on its own thread, so the native slot is cleared here
 03123:     # and the next scoped call or dispatch on that thread builds a new
 03124:     # table. A thread state can also be cleared from another thread --
 03125:     # interpreter finalization clears the states of threads still running,
 03126:     # and a forked child those of the parent's other threads -- so the slot
 03127:     # is cleared only when it holds the table being freed.
+03128:     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) {
/* … */
  }
+03129:         PyThread_tss_set(&_SCOPED_DEPTH_KEY, NULL)
    (void)(PyThread_tss_set((&__pyx_v_7questdb_7_client__SCOPED_DEPTH_KEY), NULL));
+03130:     free(table.slots)
  free(__pyx_v_table->slots);
+03131:     free(table)
  free(__pyx_v_table);
 03132: 
 03133: 
+03134: 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;
}
+03135:     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;
 03136: 
 03137: 
+03138: 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;
}
 03139:     """This thread's table, created on its first scoped call or callback
 03140:     dispatch.
 03141: 
 03142:     A capsule in the thread state's dict owns the table: it is what frees
 03143:     it when the thread state ends. The native key caches the same pointer
 03144:     so the per-row path never reaches the Python dict again.
 03145: 
 03146:     The thread state is shared by every greenlet on the OS thread, so the
 03147:     table's owner lives exactly as long as the per-thread cache, and no
 03148:     greenlet's exit frees a table another greenlet's suspended call is
 03149:     using.
 03150:     """
+03151:     cdef scoped_table_t* table = _scoped_table()
  __pyx_v_table = __pyx_f_7questdb_7_client__scoped_table();
 03152:     cdef PyObject* state_dict
+03153:     if table != NULL:
  __pyx_t_1 = (__pyx_v_table != NULL);

  if (__pyx_t_1) {
/* … */
  }
+03154:         return table
    {

      __pyx_r = __pyx_v_table;
    }
    goto __pyx_L0;
+03155:     state_dict = PyThreadState_GetDict()
  __pyx_v_state_dict = PyThreadState_GetDict();
+03156:     if state_dict == NULL:
  __pyx_t_1 = (__pyx_v_state_dict == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+03157:         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, 3157, __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, 3157, __pyx_L1_error)
+03158:     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))));
+03159:     if table == NULL:
  __pyx_t_1 = (__pyx_v_table == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+03160:         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, 3160, __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, 3160, __pyx_L1_error)
+03161:     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)))));
 03162:         _SCOPED_TABLE_INIT_SLOTS * sizeof(scoped_slot_t))
+03163:     if table.slots == NULL:
  __pyx_t_1 = (__pyx_v_table->slots == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+03164:         free(table)
    free(__pyx_v_table);
+03165:         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, 3165, __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, 3165, __pyx_L1_error)
+03166:     table.cap = _SCOPED_TABLE_INIT_SLOTS
  __pyx_v_table->cap = __pyx_e_7questdb_7_client__SCOPED_TABLE_INIT_SLOTS;
+03167:     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:;
  }
+03168:         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, 3168, __pyx_L7_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_v_capsule = __pyx_t_2;
      __pyx_t_2 = 0;
 03169:             table, _SCOPED_TABLE_CAPSULE_NAME,
 03170:             <PyCapsule_Destructor>_scoped_table_free)
+03171:     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, 3171, __pyx_L9_except_error)
      __Pyx_XGOTREF(__pyx_t_2);
      __Pyx_XGOTREF(__pyx_t_3);
      __Pyx_XGOTREF(__pyx_t_8);
+03172:         free(table.slots)
      free(__pyx_v_table->slots);
+03173:         free(table)
      free(__pyx_v_table);
+03174:         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, 3174, __pyx_L9_except_error)
    }
 03175:     # From here the capsule owns the table, so every later failure hands
 03176:     # the cleanup to it by letting it go out of scope.
+03177:     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)) {
/* … */
  }
+03178:         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, 3178, __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, 3178, __pyx_L1_error)
+03179:     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:;
  }
+03180:         (<dict>state_dict)[_SCOPED_TABLE_KEY] = capsule
      if (unlikely(((PyObject *)__pyx_v_state_dict) == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
        __PYX_ERR(0, 3180, __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, 3180, __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, 3180, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+03181:     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, 3181, __pyx_L18_except_error)
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_3);
      __Pyx_XGOTREF(__pyx_t_2);
+03182:         PyThread_tss_set(&_SCOPED_DEPTH_KEY, NULL)
      (void)(PyThread_tss_set((&__pyx_v_7questdb_7_client__SCOPED_DEPTH_KEY), NULL));
+03183:         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, 3183, __pyx_L18_except_error)
    }
+03184:     return table
  {

    __pyx_r = __pyx_v_table;
  }
  goto __pyx_L0;
 03185: 
 03186: 
+03187: 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;
}
 03188:         scoped_table_t* table, void* owner) noexcept:
 03189:     cdef size_t i
+03190:     cdef scoped_slot_t* slots = table.slots
  __pyx_t_1 = __pyx_v_table->slots;

  __pyx_v_slots = __pyx_t_1;
+03191:     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;
+03192:         if slots[i].owner == owner:
    __pyx_t_5 = ((__pyx_v_slots[__pyx_v_i]).owner == __pyx_v_owner);

    if (__pyx_t_5) {
/* … */
    }
  }

+03193:             return &slots[i]
      {

        __pyx_r = (&(__pyx_v_slots[__pyx_v_i]));
      }
      goto __pyx_L0;
+03194:     return NULL
  {

    __pyx_r = NULL;
  }
  goto __pyx_L0;
 03195: 
 03196: 
+03197: 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;
}
+03198:     cdef scoped_table_t* table = _scoped_table()
  __pyx_v_table = __pyx_f_7questdb_7_client__scoped_table();
 03199:     cdef scoped_slot_t* slot
+03200:     if table == NULL:
  __pyx_t_1 = (__pyx_v_table == NULL);

  if (__pyx_t_1) {
/* … */
  }
+03201:         return 0
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+03202:     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));
+03203:     if slot == NULL:
  __pyx_t_1 = (__pyx_v_slot == NULL);

  if (__pyx_t_1) {
/* … */
  }
+03204:         return 0
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+03205:     return slot.depth
  {

    __pyx_r = __pyx_v_slot->depth;
  }
  goto __pyx_L0;
 03206: 
 03207: 
+03208: 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;
}
 03209:         scoped_table_t* table, void* owner) except NULL:
 03210:     """Append an entry for `owner` with both counts at zero."""
 03211:     cdef size_t cap
 03212:     cdef scoped_slot_t* grown
 03213:     cdef scoped_slot_t* slot
+03214:     if table.used == table.cap:
  __pyx_t_1 = (__pyx_v_table->used == __pyx_v_table->cap);

  if (__pyx_t_1) {
/* … */
  }
+03215:         cap = table.cap * 2
    __pyx_v_cap = (__pyx_v_table->cap * 2);
+03216:         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)))));
 03217:             table.slots, cap * sizeof(scoped_slot_t))
+03218:         if grown == NULL:
    __pyx_t_1 = (__pyx_v_grown == NULL);

    if (unlikely(__pyx_t_1)) {
/* … */
    }
+03219:             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, 3219, __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, 3219, __pyx_L1_error)
 03220:                 'Could not allocate QuestDB thread-use counters.')
+03221:         table.slots = grown
    __pyx_v_table->slots = __pyx_v_grown;
+03222:         table.cap = cap
    __pyx_v_table->cap = __pyx_v_cap;
+03223:     slot = &table.slots[table.used]
  __pyx_v_slot = (&(__pyx_v_table->slots[__pyx_v_table->used]));
+03224:     slot.owner = owner
  __pyx_v_slot->owner = __pyx_v_owner;
+03225:     slot.depth = 0
  __pyx_v_slot->depth = 0;
+03226:     slot.dispatch = 0
  __pyx_v_slot->dispatch = 0;
+03227:     table.used += 1
  __pyx_v_table->used = (__pyx_v_table->used + 1);
+03228:     return slot
  {

    __pyx_r = __pyx_v_slot;
  }
  goto __pyx_L0;
 03229: 
 03230: 
+03231: 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 */

}
 03232:         scoped_table_t* table, scoped_slot_t* slot) noexcept:
 03233:     # Vacated by moving the last entry down, which keeps the scan over
 03234:     # `used` dense and drops the borrowed owner address.
+03235:     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) {
/* … */
  }
+03236:         table.used -= 1
    __pyx_v_table->used = (__pyx_v_table->used - 1);
+03237:         slot[0] = table.slots[table.used]
    (__pyx_v_slot[0]) = (__pyx_v_table->slots[__pyx_v_table->used]);
 03238: 
 03239: 
+03240: 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:;




}
+03241:     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, 3241, __pyx_L1_error)
  __pyx_v_table = __pyx_t_1;
+03242:     cdef void* owner = <void*>owner_token
  __pyx_v_owner = ((void *)__pyx_v_owner_token);
+03243:     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);
+03244:     if slot == NULL:
  __pyx_t_2 = (__pyx_v_slot == NULL);

  if (__pyx_t_2) {
/* … */
  }
+03245:         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, 3245, __pyx_L1_error)
    __pyx_v_slot = __pyx_t_3;
+03246:     slot.depth += 1
  __pyx_v_slot->depth = (__pyx_v_slot->depth + 1);
 03247: 
 03248: 
+03249: 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();
}
+03250:     cdef scoped_table_t* table = _scoped_table()
  __pyx_v_table = __pyx_f_7questdb_7_client__scoped_table();
 03251:     cdef scoped_slot_t* slot
+03252:     if table == NULL:
  __pyx_t_1 = (__pyx_v_table == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+03253:         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, 3253, __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, 3253, __pyx_L1_error)
+03254:     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));
+03255:     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)) {
/* … */
  }
+03256:         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, 3256, __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, 3256, __pyx_L1_error)
+03257:     slot.depth -= 1
  __pyx_v_slot->depth = (__pyx_v_slot->depth - 1);
+03258:     _scoped_slot_drop_if_idle(table, slot)
  __pyx_f_7questdb_7_client__scoped_slot_drop_if_idle(__pyx_v_table, __pyx_v_slot);
 03259: 
 03260: 
+03261: 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:;




}
+03262:     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, 3262, __pyx_L1_error)
  __pyx_v_table = __pyx_t_1;
+03263:     cdef void* owner = <void*>owner_token
  __pyx_v_owner = ((void *)__pyx_v_owner_token);
+03264:     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);
+03265:     if slot == NULL:
  __pyx_t_2 = (__pyx_v_slot == NULL);

  if (__pyx_t_2) {
/* … */
  }
+03266:         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, 3266, __pyx_L1_error)
    __pyx_v_slot = __pyx_t_3;
+03267:     slot.dispatch += 1
  __pyx_v_slot->dispatch = (__pyx_v_slot->dispatch + 1);
 03268: 
 03269: 
+03270: 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();
}
+03271:     cdef scoped_table_t* table = _scoped_table()
  __pyx_v_table = __pyx_f_7questdb_7_client__scoped_table();
 03272:     cdef scoped_slot_t* slot
+03273:     if table == NULL:
  __pyx_t_1 = (__pyx_v_table == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+03274:         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, 3274, __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, 3274, __pyx_L1_error)
+03275:     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));
+03276:     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)) {
/* … */
  }
+03277:         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, 3277, __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, 3277, __pyx_L1_error)
+03278:     slot.dispatch -= 1
  __pyx_v_slot->dispatch = (__pyx_v_slot->dispatch - 1);
+03279:     _scoped_slot_drop_if_idle(table, slot)
  __pyx_f_7questdb_7_client__scoped_slot_drop_if_idle(__pyx_v_table, __pyx_v_slot);
 03280: 
 03281: 
+03282: 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;
}
+03283:     cdef scoped_table_t* table = _scoped_table()
  __pyx_v_table = __pyx_f_7questdb_7_client__scoped_table();
 03284:     cdef scoped_slot_t* slot
+03285:     if table == NULL:
  __pyx_t_1 = (__pyx_v_table == NULL);

  if (__pyx_t_1) {
/* … */
  }
+03286:         return False
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+03287:     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));
+03288:     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_L4_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_slot->dispatch != 0);


  __pyx_t_1 = __pyx_t_2;

  __pyx_L4_bool_binop_done:;
  {
    __pyx_r = __pyx_t_1;
  }
  goto __pyx_L0;
 03289: 
 03290: 
+03291: 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_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_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);
}
 03292:         void* user_data,
 03293:         const questdb_connection_event* event) noexcept with gil:
+03294:     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;
+03295:     cdef bint entered = False
  __pyx_v_entered = 0;
+03296:     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_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_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:;
    }
  }
+03297:         _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, 3297, __pyx_L6_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+03298:         entered = True
        __pyx_v_entered = 1;
+03299:         kind = ConnectionEventKind.Connected
        __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ConnectionEventKind); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3299, __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, 3299, __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;
+03300:         for entry in ConnectionEventKind:
        __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ConnectionEventKind); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3300, __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, 3300, __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, 3300, __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, 3300, __pyx_L6_error)
                #endif
                if (__pyx_t_6 >= __pyx_temp) break;
              }
              __pyx_t_5 = __Pyx_PyList_GET_ITEM_REF(__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, 3300, __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, 3300, __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, 3300, __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:;
+03301:             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, 3301, __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, 3301, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_9 = __Pyx_PyObject_CompareBoolEq_object_int(__pyx_t_5, __pyx_t_8, Py_EQ); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 3301, __pyx_L6_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (__pyx_t_9) {
/* … */
          }
+03302:                 kind = entry
            __Pyx_INCREF(__pyx_v_entry);
            __Pyx_DECREF_SET(__pyx_v_kind, __pyx_v_entry);
+03303:                 break
            goto __pyx_L13_break;
+03304:         context.connection_listener(ConnectionEvent(
        __pyx_t_8 = NULL;
        __Pyx_INCREF(__pyx_v_context->connection_listener);
        __pyx_t_5 = __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, 3304, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_12);
/* … */
  {
    PyObject* __pyx_temp[9] = {__pyx_mstate_global->__pyx_n_u_kind, __pyx_mstate_global->__pyx_n_u_host, __pyx_mstate_global->__pyx_n_u_port, __pyx_mstate_global->__pyx_n_u_previous_host, __pyx_mstate_global->__pyx_n_u_previous_port, __pyx_mstate_global->__pyx_n_u_attempt_number, __pyx_mstate_global->__pyx_n_u_cause_code, __pyx_mstate_global->__pyx_n_u_cause_msg, __pyx_mstate_global->__pyx_n_u_timestamp_millis};
    __pyx_mstate_global->__pyx_tuple[28] = __Pyx_PyTuple_FromArray(__pyx_temp, 9); if (unlikely(!__pyx_mstate_global->__pyx_tuple[28])) __PYX_ERR(0, 3304, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[28]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[28]);
 03305:             kind=kind,
+03306:             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, 3306, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_13);
+03307:             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, 3307, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_14);
+03308:             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, 3308, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_15);
 03309:                 event.previous_host, event.previous_host_len),
+03310:             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, 3310, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_16);
 03311:                 event.previous_port, event.previous_port_len),
+03312:             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, 3312, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_17 = __pyx_t_18;
          __pyx_t_18 = 0;
        } else {
+03313:                 if event.has_attempt else None,
        __pyx_t_9 = (__pyx_v_event->has_attempt != 0);

        if (__pyx_t_9) {
/* … */
          __Pyx_INCREF(Py_None);
          __pyx_t_17 = Py_None;
        }

+03314:             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, 3314, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_19);
          __pyx_t_18 = __pyx_t_19;
          __pyx_t_19 = 0;
        } else {
+03315:                 if event.has_cause else None,
        __pyx_t_9 = (__pyx_v_event->has_cause != 0);

        if (__pyx_t_9) {
/* … */
          __Pyx_INCREF(Py_None);
          __pyx_t_18 = Py_None;
        }

+03316:             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, 3316, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_20);
          __pyx_t_19 = __pyx_t_20;
          __pyx_t_20 = 0;
        } else {
+03317:                 if event.has_cause else None,
        __pyx_t_9 = (__pyx_v_event->has_cause != 0);

        if (__pyx_t_9) {
/* … */
          __Pyx_INCREF(Py_None);
          __pyx_t_19 = Py_None;
        }

+03318:             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, 3318, __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[10] = {__pyx_t_11, __pyx_v_kind, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_16, __pyx_t_17, __pyx_t_18, __pyx_t_19, __pyx_t_20};
          #if CYTHON_VECTORCALL
          __pyx_t_22 = __pyx_mstate_global->__pyx_tuple[28];
          if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 3304, __pyx_L6_error)
          __Pyx_INCREF(__pyx_t_22);
          #else
          {
            PyObject *__pyx_temp[9] = {__pyx_mstate_global->__pyx_n_u_kind, __pyx_mstate_global->__pyx_n_u_host, __pyx_mstate_global->__pyx_n_u_port, __pyx_mstate_global->__pyx_n_u_previous_host, __pyx_mstate_global->__pyx_n_u_previous_port, __pyx_mstate_global->__pyx_n_u_attempt_number, __pyx_mstate_global->__pyx_n_u_cause_code, __pyx_mstate_global->__pyx_n_u_cause_msg, __pyx_mstate_global->__pyx_n_u_timestamp_millis};
            __pyx_t_22 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 9);
            if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 3304, __pyx_L6_error)
            __Pyx_GOTREF(__pyx_t_22);
          }
          #endif
          __pyx_t_10 = __Pyx_Object_VectorcallKwds((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_10)) __PYX_ERR(0, 3304, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_10);
        }
        __pyx_t_21 = 1;
        #if CYTHON_UNPACK_METHODS
        if (likely(PyMethod_Check(__pyx_t_5))) {
          __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5);
          assert(__pyx_t_8);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
          __pyx_t_21 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_10};
          __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_21, (2-__pyx_t_21) | (__pyx_t_21*__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_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3304, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+03319:     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_5, &__pyx_t_10) < 0) __PYX_ERR(0, 3319, __pyx_L8_except_error)
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_5);
        __Pyx_XGOTREF(__pyx_t_10);
+03320:         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, 3320, __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, 3320, __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, 3320, __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_8 = __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_8)) __PYX_ERR(0, 3320, __pyx_L8_except_error)
          __Pyx_GOTREF(__pyx_t_8);
        }
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        goto __pyx_L7_exception_handled;
      }
      goto __pyx_L8_except_error;
 03321:             "connection event listener failed")
 03322:     finally:
+03323:         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_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_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_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:;
  }
+03324:             _exit_dispatch(context.owner_token)
        __pyx_t_10 = __pyx_v_context->owner_token;
        __Pyx_INCREF(__pyx_t_10);
        __pyx_f_7questdb_7_client__exit_dispatch(__pyx_t_10); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3324, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
/* … */
          __pyx_t_10 = __pyx_v_context->owner_token;
          __Pyx_INCREF(__pyx_t_10);
          __pyx_f_7questdb_7_client__exit_dispatch(__pyx_t_10); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3324, __pyx_L20_error)
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
 03325: 
 03326: 
+03327: 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:;
}
 03328:         void* user_data,
 03329:         const questdb_connection_event* event) noexcept nogil:
 03330:     # No object locals here: the finalizing early return must not touch
 03331:     # the GIL, which a Cython epilogue with object cleanup would.
+03332:     if qdb_py_is_finalizing():
  __pyx_t_1 = qdb_py_is_finalizing();

  if (__pyx_t_1) {
/* … */
  }
+03333:         return
    {
    }
    goto __pyx_L0;
+03334:     _connection_event_dispatch(user_data, event)
  __pyx_f_7questdb_7_client__connection_event_dispatch(__pyx_v_user_data, __pyx_v_event);
 03335: 
 03336: 
+03337: class ServerRole(TaggedEnum):
  __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3337, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  {
    PyObject* __pyx_temp[1] = {__pyx_t_17};
    __pyx_t_16 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3337, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
  }
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __pyx_t_17 = __Pyx_PEP560_update_bases(__pyx_t_16); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3337, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_4 = __Pyx_CalculateMetaclass(NULL, __pyx_t_17); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3337, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_20 = __Pyx_Py3MetaclassPrepare(__pyx_t_4, __pyx_t_17, __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_20)) __PYX_ERR(0, 3337, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  if (__pyx_t_17 != __pyx_t_16) {
    if (unlikely((PyDict_SetItemString(__pyx_t_20, "__orig_bases__", __pyx_t_16) < 0))) __PYX_ERR(0, 3337, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
/* … */
  __pyx_t_16 = __Pyx_Py3ClassCreate(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ServerRole, __pyx_t_17, __pyx_t_20, NULL, 0, 0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3337, __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_ServerRole, __pyx_t_16) < (0)) __PYX_ERR(0, 3337, __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_17); __pyx_t_17 = 0;
 03338:     """
 03339:     Cluster role advertised by the server's ``SERVER_INFO`` handshake.
 03340:     """
+03341:     Standalone = ('standalone', 0)
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_Standalone, __pyx_mstate_global->__pyx_tuple[66]) < (0)) __PYX_ERR(0, 3341, __pyx_L1_error)
/* … */
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_standalone, __pyx_mstate_global->__pyx_int_0};
    __pyx_mstate_global->__pyx_tuple[66] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[66])) __PYX_ERR(0, 3341, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[66]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[66]);
+03342:     Primary = ('primary', 1)
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_Primary, __pyx_mstate_global->__pyx_tuple[67]) < (0)) __PYX_ERR(0, 3342, __pyx_L1_error)
/* … */
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_primary, __pyx_mstate_global->__pyx_int_1};
    __pyx_mstate_global->__pyx_tuple[67] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[67])) __PYX_ERR(0, 3342, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[67]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[67]);
+03343:     Replica = ('replica', 2)
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_Replica, __pyx_mstate_global->__pyx_tuple[68]) < (0)) __PYX_ERR(0, 3343, __pyx_L1_error)
/* … */
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_replica, __pyx_mstate_global->__pyx_int_2};
    __pyx_mstate_global->__pyx_tuple[68] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[68])) __PYX_ERR(0, 3343, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[68]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[68]);
+03344:     PrimaryCatchup = ('primary_catchup', 3)
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_PrimaryCatchup, __pyx_mstate_global->__pyx_tuple[69]) < (0)) __PYX_ERR(0, 3344, __pyx_L1_error)
/* … */
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_primary_catchup, __pyx_mstate_global->__pyx_int_3};
    __pyx_mstate_global->__pyx_tuple[69] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[69])) __PYX_ERR(0, 3344, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[69]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[69]);
 03345:     #: Forward-compat: a role byte this client doesn't recognise. The raw
 03346:     #: byte is available via :attr:`ServerInfo.role_byte`.
+03347:     Other = ('other', 0xFF)
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_Other, __pyx_mstate_global->__pyx_tuple[70]) < (0)) __PYX_ERR(0, 3347, __pyx_L1_error)
/* … */
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_other, __pyx_mstate_global->__pyx_int_255};
    __pyx_mstate_global->__pyx_tuple[70] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[70])) __PYX_ERR(0, 3347, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[70]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[70]);
 03348: 
 03349: 
+03350: @dataclass(frozen=True)
  __pyx_t_16 = NULL;
  __pyx_t_18 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_dataclass); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_18, Py_True};
    #if CYTHON_VECTORCALL
    __pyx_t_21 = __pyx_mstate_global->__pyx_tuple[58];
    if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 3350, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_21);
    #else
    {
      PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_frozen};
      __pyx_t_21 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
      if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 3350, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_21);
    }
    #endif
    __pyx_t_19 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_25, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_21);
    __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
    if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3350, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_19);
  }
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_16, __pyx_t_4};
    __pyx_t_20 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_19, __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;
    if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3350, __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, 3351, __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;
+03351: class ServerInfo:
  __pyx_t_17 = __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_17)) __PYX_ERR(0, 3351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_4 = __Pyx_PyDict_NewPresized(8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_role, __pyx_mstate_global->__pyx_n_u_ServerRole) < (0)) __PYX_ERR(0, 3351, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_role_byte, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 3351, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_epoch, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 3351, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_capabilities, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 3351, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_server_wall_ns, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 3351, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_cluster_id, __pyx_mstate_global->__pyx_n_u_str_2) < (0)) __PYX_ERR(0, 3351, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_node_id, __pyx_mstate_global->__pyx_n_u_str_2) < (0)) __PYX_ERR(0, 3351, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_zone_id, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 3351, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_annotations, __pyx_t_4) < (0)) __PYX_ERR(0, 3351, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
  __pyx_t_4 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_mstate_global->__pyx_n_u_ServerInfo, __pyx_mstate_global->__pyx_empty_tuple, __pyx_t_17, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
 03352:     """
 03353:     Snapshot of the server's ``SERVER_INFO`` handshake, as advertised on
 03354:     the connection :meth:`QuestDB.server_info` sampled. Fields mirror the
 03355:     Rust reader's ``ServerInfo``.
 03356:     """
 03357:     #: Cluster role; :attr:`ServerRole.Other` for unrecognised role bytes.
 03358:     role: ServerRole
 03359:     #: Raw wire role byte; disambiguates ``role == ServerRole.Other``.
 03360:     role_byte: int
 03361:     #: Monotonic generation counter; increases on failover/role
 03362:     #: transitions, useful for fencing replayed batches.
 03363:     epoch: int
 03364:     #: Bitset of QWP capability flags negotiated with the server.
 03365:     capabilities: int
 03366:     #: Server wall-clock at handshake, nanoseconds since the Unix epoch
 03367:     #: (UTC). Useful for clock-skew detection.
 03368:     server_wall_ns: int
 03369:     cluster_id: str
 03370:     node_id: str
 03371:     #: Zone identifier, present iff the server advertised ``CAP_ZONE`` in
 03372:     #: ``capabilities``; ``None`` otherwise. Compared case-insensitively
 03373:     #: against the client's ``zone=`` connect-string knob during failover.
 03374:     zone_id: Optional[str]
 03375: 
 03376: 
+03377: def _sender_error_from_raw(raw):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_20_sender_error_from_raw(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_sender_error_from_raw = {"_sender_error_from_raw", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_20_sender_error_from_raw, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_20_sender_error_from_raw(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 3377, __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, 3377, __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, 3377, __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, 3377, __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, 3377, __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, 3377, __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_19_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_19_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_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_20_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[113])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3377, __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_sender_error_from_raw, __pyx_t_17) < (0)) __PYX_ERR(0, 3377, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+03378:     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, 3378, __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, 3378, __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) {
/* … */
  }
+03379:         return raw
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_raw);
        __pyx_r = __pyx_v_raw;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
 03380: 
 03381:     (
+03382:         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;
 03383:         applied_policy,
 03384:         status,
 03385:         message,
 03386:         message_sequence,
 03387:         from_fsn,
 03388:         to_fsn,
+03389:     ) = 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, 3382, __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_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3382, __pyx_L1_error)
      __Pyx_XGOTREF(__pyx_t_3);
      __pyx_t_4 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3382, __pyx_L1_error)
      __Pyx_XGOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_PyList_GET_ITEM_REF(sequence, 2, __Pyx_ReferenceSharing_SharedReference);
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3382, __pyx_L1_error)
      __Pyx_XGOTREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyList_GET_ITEM_REF(sequence, 3, __Pyx_ReferenceSharing_SharedReference);
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3382, __pyx_L1_error)
      __Pyx_XGOTREF(__pyx_t_6);
      __pyx_t_7 = __Pyx_PyList_GET_ITEM_REF(sequence, 4, __Pyx_ReferenceSharing_SharedReference);
      if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3382, __pyx_L1_error)
      __Pyx_XGOTREF(__pyx_t_7);
      __pyx_t_8 = __Pyx_PyList_GET_ITEM_REF(sequence, 5, __Pyx_ReferenceSharing_SharedReference);
      if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3382, __pyx_L1_error)
      __Pyx_XGOTREF(__pyx_t_8);
      __pyx_t_9 = __Pyx_PyList_GET_ITEM_REF(sequence, 6, __Pyx_ReferenceSharing_SharedReference);
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3382, __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, 3382, __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, 3382, __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, 3382, __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, 3382, __pyx_L1_error)
    __pyx_L7_unpacking_done:;
  }
 03390: 
+03391:     py_category = SenderErrorCategory.Unknown
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_SenderErrorCategory); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3391, __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, 3391, __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;
+03392:     for entry in SenderErrorCategory:
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_SenderErrorCategory); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3392, __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, 3392, __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, 3392, __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, 3392, __pyx_L1_error)
          #endif
          if (__pyx_t_12 >= __pyx_temp) break;
        }
        __pyx_t_8 = __Pyx_PyList_GET_ITEM_REF(__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, 3392, __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, 3392, __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, 3392, __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:;
+03393:         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, 3393, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_8, __pyx_v_category, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3393, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (__pyx_t_1) {
/* … */
    }
+03394:             py_category = entry
      __Pyx_INCREF(__pyx_v_entry);
      __Pyx_DECREF_SET(__pyx_v_py_category, __pyx_v_entry);
+03395:             break
      goto __pyx_L9_break;
 03396: 
+03397:     py_policy = SenderErrorPolicy.Terminal
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_Terminal); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_v_py_policy = __pyx_t_8;
  __pyx_t_8 = 0;
+03398:     for entry in SenderErrorPolicy:
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3398, __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, 3398, __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, 3398, __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, 3398, __pyx_L1_error)
          #endif
          if (__pyx_t_12 >= __pyx_temp) break;
        }
        __pyx_t_8 = __Pyx_PyList_GET_ITEM_REF(__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, 3398, __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, 3398, __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, 3398, __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_L15_for_end;
  __pyx_L13_break:;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  goto __pyx_L15_for_end;
  __pyx_L15_for_end:;
+03399:         if entry.c_value == applied_policy:
    __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, 3399, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_8, __pyx_v_applied_policy, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3399, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (__pyx_t_1) {
/* … */
    }
+03400:             py_policy = entry
      __Pyx_INCREF(__pyx_v_entry);
      __Pyx_DECREF_SET(__pyx_v_py_policy, __pyx_v_entry);
+03401:             break
      goto __pyx_L13_break;
 03402: 
+03403:     return SenderError(
  __pyx_t_8 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_SenderError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3403, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
 03404:         py_category,
 03405:         py_policy,
 03406:         status,
 03407:         message,
 03408:         message_sequence,
 03409:         from_fsn,
+03410:         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, 3403, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_9;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_9 = 0;
  goto __pyx_L0;
 03411: 
 03412: 
+03413: def _default_error_handler(error):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_22_default_error_handler(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_22_default_error_handler = {"_default_error_handler", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_22_default_error_handler, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_22_default_error_handler(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 3413, __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, 3413, __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, 3413, __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, 3413, __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, 3413, __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, 3413, __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_21_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_21_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_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_22_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[114])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3413, __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_default_error_handler, __pyx_t_17) < (0)) __PYX_ERR(0, 3413, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 03414:     level = (
+03415:         logging.ERROR
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3415, __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, 3415, __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 {
+03416:         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, 3416, __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, 3416, __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, 3416, __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) {
+03417:         else logging.WARNING)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3417, __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, 3417, __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;
+03418:     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, 3418, __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, 3418, __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, 3418, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_4 = __pyx_t_2;
  __Pyx_INCREF(__pyx_t_4);
 03419:         level,
 03420:         "QWP/WebSocket server rejection: "
 03421:         "category=%s policy=%s status=%s fsn=[%s,%s] seq=%s message=%s",
+03422:         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, 3422, __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, 3422, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+03423:         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, 3423, __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, 3423, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+03424:         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, 3424, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
+03425:         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, 3425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
+03426:         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, 3426, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
+03427:         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, 3427, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
+03428:         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, 3428, __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, 3418, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 03429: 
 03430: 
+03431: 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);
}
 03432:         void* user_data,
 03433:         const line_sender_qwpws_error_view* view) noexcept with gil:
+03434:     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;
+03435:     cdef bint entered = False
  __pyx_v_entered = 0;
+03436:     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:;
    }
  }
+03437:         _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, 3437, __pyx_L6_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+03438:         entered = True
        __pyx_v_entered = 1;
+03439:         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, 3439, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_9);
+03440:             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, 3440, __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, 3439, __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, 3439, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+03441:     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, 3441, __pyx_L8_except_error)
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_7);
+03442:         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, 3442, __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, 3442, __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, 3442, __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, 3442, __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;
 03443:             "QWP/WebSocket error handler failed")
 03444:     finally:
+03445:         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:;
  }
+03446:             _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, 3446, __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, 3446, __pyx_L16_error)
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 03447: 
 03448: 
+03449: 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:;
}
 03450:         void* user_data,
 03451:         const line_sender_qwpws_error_view* view) noexcept nogil:
 03452:     # No object locals here: the finalizing early return must not touch
 03453:     # the GIL, which a Cython epilogue with object cleanup would.
+03454:     if qdb_py_is_finalizing():
  __pyx_t_1 = qdb_py_is_finalizing();

  if (__pyx_t_1) {
/* … */
  }
+03455:         return
    {
    }
    goto __pyx_L0;
+03456:     _sender_error_dispatch(user_data, view)
  __pyx_f_7questdb_7_client__sender_error_dispatch(__pyx_v_user_data, __pyx_v_view);
 03457: 
 03458: 
+03459: class TlsCa(TaggedEnum):
  __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3459, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  {
    PyObject* __pyx_temp[1] = {__pyx_t_17};
    __pyx_t_4 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3459, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __pyx_t_17 = __Pyx_PEP560_update_bases(__pyx_t_4); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3459, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_20 = __Pyx_CalculateMetaclass(NULL, __pyx_t_17); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3459, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __pyx_t_19 = __Pyx_Py3MetaclassPrepare(__pyx_t_20, __pyx_t_17, __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_19)) __PYX_ERR(0, 3459, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__pyx_t_17 != __pyx_t_4) {
    if (unlikely((PyDict_SetItemString(__pyx_t_19, "__orig_bases__", __pyx_t_4) < 0))) __PYX_ERR(0, 3459, __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_TlsCa, __pyx_t_17, __pyx_t_19, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3459, __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_TlsCa, __pyx_t_4) < (0)) __PYX_ERR(0, 3459, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 03460:     """
 03461:     Verification mechanism for the server's certificate.
 03462: 
 03463:     Here ``webpki`` refers to the
 03464:     `WebPKI library <https://github.com/rustls/webpki-roots>`_ and
 03465:     ``os`` refers to the operating system's certificate store.
 03466: 
 03467:     See :ref:`sender_conf_tls` for more information.
 03468:     """
+03469:     WebpkiRoots = ('webpki_roots', line_sender_ca_webpki_roots)
  __pyx_t_4 = __Pyx_PyLong_From_enum__line_sender_ca(line_sender_ca_webpki_roots); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3469, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_webpki_roots, __pyx_t_4};
    __pyx_t_16 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3469, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_WebpkiRoots, __pyx_t_16) < (0)) __PYX_ERR(0, 3469, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+03470:     OsRoots = ('os_roots', line_sender_ca_os_roots)
  __pyx_t_16 = __Pyx_PyLong_From_enum__line_sender_ca(line_sender_ca_os_roots); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3470, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_os_roots, __pyx_t_16};
    __pyx_t_4 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3470, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_OsRoots, __pyx_t_4) < (0)) __PYX_ERR(0, 3470, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+03471:     WebpkiAndOsRoots = ('webpki_and_os_roots', line_sender_ca_webpki_and_os_roots)
  __pyx_t_4 = __Pyx_PyLong_From_enum__line_sender_ca(line_sender_ca_webpki_and_os_roots); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3471, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_webpki_and_os_roots, __pyx_t_4};
    __pyx_t_16 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3471, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_WebpkiAndOsRoots, __pyx_t_16) < (0)) __PYX_ERR(0, 3471, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+03472:     PemFile = ('pem_file', line_sender_ca_pem_file)
  __pyx_t_16 = __Pyx_PyLong_From_enum__line_sender_ca(line_sender_ca_pem_file); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3472, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_pem_file, __pyx_t_16};
    __pyx_t_4 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3472, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_PemFile, __pyx_t_4) < (0)) __PYX_ERR(0, 3472, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 03473: 
 03474: 
+03475: 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;
}
+03476:     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, 3476, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_msg = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 03477:         err.msg, <Py_ssize_t>err.msg_len)
+03478:     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, 3478, __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, 3478, __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, 3478, __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, 3478, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_py_err = __pyx_t_1;
  __pyx_t_1 = 0;
+03479:     questdb_conf_str_parse_err_free(err)
  questdb_conf_str_parse_err_free(__pyx_v_err);
+03480:     return py_err
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_v_py_err);
      __pyx_r = __pyx_v_py_err;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 03481: 
 03482: 
+03483: 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_27);
  __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;
}
 03484:         qdb_pystr_buf* b,
 03485:         str conf_str):
 03486:     """
 03487:     Parse a config string to a tuple of (Protocol, dict[str, str]).
 03488:     """
 03489:     cdef size_t c_len1
 03490:     cdef const char* c_buf1
 03491:     cdef size_t c_len2
 03492:     cdef const char* c_buf2
 03493:     cdef str service
 03494:     cdef questdb_conf_str_iter* c_iter
 03495:     cdef str key
 03496:     cdef str value
+03497:     cdef dict params = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_params = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 03498:     cdef line_sender_utf8 c_conf_str_utf8
 03499:     cdef questdb_conf_str_parse_err* err
 03500:     cdef questdb_conf_str* c_conf_str
+03501:     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, 3501, __pyx_L1_error)

+03502:     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));
 03503:         c_conf_str_utf8.buf,
 03504:         c_conf_str_utf8.len,
 03505:         &err)
+03506:     if c_conf_str == NULL:
  __pyx_t_3 = (__pyx_v_c_conf_str == NULL);

  if (unlikely(__pyx_t_3)) {
/* … */
  }
+03507:         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, 3507, __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, 3507, __pyx_L1_error)
 03508: 
+03509:     c_iter = NULL
  __pyx_v_c_iter = NULL;
+03510:     try:
  /*try:*/ {
+03511:         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));
+03512:         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, 3512, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_service = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
 03513: 
+03514:         c_iter = questdb_conf_str_iter_pairs(c_conf_str)
    __pyx_v_c_iter = questdb_conf_str_iter_pairs(__pyx_v_c_conf_str);
+03515:         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;
+03516:             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, 3516, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_key, ((PyObject*)__pyx_t_1));
      __pyx_t_1 = 0;
+03517:             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, 3517, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_value, ((PyObject*)__pyx_t_1));
      __pyx_t_1 = 0;
+03518:             params[key] = value
      if (unlikely((PyDict_SetItem(__pyx_v_params, __pyx_v_key, __pyx_v_value) < 0))) __PYX_ERR(0, 3518, __pyx_L5_error)
    }
  }
 03519:     finally:
+03520:         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) {
/* … */
        }
+03521:             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);
+03522:         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:;
  }
 03523: 
 03524:     # We now need to parse the various values in the dict from their
 03525:     # string values to their Python types, as expected by the overrides
 03526:     # API of Sender.from_conf and Sender.from_env.
 03527:     # Note that some of these values, such as `tls_ca` or `auto_flush`
 03528:     # are kept as strings and are parsed by Sender._set_sender_fields.
 03529:     type_mappings = {
+03530:         'bind_interface': str,
  __pyx_t_1 = __Pyx_PyDict_NewPresized(25); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3530, __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, 3530, __pyx_L1_error)
+03531:         '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, 3530, __pyx_L1_error)
+03532:         'multicast_ttl': int,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_multicast_ttl, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03533:         'username': str,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_username, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03534:         'password': str,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_password, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03535:         'token': str,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_token, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03536:         'token_x': str,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_token_x, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03537:         'token_y': str,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_token_y, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03538:         'auth_timeout': int,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auth_timeout, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03539:         'tls_verify': str,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_verify, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03540:         'tls_ca': str,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_ca, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03541:         'tls_roots': str,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_roots, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03542:         '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, 3530, __pyx_L1_error)
+03543:         '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, 3530, __pyx_L1_error)
+03544:         'retry_timeout': int,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_retry_timeout, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03545:         '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, 3530, __pyx_L1_error)
+03546:         '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, 3530, __pyx_L1_error)
+03547:         'request_timeout': int,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_request_timeout, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03548:         'auto_flush': str,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03549:         '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, 3530, __pyx_L1_error)
+03550:         '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, 3530, __pyx_L1_error)
+03551:         '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, 3530, __pyx_L1_error)
+03552:         '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, 3530, __pyx_L1_error)
+03553:         '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, 3530, __pyx_L1_error)
+03554:         '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, 3530, __pyx_L1_error)
  __pyx_v_type_mappings = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 03555:     }
+03556:     typed_params = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3556, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_typed_params = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+03557:     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, 3557, __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, 3557, __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, 3557, __pyx_L1_error)
    if (!(likely(PyUnicode_CheckExact(__pyx_t_16))||((__pyx_t_16) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_16))) __PYX_ERR(0, 3557, __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;
+03558:         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, 3558, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
    __Pyx_XDECREF_SET(__pyx_v_converter, __pyx_t_16);
    __pyx_t_16 = 0;
+03559:         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;
+03560:             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, 3560, __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, 3560, __pyx_L15_error)
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+03561:         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, 3561, __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_27); __pyx_t_27 = 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_28 = __pyx_clineno; __pyx_t_6 = __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_28; __pyx_filename = __pyx_t_6;
            goto __pyx_L17_except_error;
          }
        }
      }
      goto __pyx_L17_except_error;
+03562:             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, 3562, __pyx_L28_error)
          __Pyx_GOTREF(__pyx_t_21);
+03563:                 QuestDBErrorCode.ConfigError,
          __Pyx_GetModuleGlobalName(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 3563, __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, 3563, __pyx_L28_error)
          __Pyx_GOTREF(__pyx_t_23);
          __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
+03564:                 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, 3564, __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, 3564, __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__2;
          __pyx_t_25[3] = __pyx_t_24;
          __pyx_t_26 = 31;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_26 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_25[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_25[3]);
          #endif
          __pyx_t_4 = 0;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_4 |= __Pyx_PyUnicode_KIND_04(__pyx_t_25[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_25[3]);
          #endif
          __pyx_t_27 = __Pyx_PyUnicode_Join(__pyx_t_25, 4, __pyx_t_26, __pyx_t_4);
          if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 3564, __pyx_L28_error)
          __Pyx_GOTREF(__pyx_t_27);
          __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_27};
            __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_27); __pyx_t_27 = 0;
            __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
            if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3562, __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, 3562, __pyx_L28_error)
        }
+03565:     if service == 'udps':
  __pyx_t_3 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_service, __pyx_mstate_global->__pyx_n_u_udps, Py_EQ); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 3565, __pyx_L1_error)
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+03566:         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, 3566, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
+03567:             QuestDBErrorCode.ConfigError,
    __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3567, __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, 3567, __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, 3566, __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, 3566, __pyx_L1_error)
 03568:             'TLS is not supported for UDP.')
+03569:     return (Protocol.parse(service), typed_params)
  __pyx_t_17 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_Protocol); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3569, __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, 3569, __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, 3569, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3569, __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, 3569, __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, 3569, __pyx_L1_error);
  __pyx_t_1 = 0;
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_15;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_15 = 0;
  goto __pyx_L0;
 03570: 
 03571: 
+03572: 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;
}
+03573:     return str(value).replace(';', ';;')
  __pyx_t_1 = __Pyx_PyObject_Unicode(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyUnicode_Replace(((PyObject*)__pyx_t_1), __pyx_mstate_global->__pyx_kp_u__28, __pyx_mstate_global->__pyx_kp_u__29, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = ((PyObject*)__pyx_t_2);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_2 = 0;
  goto __pyx_L0;
 03574: 
 03575: 
+03576: 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;
}
 03577:         col_t* col,
 03578:         size_t row_count) noexcept nogil:
+03579:     if col.setup.chunks.n_chunks != 1:
  __pyx_t_1 = (__pyx_v_col->setup->chunks.n_chunks != 1);

  if (__pyx_t_1) {
/* … */
  }
+03580:         return False
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+03581:     if col.setup.chunks.chunks == NULL:
  __pyx_t_1 = (__pyx_v_col->setup->chunks.chunks == NULL);

  if (__pyx_t_1) {
/* … */
  }
+03582:         return False
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+03583:     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;
 03584: 
 03585: 
+03586: 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;
}
 03587:         col_t* col,
 03588:         size_t row_count) noexcept nogil:
 03589:     cdef ArrowArray* arr
+03590:     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) {
/* … */
  }
+03591:         return False
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+03592:     arr = &col.setup.chunks.chunks[0]
  __pyx_v_arr = (&(__pyx_v_col->setup->chunks.chunks[0]));
 03593:     # pyarrow allocates exactly `n_buffers` pointers, so `buffers[1]` is
 03594:     # past the allocation for a struct array (1) or a null array (0).
 03595:     return (
+03596:         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;
  }
+03597:         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;
  }
+03598:         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;
  }
+03599:         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;
 03600: 
 03601: 
+03602: 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;
}
 03603:         const int64_t* data,
 03604:         size_t row_count) noexcept nogil:
 03605:     cdef size_t row_index
+03606:     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;
+03607:         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) {
/* … */
    }
  }

+03608:             return True
      {

        __pyx_r = 1;
      }
      goto __pyx_L0;
+03609:     return False
  {

    __pyx_r = 0;
  }
  goto __pyx_L0;
 03610: 
 03611: 
+03612: 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;
}
 03613:         col_t* col,
 03614:         size_t row_count) noexcept nogil:
+03615:     if not col.setup.nat_scan_done:
  __pyx_t_1 = (!__pyx_v_col->setup->nat_scan_done);

  if (__pyx_t_1) {
/* … */
  }
+03616:         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);
 03617:             <const int64_t*>col.setup.chunks.chunks[0].buffers[1],
 03618:             row_count)
+03619:         col.setup.nat_scan_done = True
    __pyx_v_col->setup->nat_scan_done = 1;
+03620:     return col.setup.nat_found
  {

    __pyx_r = __pyx_v_col->setup->nat_found;
  }
  goto __pyx_L0;
 03621: 
 03622: 
+03623: 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;
}
 03624:         const int64_t* data,
 03625:         size_t row_count) noexcept nogil:
 03626:     cdef size_t row_index
+03627:     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;
+03628:         if data[row_index] < 0:
    __pyx_t_4 = ((__pyx_v_data[__pyx_v_row_index]) < 0);

    if (__pyx_t_4) {
/* … */
    }
  }

+03629:             return True
      {

        __pyx_r = 1;
      }
      goto __pyx_L0;
+03630:     return False
  {

    __pyx_r = 0;
  }
  goto __pyx_L0;
 03631: 
 03632: 
+03633: 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;
}
 03634:         ArrowArray* arr,
 03635:         size_t row_offset,
 03636:         size_t row_count,
 03637:         qwp_validity* validity) except? NULL:
+03638:     if arr.null_count == 0:
  __pyx_t_1 = (__pyx_v_arr->null_count == 0);

  if (__pyx_t_1) {
/* … */
  }
+03639:         return NULL
    {

      __pyx_r = NULL;
    }
    goto __pyx_L0;
+03640:     if row_offset % 8 != 0:
  __pyx_t_1 = ((__pyx_v_row_offset % 8) != 0);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+03641:         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, 3641, __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, 3641, __pyx_L1_error)
 03642:             'Columnar validity slices must start at byte-aligned row offsets.')
+03643:     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));
+03644:     validity.bit_len = row_count
  __pyx_v_validity->bit_len = __pyx_v_row_count;
+03645:     return validity
  {

    __pyx_r = __pyx_v_validity;
  }
  goto __pyx_L0;
 03646: 
 03647: 
+03648: 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;
}
 03649:         ArrowArray* arr) noexcept nogil:
 03650:     # A null array carries no buffer pointers at all, so the bitmap
 03651:     # read is bounded by `n_buffers` before it happens. This is the
 03652:     # gate `_dataframe_columnar_validity` relies on having run.
+03653:     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;
  }
+03654:         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;
  }
+03655:         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;
  }
+03656:         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;
 03657: 
 03658: 
+03659: 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;
}
 03660:         ArrowArray* arr, bint large_offsets) noexcept nogil:
+03661:     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) {
/* … */
  }
+03662:             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;
  }
+03663:             arr.buffers[1] != NULL):
  __pyx_t_2 = ((__pyx_v_arr->buffers[1]) != NULL);


  __pyx_t_1 = __pyx_t_2;

  __pyx_L4_bool_binop_done:;
+03664:         return False
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+03665:     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) {
/* … */
  }
+03666:         return True
    {

      __pyx_r = 1;
    }
    goto __pyx_L0;
 03667:     # NULL byte buffer is valid only with zero data bytes (all-null/empty).
+03668:     if large_offsets:
  if (__pyx_v_large_offsets) {
/* … */
  }
+03669:         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;
+03670:     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;
 03671: 
 03672: 
+03673: 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;
}
 03674:         ArrowArray* arr) noexcept nogil:
+03675:     cdef ArrowArray* dictionary = arr.dictionary
  __pyx_t_1 = __pyx_v_arr->dictionary;

  __pyx_v_dictionary = __pyx_t_1;
+03676:     if dictionary == NULL:
  __pyx_t_2 = (__pyx_v_dictionary == NULL);

  if (__pyx_t_2) {
/* … */
  }
+03677:         return False
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
 03678:     return (
+03679:         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;
  }
+03680:         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;
  }
+03681:         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;
  }
+03682:         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;
  }
+03683:         (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;
 03684: 
 03685: 
+03686: 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;
}
 03687:         dataframe_plan_t* plan) noexcept nogil:
 03688:     """
 03689:     True when chunk row boundaries must be byte-aligned (multiples of 8).
 03690:     Triggers for:
 03691:     - Any Arrow column whose `null_count != 0` (the encoder reads a
 03692:       validity bitmap and our slicing requires byte-alignment).
 03693:     - Any PyObject source. The planner can't see the nulls until the
 03694:       build phase walks the column; we conservatively assume they
 03695:       might be present and require alignment.
 03696:     - col_source_bool_pyobj specifically packs its VALUES into an
 03697:       LSB-first bitmap; the emit shift `row_offset // 8` requires
 03698:       alignment whether or not nulls are present.
 03699:     """
 03700:     cdef size_t col_index
 03701:     cdef ArrowArray* arr
 03702:     cdef col_t* col
+03703:     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;
+03704:         col = &plan.cols.d[col_index]
    __pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_col_index]));
+03705:         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) {
/* … */
    }
+03706:             return True
      {

        __pyx_r = 1;
      }
      goto __pyx_L0;
+03707:         arr = &col.setup.chunks.chunks[0]
    __pyx_v_arr = (&(__pyx_v_col->setup->chunks.chunks[0]));
+03708:         if arr.null_count != 0:
    __pyx_t_4 = (__pyx_v_arr->null_count != 0);

    if (__pyx_t_4) {
/* … */
    }
  }

+03709:             return True
      {

        __pyx_r = 1;
      }
      goto __pyx_L0;
+03710:     return False
  {

    __pyx_r = 0;
  }
  goto __pyx_L0;
 03711: 
 03712: 
+03713: 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;
}
 03714:         dataframe_plan_t* plan,
 03715:         size_t max_rows_per_chunk) noexcept nogil:
 03716:     # Clamp to a hard safety upper bound and align to 8 rows when the plan
 03717:     # carries a validity bitmap (chunk boundary must be byte-aligned).
+03718:     cdef size_t rows_per_chunk = max_rows_per_chunk
  __pyx_v_rows_per_chunk = __pyx_v_max_rows_per_chunk;
+03719:     if rows_per_chunk > 1000000:
  __pyx_t_1 = (__pyx_v_rows_per_chunk > 0xF4240);

  if (__pyx_t_1) {
/* … */
  }
+03720:         rows_per_chunk = 1000000
    __pyx_v_rows_per_chunk = 0xF4240;
+03721:     if rows_per_chunk == 0:
  __pyx_t_1 = (__pyx_v_rows_per_chunk == 0);

  if (__pyx_t_1) {
/* … */
  }
+03722:         rows_per_chunk = 1
    __pyx_v_rows_per_chunk = 1;
+03723:     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) {
/* … */
  }
+03724:         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;
    }
+03725:             rows_per_chunk = 8
      __pyx_v_rows_per_chunk = 8;
+03726:         elif rows_per_chunk > 8:
    __pyx_t_1 = (__pyx_v_rows_per_chunk > 8);

    if (__pyx_t_1) {
/* … */
    }
    __pyx_L6:;
+03727:             rows_per_chunk -= rows_per_chunk % 8
      __pyx_v_rows_per_chunk = (__pyx_v_rows_per_chunk - (__pyx_v_rows_per_chunk % 8));
+03728:             if rows_per_chunk == 0:
      __pyx_t_1 = (__pyx_v_rows_per_chunk == 0);

      if (__pyx_t_1) {
/* … */
      }
+03729:                 rows_per_chunk = 8
        __pyx_v_rows_per_chunk = 8;
+03730:     return rows_per_chunk
  {

    __pyx_r = __pyx_v_rows_per_chunk;
  }
  goto __pyx_L0;
 03731: 
 03732: 
+03733: 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;
}
 03734:     return {
+03735:         'column': None,
  __pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3735, __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, 3735, __pyx_L1_error)
+03736:         'target': None,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_target, Py_None) < (0)) __PYX_ERR(0, 3735, __pyx_L1_error)
+03737:         'source_code': None,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_source_code, Py_None) < (0)) __PYX_ERR(0, 3735, __pyx_L1_error)
+03738:         'reason': reason,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_reason, __pyx_v_reason) < (0)) __PYX_ERR(0, 3735, __pyx_L1_error)
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 03739:     }
 03740: 
 03741: 
+03742: 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;
}
 03743:         object df,
 03744:         col_t* col,
 03745:         str reason):
 03746:     return {
+03747:         'column': df.columns[col.setup.orig_index],
  __pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3747, __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, 3747, __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, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3747, __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, 3747, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+03748:         'target': _TARGET_NAMES[col.setup.target],
  if (unlikely(__pyx_v_7questdb_7_client__TARGET_NAMES == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
    __PYX_ERR(0, 3748, __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, 3748, __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, 3748, __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, 3747, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+03749:         '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, 3749, __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, 3747, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+03750:         'reason': reason,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_reason, __pyx_v_reason) < (0)) __PYX_ERR(0, 3747, __pyx_L1_error)
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 03751:     }
 03752: 
 03753: 
+03754: 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;
}
 03755:         object df,
 03756:         dataframe_plan_t* plan):
+03757:     cdef list normalizations = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3757, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_normalizations = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+03758:     return normalizations
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_v_normalizations);
      __pyx_r = __pyx_v_normalizations;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 03759: 
 03760: 
+03761: 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;
}
 03762:         object df,
 03763:         dataframe_plan_t* plan):
+03764:     cdef list failures = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3764, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_failures = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 03765:     cdef size_t col_index
+03766:     cdef size_t field_count = 0
  __pyx_v_field_count = 0;
 03767:     cdef col_t* col
 03768:     cdef const int64_t* ts_data
 03769: 
+03770:     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) {
/* … */
  }
+03771:         return failures
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_failures);
        __pyx_r = __pyx_v_failures;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
 03772: 
+03773:     if plan.c_table_name.buf == NULL:
  __pyx_t_2 = (__pyx_v_plan->c_table_name.buf == NULL);

  if (__pyx_t_2) {
/* … */
  }
+03774:         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, 3774, __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, 3774, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

 03775:             'v1 requires a fixed table_name; table_name_col is not supported.'))
 03776: 
+03777:     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) {
/* … */
  }
+03778:             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;
  }
+03779:             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:;
+03780:         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, 3780, __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, 3780, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

 03781:             'v1 requires at to be a non-null DataFrame timestamp column, '
 03782:             'a fixed timestamp shared by every row, or the explicit '
 03783:             'ServerTimestamp sentinel.'))
 03784: 
+03785:     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;
+03786:         col = &plan.cols.d[col_index]
    __pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_col_index]));
+03787:         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) {
/* … */
    }
+03788:             continue
      goto __pyx_L11_continue;
+03789:         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) {
/* … */
    }
+03790:             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, 3790, __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, 3790, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

 03791:                 df, col, 'table-name columns are not supported in v1.'))
+03792:             continue
      goto __pyx_L11_continue;
+03793:         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) {
/* … */
    }
+03794:             field_count += 1
      __pyx_v_field_count = (__pyx_v_field_count + 1);
+03795:         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;
    }
 03796:             # Generic Arrow passthrough is opaque to this planner. The Rust
 03797:             # importer validates the type-specific buffer layout, validity,
 03798:             # children and logical offset. This side only needs the one array
 03799:             # that the per-column import handle accepts, spanning every row in
 03800:             # the pandas frame.
+03801:             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) {
/* … */
      }
 03802:                     col, plan.row_count):
+03803:                 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, 3803, __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, 3803, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

 03804:                     df, col,
 03805:                     'v1 requires one Arrow chunk spanning the whole column.'))
+03806:                 continue
        goto __pyx_L11_continue;
 03807:         else:
 03808:             # Direct encoders below address buffers[0]/buffers[1] themselves,
 03809:             # so they require a zero-offset value buffer and a readable
 03810:             # validity bitmap. Arrow passthrough deliberately does not.
+03811:             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) {
/* … */
      }
 03812:                     col, plan.row_count):
+03813:                 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, 3813, __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, 3813, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

 03814:                     df, col,
 03815:                     'v1 requires one contiguous zero-offset buffer.'))
+03816:                 continue
        goto __pyx_L11_continue;
+03817:             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:;
 03818:                     &col.setup.chunks.chunks[0]):
+03819:                 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, 3819, __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, 3819, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

 03820:                     df, col, 'v1 requires a zero-offset validity bitmap when '
 03821:                     'nulls are present.'))
+03822:                 continue
        goto __pyx_L11_continue;
 03823: 
+03824:         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:
+03825:             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) {
/* … */
      }
+03826:                     col_source_t.col_source_bool_pyobj,
        case __pyx_e_7questdb_7_client_col_source_bool_numpy:
 03827:                     col_source_t.col_source_bool_numpy):
+03828:                 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, 3828, __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, 3828, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

 03829:                     df,
 03830:                     col,
 03831:                     'v1 only supports object-dtype bool or NumPy bool '
 03832:                     'columns; Arrow nullable bool not yet supported.'))
+03833:         elif col.setup.target == col_target_t.col_target_column_i64:
      break;
      case __pyx_e_7questdb_7_client_col_target_column_f64:
+03834:             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) {
/* … */
      }
+03835:                     col_source_t.col_source_i64_numpy,
        case __pyx_e_7questdb_7_client_col_source_i8_numpy:
+03836:                     col_source_t.col_source_i8_numpy,
        case __pyx_e_7questdb_7_client_col_source_i16_numpy:
+03837:                     col_source_t.col_source_i16_numpy,
        case __pyx_e_7questdb_7_client_col_source_i32_numpy:
+03838:                     col_source_t.col_source_i32_numpy,
        case __pyx_e_7questdb_7_client_col_source_u8_numpy:
+03839:                     col_source_t.col_source_u8_numpy,
        case __pyx_e_7questdb_7_client_col_source_u16_numpy:
+03840:                     col_source_t.col_source_u16_numpy,
        case __pyx_e_7questdb_7_client_col_source_u32_numpy:
+03841:                     col_source_t.col_source_u32_numpy,
        case __pyx_e_7questdb_7_client_col_source_u64_numpy:
+03842:                     col_source_t.col_source_u64_numpy,
        case __pyx_e_7questdb_7_client_col_source_u32_arrow:
+03843:                     col_source_t.col_source_u32_arrow,
        case __pyx_e_7questdb_7_client_col_source_i64_arrow:
+03844:                     col_source_t.col_source_i64_arrow,
        case __pyx_e_7questdb_7_client_col_source_int_pyobj:
 03845:                     col_source_t.col_source_int_pyobj):
+03846:                 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, 3846, __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, 3846, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

 03847:                     df,
 03848:                     col,
 03849:                     'v1 only supports NumPy signed/unsigned int columns, '
 03850:                     'Arrow uint32/int64 columns, or object-dtype int '
 03851:                     'columns.'))
+03852:         elif col.setup.target == col_target_t.col_target_column_f64:
      break;
      case __pyx_e_7questdb_7_client_col_target_column_ts:
+03853:             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) {
/* … */
      }
+03854:                     col_source_t.col_source_f64_numpy,
        case __pyx_e_7questdb_7_client_col_source_f32_numpy:
+03855:                     col_source_t.col_source_f32_numpy,
        case __pyx_e_7questdb_7_client_col_source_f64_arrow:
+03856:                     col_source_t.col_source_f64_arrow,
        case __pyx_e_7questdb_7_client_col_source_float_pyobj:
 03857:                     col_source_t.col_source_float_pyobj):
+03858:                 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, 3858, __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, 3858, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

 03859:                     df,
 03860:                     col,
 03861:                     'v1 only supports NumPy float32/float64, Arrow '
 03862:                     'float64, or object-dtype float columns.'))
+03863:         elif col.setup.target == col_target_t.col_target_column_ts:
      break;
      case __pyx_e_7questdb_7_client_col_target_column_str:
+03864:             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;
      }
+03865:                     col_source_t.col_source_dt64ns_numpy,
        case __pyx_e_7questdb_7_client_col_source_dt64us_numpy:
+03866:                     col_source_t.col_source_dt64us_numpy,
        case __pyx_e_7questdb_7_client_col_source_dt64ns_tz_arrow:
+03867:                     col_source_t.col_source_dt64ns_tz_arrow,
        case __pyx_e_7questdb_7_client_col_source_dt64us_tz_arrow:
+03868:                     col_source_t.col_source_dt64us_tz_arrow,
        case __pyx_e_7questdb_7_client_col_source_datetime_pyobj:
 03869:                     col_source_t.col_source_datetime_pyobj):
+03870:                 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, 3870, __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, 3870, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

 03871:                     df,
 03872:                     col,
 03873:                     'v1 only supports NumPy datetime64[ns/us], '
 03874:                     'tz-aware datetime64/timestamp[pyarrow], or '
 03875:                     'object-dtype datetime timestamp field columns.'))
+03876:             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:;
+03877:                     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:;
 03878:                 # NaT in a datetime64[ns] field is INT64_MIN nanoseconds;
 03879:                 # the zero-copy ns->micros wire conversion would corrupt
 03880:                 # that null sentinel into a bogus 1677 timestamp. With
 03881:                 # pyarrow, _dataframe_columnar_promote_cols already
 03882:                 # re-exported any NaT-carrying column through Arrow (and
 03883:                 # imported pyarrow doing so), leaving nothing to reject.
+03884:                 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) {
/* … */
        }
+03885:                     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, 3885, __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, 3885, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

 03886:                         df,
 03887:                         col,
 03888:                         'v1 datetime64[ns] timestamp field columns cannot '
 03889:                         'contain NaT without pyarrow; install pyarrow, or '
 03890:                         'use datetime64[us] or an object-dtype datetime '
 03891:                         'column for NULL timestamps.'))
+03892:         elif col.setup.target == col_target_t.col_target_column_str:
      break;
      case __pyx_e_7questdb_7_client_col_target_symbol:
+03893:             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;
      }
 03894:                 # PyObject sources are validated by the pre-build phase
 03895:                 # at row level (one walk catches all rows). The planner
 03896:                 # has nothing more to check here.
 03897:                 pass
+03898:             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;
      }
+03899:                     col_source_t.col_source_str_i8_cat,
        case __pyx_e_7questdb_7_client_col_source_str_i16_cat:
+03900:                     col_source_t.col_source_str_i16_cat,
        case __pyx_e_7questdb_7_client_col_source_str_i32_cat:
 03901:                     col_source_t.col_source_str_i32_cat):
+03902:                 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) {
/* … */
        }
 03903:                         &col.setup.chunks.chunks[0]):
+03904:                     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, 3904, __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, 3904, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

 03905:                         df,
 03906:                         col,
 03907:                         'v1 requires Arrow UTF-8 or LargeUtf8 dictionary '
 03908:                         'offsets and byte buffers for categorical columns.'))
+03909:             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;
      }
+03910:                     col_source_t.col_source_str_utf8_arrow,
        case __pyx_e_7questdb_7_client_col_source_str_lrg_utf8_arrow:
 03911:                     col_source_t.col_source_str_lrg_utf8_arrow):
+03912:                 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, 3912, __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, 3912, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

 03913:                     df,
 03914:                     col,
 03915:                     'v1 only supports string[pyarrow] columns backed by '
 03916:                     'Arrow UTF-8 or LargeUtf8, pandas string Categorical, '
 03917:                     'or object-dtype str.'))
+03918:             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:;
 03919:                     &col.setup.chunks.chunks[0],
 03920:                     col.setup.source ==
 03921:                         col_source_t.col_source_str_lrg_utf8_arrow):
+03922:                 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, 3922, __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, 3922, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

 03923:                     df,
 03924:                     col,
 03925:                     'v1 requires Arrow UTF-8 or LargeUtf8 offsets and byte buffers.'))
+03926:         elif col.setup.target == col_target_t.col_target_symbol:
      break;
      case __pyx_e_7questdb_7_client_col_target_at:
+03927:             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:
+03928:                     col_source_t.col_source_str_i8_cat,
        case __pyx_e_7questdb_7_client_col_source_str_i16_cat:
+03929:                     col_source_t.col_source_str_i16_cat,
        case __pyx_e_7questdb_7_client_col_source_str_i32_cat:
 03930:                     col_source_t.col_source_str_i32_cat):
+03931:                 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) {
/* … */
        }
 03932:                         &col.setup.chunks.chunks[0]):
+03933:                     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, 3933, __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, 3933, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

 03934:                         df,
 03935:                         col,
 03936:                         'v1 requires Arrow UTF-8 or LargeUtf8 dictionary '
 03937:                         'offsets and byte buffers for categorical symbols.'))
+03938:             elif col.setup.source in (
        break;
        default:
+03939:                     col_source_t.col_source_str_utf8_arrow,
        case __pyx_e_7questdb_7_client_col_source_str_lrg_utf8_arrow:
 03940:                     col_source_t.col_source_str_lrg_utf8_arrow):
+03941:                 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) {
/* … */
        }
 03942:                         &col.setup.chunks.chunks[0],
 03943:                         col.setup.source ==
 03944:                             col_source_t.col_source_str_lrg_utf8_arrow):
+03945:                     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, 3945, __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, 3945, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

 03946:                         df,
 03947:                         col,
 03948:                         'v1 requires Arrow UTF-8 or LargeUtf8 offsets and '
 03949:                         'byte buffers.'))
 03950:             else:
+03951:                 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, 3951, __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, 3951, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

        break;
      }
 03952:                     df,
 03953:                     col,
 03954:                     'v1 only supports pandas string Categorical or '
 03955:                     'string[pyarrow] symbol columns.'))
+03956:         elif col.setup.target == col_target_t.col_target_at:
      break;
      case __pyx_e_7questdb_7_client_col_target_column_decimal:
+03957:             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;
      }
+03958:                     col_source_t.col_source_dt64ns_numpy,
        case __pyx_e_7questdb_7_client_col_source_dt64us_numpy:
+03959:                     col_source_t.col_source_dt64us_numpy,
        case __pyx_e_7questdb_7_client_col_source_dt64ns_tz_arrow:
+03960:                     col_source_t.col_source_dt64ns_tz_arrow,
        case __pyx_e_7questdb_7_client_col_source_dt64us_tz_arrow:
+03961:                     col_source_t.col_source_dt64us_tz_arrow,
        case __pyx_e_7questdb_7_client_col_source_dt64ms_tz_arrow:
+03962:                     col_source_t.col_source_dt64ms_tz_arrow,
        case __pyx_e_7questdb_7_client_col_source_dt64s_tz_arrow:
 03963:                     col_source_t.col_source_dt64s_tz_arrow):
+03964:                 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, 3964, __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, 3964, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

 03965:                     df,
 03966:                     col,
 03967:                     'v1 only supports NumPy datetime64[ns/us] or '
 03968:                     'tz-aware datetime64/timestamp[pyarrow] '
 03969:                     'designated timestamp columns.'))
+03970:             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;
      }
+03971:                         col_source_t.col_source_dt64ns_tz_arrow,
        case __pyx_e_7questdb_7_client_col_source_dt64us_tz_arrow:
+03972:                         col_source_t.col_source_dt64us_tz_arrow,
        case __pyx_e_7questdb_7_client_col_source_dt64ms_tz_arrow:
+03973:                         col_source_t.col_source_dt64ms_tz_arrow,
        case __pyx_e_7questdb_7_client_col_source_dt64s_tz_arrow:
 03974:                         col_source_t.col_source_dt64s_tz_arrow)
+03975:                     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:;
+03976:                 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, 3976, __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, 3976, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

 03977:                     df,
 03978:                     col,
 03979:                     'v1 designated timestamp columns cannot contain nulls.'))
 03980:             else:
+03981:                 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]));
+03982:                 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;
        }
+03983:                     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, 3983, __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, 3983, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

 03984:                         df,
 03985:                         col,
 03986:                         'v1 designated timestamp columns cannot contain NaT.'))
+03987:                 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:;
 03988:                         ts_data, plan.row_count):
+03989:                     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, 3989, __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, 3989, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

 03990:                         df,
 03991:                         col,
 03992:                         'v1 designated timestamp columns cannot contain '
 03993:                         'timestamps before the Unix epoch.'))
+03994:         elif col.setup.target == col_target_t.col_target_column_decimal:
      break;
      case __pyx_e_7questdb_7_client_col_target_column_i8:
+03995:             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;
      }
 03996:                 # _dataframe_columnar_promote_cols re-exports these through
 03997:                 # Arrow; reaching this branch means pyarrow is unavailable.
+03998:                 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, 3998, __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, 3998, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

 03999:                     df,
 04000:                     col,
 04001:                     'object-dtype Decimal columns require pyarrow on the '
 04002:                     'columnar path; install pyarrow, or back the column '
 04003:                     'with an Arrow decimal type.'))
+04004:             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:;
+04005:                     col_source_t.col_source_decimal32_arrow,
        case __pyx_e_7questdb_7_client_col_source_decimal64_arrow:
+04006:                     col_source_t.col_source_decimal64_arrow,
        case __pyx_e_7questdb_7_client_col_source_decimal128_arrow:
+04007:                     col_source_t.col_source_decimal128_arrow,
        case __pyx_e_7questdb_7_client_col_source_decimal256_arrow:
 04008:                     col_source_t.col_source_decimal256_arrow):
+04009:                 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, 4009, __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, 4009, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

 04010:                     df,
 04011:                     col,
 04012:                     'v1 only supports Arrow-backed decimal columns '
 04013:                     '(pyarrow decimal32/64/128/256).'))
+04014:         elif col.setup.target in (
      break;
      default:
+04015:                 col_target_t.col_target_column_i8,
      case __pyx_e_7questdb_7_client_col_target_column_i16:
+04016:                 col_target_t.col_target_column_i16,
      case __pyx_e_7questdb_7_client_col_target_column_i32:
+04017:                 col_target_t.col_target_column_i32,
      case __pyx_e_7questdb_7_client_col_target_column_f32:
+04018:                 col_target_t.col_target_column_f32,
      case __pyx_e_7questdb_7_client_col_target_column_uuid:
+04019:                 col_target_t.col_target_column_uuid,
      case __pyx_e_7questdb_7_client_col_target_column_ipv4:
+04020:                 col_target_t.col_target_column_ipv4,
      case __pyx_e_7questdb_7_client_col_target_column_binary:
+04021:                 col_target_t.col_target_column_binary,
      case __pyx_e_7questdb_7_client_col_target_column_arrow:
 04022:                 col_target_t.col_target_column_arrow):
 04023:             # Column-QWP-only targets reached via `_FIELD_TARGETS_QWP`.
 04024:             # Routing has already held each one's source to its set in
 04025:             # `_TARGET_TO_SOURCES`, and the append handles every member
 04026:             # of that set. The contiguous-buffer +
 04027:             # validity checks above cover layout; the per-type FFI
 04028:             # handles the wire encoding. col_target_column_arrow delegates
 04029:             # type validation to the Rust importer.
 04030:             pass
 04031:         else:
+04032:             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, 4032, __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, 4032, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

      break;
    }
    __pyx_L11_continue:;
  }

 04033:                 df,
 04034:                 col,
+04035:                 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, "\047NoneType\047 object is not subscriptable");
        __PYX_ERR(0, 4035, __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, 4035, __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, 4035, __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, 4035, __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_11 = 29;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_11 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10[1]);
      #endif
      __pyx_t_12 = 0;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_12 |= __Pyx_PyUnicode_KIND_04(__pyx_t_10[1]);
      #endif
      __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_10, 3, __pyx_t_11, __pyx_t_12);
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4035, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 04036:                 'columns.'))
 04037: 
+04038:     if field_count == 0:
  __pyx_t_8 = (__pyx_v_field_count == 0);

  if (__pyx_t_8) {
/* … */
  }
+04039:         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, 4039, __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, 4039, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

 04040:             'v1 requires at least one non-timestamp data column.'))
 04041: 
+04042:     return failures
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_v_failures);
      __pyx_r = __pyx_v_failures;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 04043: 
 04044: 
+04045: 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;
}
 04046:         object df,
 04047:         dataframe_plan_t* plan) except -1:
+04048:     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, 4048, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_failures = __pyx_t_1;
  __pyx_t_1 = 0;
+04049:     if failures:
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_failures); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 4049, __pyx_L1_error)
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+04050:         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, 4050, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
 04051:             'DataFrame is not supported by QuestDB.dataframe() columnar v1.',
+04052:             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, 4050, __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, 4050, __pyx_L1_error)
 04053: 
 04054: 
+04055: 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_9genexpr16__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_9genexpr16__pyx_v_cell);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+04056:     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, 4056, __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, 4056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4056, __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, 4056, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_2);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2) != (0)) __PYX_ERR(0, 4056, __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, 4056, __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;
 04057:     cdef object cell
 04058:     cdef PyArrayObject* arr
+04059:     cdef bint nested = False
  __pyx_v_nested = 0;
+04060:     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, 4060, __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, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4060, __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;
+04061:     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, 4061, __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, 4061, __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, 4061, __pyx_L1_error)
          #endif
          if (__pyx_t_4 >= __pyx_temp) break;
        }
        __pyx_t_2 = __Pyx_PyList_GET_ITEM_REF(__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, 4061, __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, 4061, __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, 4061, __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;
+04062:         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) {
/* … */
    }
+04063:             continue
      goto __pyx_L3_continue;
+04064:         if not PyArray_CheckExact(<PyObject*>cell):
    __pyx_t_6 = (!PyArray_CheckExact(((PyObject *)__pyx_v_cell)));

    if (unlikely(__pyx_t_6)) {
/* … */
    }
+04065:             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, 4065, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
+04066:                 QuestDBErrorCode.BadDataFrame,
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4066, __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, 4066, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+04067:                 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, 4067, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
/* … */
      __pyx_t_13 = 88;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12[3]);
      #endif
      __pyx_t_14 = 0;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_14 |= __Pyx_PyUnicode_KIND_04(__pyx_t_12[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_12[3]);
      #endif
      __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_12, 5, __pyx_t_13, __pyx_t_14);
      if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4067, __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_15 = 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_15 = 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_15, (3-__pyx_t_15) | (__pyx_t_15*__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, 4065, __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, 4065, __pyx_L1_error)
 04068:                 f'every non-null cell to be a numpy array, got '
+04069:                 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, 4069, __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, 4069, __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__3;
+04070:         arr = <PyArrayObject*>cell
    __pyx_v_arr = ((PyArrayObject *)__pyx_v_cell);
+04071:         if PyArray_TYPE(arr) != NPY_DOUBLE:
    __pyx_t_6 = (PyArray_TYPE(__pyx_v_arr) != NPY_DOUBLE);

    if (unlikely(__pyx_t_6)) {
/* … */
    }
+04072:             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, 4072, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
+04073:                 QuestDBErrorCode.ArrayError,
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4073, __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, 4073, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+04074:                 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, 4074, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
/* … */
      __pyx_t_13 = 65;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16[3]);
      #endif
      __pyx_t_14 = 0;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_14 |= __Pyx_PyUnicode_KIND_04(__pyx_t_16[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_16[3]);
      #endif
      __pyx_t_11 = __Pyx_PyUnicode_Join(__pyx_t_16, 4, __pyx_t_13, __pyx_t_14);
      if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4074, __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_15 = 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_15 = 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_15, (3-__pyx_t_15) | (__pyx_t_15*__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, 4072, __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, 4072, __pyx_L1_error)
+04075:                 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, 4075, __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, 4075, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_16[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
      __pyx_t_16[1] = __pyx_t_9;
      __pyx_t_16[2] = __pyx_mstate_global->__pyx_kp_u_Only_float64_numpy_arrays_are_s;
      __pyx_t_16[3] = __pyx_t_8;
+04076:         if PyArray_NDIM(arr) > 1:
    __pyx_t_6 = (PyArray_NDIM(__pyx_v_arr) > 1);

    if (__pyx_t_6) {
/* … */
    }
+04077:             nested = True
      __pyx_v_nested = 1;
+04078:     if not nested:
  __pyx_t_6 = (!__pyx_v_nested);

  if (__pyx_t_6) {
/* … */
  }
+04079:         return _PYARROW.Array.from_pandas(series)
    __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, 4079, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_2 = __pyx_t_10;
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_15 = 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_15, (2-__pyx_t_15) | (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, 4079, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_3;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_3 = 0;
    goto __pyx_L0;
 04080:     # pyarrow cannot convert multi-dimensional ndarray cells directly
 04081:     # ("Can only convert 1-dimensional array values"); nested python
 04082:     # lists infer to the equivalent nested list<...<double>>.
+04083:     return _PYARROW.array([
  __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, 4083, __pyx_L13_error)
    __Pyx_GOTREF(__pyx_t_2);
+04084:         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_9genexpr16__pyx_v_cell));

      if (__pyx_t_6) {
        __Pyx_INCREF(Py_None);
        __pyx_t_1 = Py_None;
      } else {
        __pyx_t_8 = __pyx_9genexpr16__pyx_v_cell;
        __Pyx_INCREF(__pyx_t_8);
        __pyx_t_15 = 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_15, (1-__pyx_t_15) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4084, __pyx_L13_error)
          __Pyx_GOTREF(__pyx_t_7);
        }
        __pyx_t_1 = __pyx_t_7;
        __pyx_t_7 = 0;
      }

      __Pyx_GIVEREF(__pyx_t_1);
      if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_t_2, __pyx_t_1))) __PYX_ERR(0, 4083, __pyx_L13_error)
      __pyx_t_1 = 0;
+04085:         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, 4085, __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, 4085, __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, 4085, __pyx_L13_error)
            #endif
            if (__pyx_t_4 >= __pyx_temp) break;
          }
          __pyx_t_1 = __Pyx_PyList_GET_ITEM_REF(__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, 4085, __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, 4085, __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, 4085, __pyx_L13_error)
            PyErr_Clear();
          }
          break;
        }
      }
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_9genexpr16__pyx_v_cell, __pyx_t_1);
      __pyx_t_1 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_XDECREF(__pyx_9genexpr16__pyx_v_cell); __pyx_9genexpr16__pyx_v_cell = 0;
    goto __pyx_L17_exit_scope;
    __pyx_L13_error:;
    __Pyx_XDECREF(__pyx_9genexpr16__pyx_v_cell); __pyx_9genexpr16__pyx_v_cell = 0;
    goto __pyx_L1_error;
    __pyx_L17_exit_scope:;
  } /* exit inner scope */
  __pyx_t_15 = 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_15, (2-__pyx_t_15) | (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, 4083, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_3;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_3 = 0;
  goto __pyx_L0;
 04086: 
 04087: 
+04088: 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_17);
  __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;
}
 04089:     # Re-export a pandas column as a pyarrow Array: pyarrow infers the
 04090:     # Arrow type (decimal width/scale, timestamp unit, ...) and carries a
 04091:     # validity bitmap for nulls, which the Rust Arrow importer then encodes.
+04092:     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;
  }
+04093:         return _PYARROW.Array.from_pandas(df.iloc[:, col.setup.orig_index])
      __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, 4093, __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, 4093, __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, 4093, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4093, __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, 4093, __pyx_L3_error);
      __Pyx_GIVEREF(__pyx_t_8);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_8) != (0)) __PYX_ERR(0, 4093, __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, 4093, __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, 4093, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __pyx_r = __pyx_t_4;
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      __pyx_t_4 = 0;
      goto __pyx_L7_try_return;
+04094:     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, 4094, __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_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_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_17); __pyx_t_17 = 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_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_11 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_19 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
          }
          __Pyx_XGIVEREF(__pyx_t_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_11; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19;
          goto __pyx_L5_except_error;
        }
      }
    }
    goto __pyx_L5_except_error;
+04095:         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, 4095, __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, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4095, __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;
+04096:         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, 4096, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_7);
+04097:             QuestDBErrorCode.BadDataFrame,
        __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4097, __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, 4097, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_13);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+04098:             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, 4098, __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, 4098, __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__2;
        __pyx_t_15[3] = __pyx_t_14;
        __pyx_t_16 = 13;
        #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
        __pyx_t_16 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15[3]);
        #endif
        __pyx_t_11 = 0;
        #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
        __pyx_t_11 |= __Pyx_PyUnicode_KIND_04(__pyx_t_15[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_15[3]);
        #endif
        __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_15, 4, __pyx_t_16, __pyx_t_11);
        if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4098, __pyx_L14_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_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_17};
          __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_17); __pyx_t_17 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4096, __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, 4096, __pyx_L14_error)
      }
 04099: 
 04100: 
+04101: 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;
}
 04102:         object df,
 04103:         dataframe_plan_t* plan) except -1:
 04104:     # Some column shapes have no contiguous native buffer the columnar wire
 04105:     # can emit directly. Re-export each as an Arrow array and let the Rust
 04106:     # Arrow importer classify it — the same route the all-Arrow capsule path
 04107:     # takes:
 04108:     #   - object-dtype numpy-array cells -> list<double> (ARRAY(DOUBLE));
 04109:     #   - object-dtype Decimal -> DECIMAL (width/scale inferred);
 04110:     #   - datetime64[ns] timestamp fields carrying NaT, whose INT64_MIN null
 04111:     #     sentinel the zero-copy ns->us path would corrupt into a 1677 value.
 04112:     cdef size_t col_index
 04113:     cdef col_t* col
 04114:     cdef ArrowArray* chunk
 04115:     cdef object arrow_array
+04116:     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;
+04117:         col = &plan.cols.d[col_index]
    __pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_col_index]));
+04118:         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;
    }
+04119:             _dataframe_require_pyarrow()
      __pyx_t_5 = __pyx_f_7questdb_7_client__dataframe_require_pyarrow(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4119, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+04120:             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, 4120, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_XDECREF_SET(__pyx_v_arrow_array, __pyx_t_5);
      __pyx_t_5 = 0;
+04121:         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;
    }
+04122:             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, 4122, __pyx_L1_error)
      __pyx_t_6 = (!__pyx_t_4);


      if (__pyx_t_6) {
/* … */
      }
+04123:                 continue
        goto __pyx_L3_continue;
+04124:             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, 4124, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_XDECREF_SET(__pyx_v_arrow_array, __pyx_t_5);
      __pyx_t_5 = 0;
+04125:         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;
    }
+04126:                 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;
    }
+04127:                 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;
    }
 04128:                     col, plan.row_count)
+04129:                 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:;
+04130:             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, 4130, __pyx_L1_error)
      __pyx_t_4 = (!__pyx_t_6);


      if (__pyx_t_4) {
/* … */
      }
+04131:                 continue
        goto __pyx_L3_continue;
+04132:             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, 4132, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_XDECREF_SET(__pyx_v_arrow_array, __pyx_t_5);
      __pyx_t_5 = 0;
 04133:         else:
+04134:             continue
    /*else*/ {
      goto __pyx_L3_continue;
    }
    __pyx_L5:;
+04135:         chunk = &col.setup.chunks.chunks[0]
    __pyx_v_chunk = (&(__pyx_v_col->setup->chunks.chunks[0]));
+04136:         if chunk.release != NULL:
    __pyx_t_4 = (__pyx_v_chunk->release != NULL);

    if (__pyx_t_4) {
/* … */
    }
+04137:             chunk.release(chunk)
      __pyx_v_chunk->release(__pyx_v_chunk);
+04138:         memset(chunk, 0, sizeof(ArrowArray))
    (void)(memset(__pyx_v_chunk, 0, (sizeof(struct ArrowArray))));
+04139:         if col.setup.arrow_schema.release != NULL:
    __pyx_t_4 = (__pyx_v_col->setup->arrow_schema.release != NULL);

    if (__pyx_t_4) {
/* … */
    }
+04140:             col.setup.arrow_schema.release(&col.setup.arrow_schema)
      __pyx_v_col->setup->arrow_schema.release((&__pyx_v_col->setup->arrow_schema));
+04141:         arrow_array._export_to_c(
    __pyx_t_7 = __pyx_v_arrow_array;
    __Pyx_INCREF(__pyx_t_7);
+04142:             <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, 4142, __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, 4142, __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, 4141, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+04143:         col.setup.source = col_source_t.col_source_arrow_passthrough
    __pyx_v_col->setup->source = __pyx_e_7questdb_7_client_col_source_arrow_passthrough;
+04144:         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:;
  }

 04145: 
 04146: 
+04147: 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;
}
 04148:     return (
+04149:         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;
+04150:         source == col_source_t.col_source_int_pyobj or
    case __pyx_e_7questdb_7_client_col_source_float_pyobj:
+04151:         source == col_source_t.col_source_float_pyobj or
    case __pyx_e_7questdb_7_client_col_source_bool_pyobj:
+04152:         source == col_source_t.col_source_bool_pyobj or
    case __pyx_e_7questdb_7_client_col_source_uuid_pyobj:
+04153:         source == col_source_t.col_source_uuid_pyobj or
    case __pyx_e_7questdb_7_client_col_source_ipv4_pyobj:
+04154:         source == col_source_t.col_source_ipv4_pyobj or
    case __pyx_e_7questdb_7_client_col_source_datetime_pyobj:
+04155:         source == col_source_t.col_source_datetime_pyobj or
    case __pyx_e_7questdb_7_client_col_source_bytes_pyobj:
 04156:         source == col_source_t.col_source_bytes_pyobj)
 04157: 
 04158: 
+04159: 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 */
}
+04160:     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))));
 04161: 
 04162: 
+04163: 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_17);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_XDECREF(__pyx_t_20);
  __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;
}
 04164:         col_t* col,
 04165:         size_t row_count,
 04166:         object df_col_name) except NULL:
 04167:     """
 04168:     Walk a PyObject column once and produce Arrow-Utf8-shaped buffers
 04169:     (int32 offsets + uint8 bytes + LSB-packed validity). Encoding uses
 04170:     CPython's `PyUnicode_AsUTF8AndSize`, which rejects lone surrogates,
 04171:     so every emitted buffer is valid UTF-8.
 04172:     """
+04173:     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))));
+04174:     if b == NULL:
  __pyx_t_1 = (__pyx_v_b == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+04175:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 4175, __pyx_L1_error)
+04176:     b.row_count = row_count
  __pyx_v_b->row_count = __pyx_v_row_count;
 04177: 
+04178:     cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
  __pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
 04179:     cdef PyObject* cell
 04180:     # Owns the cell for as long as `cell` points at it. Code the cell
 04181:     # runs while it is read, such as a `__class__` lookup inside
 04182:     # `isinstance` or a property, can replace it in the frame's array
 04183:     # and so drop the array's reference to it.
 04184:     cdef object cell_ref
 04185:     cdef size_t i
 04186:     cdef Py_ssize_t utf8_len
 04187:     cdef const char* utf8_buf
+04188:     cdef size_t validity_bytes = (row_count + 7) // 8
  __pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
+04189:     cdef size_t bytes_cap = 16
  __pyx_v_bytes_cap = 16;
 04190:     cdef uint8_t* new_bytes
+04191:     cdef size_t bytes_used = 0
  __pyx_v_bytes_used = 0;
 04192: 
+04193:     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_17); __pyx_t_17 = 0;
    __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
    __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 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:;
  }
+04194:         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))));
+04195:         if b.str_offsets == NULL:
      __pyx_t_1 = (__pyx_v_b->str_offsets == NULL);

      if (unlikely(__pyx_t_1)) {
/* … */
      }
+04196:             raise MemoryError()
        PyErr_NoMemory(); __PYX_ERR(0, 4196, __pyx_L4_error)
+04197:         if validity_bytes > 0:
      __pyx_t_1 = (__pyx_v_validity_bytes > 0);

      if (__pyx_t_1) {
/* … */
      }
+04198:             b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
        __pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+04199:             if b.validity == NULL:
        __pyx_t_1 = (__pyx_v_b->validity == NULL);

        if (unlikely(__pyx_t_1)) {
/* … */
        }
+04200:                 raise MemoryError()
          PyErr_NoMemory(); __PYX_ERR(0, 4200, __pyx_L4_error)
+04201:         b.str_bytes = <uint8_t*>malloc(bytes_cap)
      __pyx_v_b->str_bytes = ((uint8_t *)malloc(__pyx_v_bytes_cap));
+04202:         if b.str_bytes == NULL:
      __pyx_t_1 = (__pyx_v_b->str_bytes == NULL);

      if (unlikely(__pyx_t_1)) {
/* … */
      }
+04203:             raise MemoryError()
        PyErr_NoMemory(); __PYX_ERR(0, 4203, __pyx_L4_error)
 04204: 
+04205:         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;
+04206:             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;
+04207:             cell = <PyObject*>cell_ref
        __pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+04208:             if PyUnicode_CheckExact(cell):
        __pyx_t_1 = PyUnicode_CheckExact(__pyx_v_cell);

        if (__pyx_t_1) {
/* … */
          goto __pyx_L16;
        }
+04209:                 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, 4209, __pyx_L4_error)
          __pyx_v_utf8_buf = __pyx_t_9;
+04210:                 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)) {
/* … */
          }
+04211:                     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, 4211, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_11);
+04212:                         QuestDBErrorCode.BadDataFrame,
            __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4212, __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, 4212, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_13);
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+04213:                         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, 4213, __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 = 94;
            #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
            __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14[1]);
            #endif
            __pyx_t_16 = 0;
            #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
            __pyx_t_16 |= __Pyx_PyUnicode_KIND_04(__pyx_t_14[1]);
            #endif
            __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_14, 3, __pyx_t_15, __pyx_t_16);
            if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4213, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_17);
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            __pyx_t_18 = 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_18 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[3] = {__pyx_t_10, __pyx_t_13, __pyx_t_17};
              __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_18, (3-__pyx_t_18) | (__pyx_t_18*__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_17); __pyx_t_17 = 0;
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4211, __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, 4211, __pyx_L4_error)
 04214:                         'bytes exceeds the QWP wire varchar offset table '
 04215:                         'limit (2 GiB).')
+04216:                 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;
+04217:                     bytes_cap *= 2
            __pyx_v_bytes_cap = (__pyx_v_bytes_cap * 2);
+04218:                     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));
+04219:                     if new_bytes == NULL:
            __pyx_t_1 = (__pyx_v_new_bytes == NULL);

            if (unlikely(__pyx_t_1)) {
/* … */
            }
+04220:                         raise MemoryError()
              PyErr_NoMemory(); __PYX_ERR(0, 4220, __pyx_L4_error)
+04221:                     b.str_bytes = new_bytes
            __pyx_v_b->str_bytes = __pyx_v_new_bytes;
          }
+04222:                 if utf8_len > 0:
          __pyx_t_1 = (__pyx_v_utf8_len > 0);

          if (__pyx_t_1) {
/* … */
          }
+04223:                     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)));
+04224:                 bytes_used += <size_t>utf8_len
          __pyx_v_bytes_used = (__pyx_v_bytes_used + ((size_t)__pyx_v_utf8_len));
+04225:                 b.str_offsets[i + 1] = <int32_t>bytes_used
          (__pyx_v_b->str_offsets[(__pyx_v_i + 1)]) = ((int32_t)__pyx_v_bytes_used);
+04226:                 if b.validity != NULL:
          __pyx_t_1 = (__pyx_v_b->validity != NULL);

          if (__pyx_t_1) {
/* … */
          }
+04227:                     _pyobj_set_validity_bit(b.validity, i)
            __pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
+04228:             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;
        }
+04229:                 b.str_offsets[i + 1] = <int32_t>bytes_used
          (__pyx_v_b->str_offsets[(__pyx_v_i + 1)]) = ((int32_t)__pyx_v_bytes_used);
+04230:                 b.has_nulls = True
          __pyx_v_b->has_nulls = 1;
 04231:             else:
+04232:                 raise QuestDBError(
        /*else*/ {
          __pyx_t_11 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4232, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_17);
+04233:                     QuestDBErrorCode.BadDataFrame,
          __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4233, __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, 4233, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+04234:                     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, 4234, __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, 4234, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_12);
/* … */
          __pyx_t_15 = 40;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_21[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_21[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_21[5]);
          #endif
          __pyx_t_16 = 0;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_16 |= __Pyx_PyUnicode_KIND_04(__pyx_t_21[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_21[5]);
          #endif
          __pyx_t_19 = __Pyx_PyUnicode_Join(__pyx_t_21, 7, __pyx_t_15, __pyx_t_16);
          if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4234, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_19);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
          __pyx_t_18 = 1;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_17))) {
            __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_17);
            assert(__pyx_t_11);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_17);
            __Pyx_INCREF(__pyx_t_11);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_17, __pyx__function);
            __pyx_t_18 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_11, __pyx_t_10, __pyx_t_19};
            __pyx_t_8 = __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_11); __pyx_t_11 = 0;
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
            __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
            if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4232, __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, 4232, __pyx_L4_error)
        }
        __pyx_L16:;
      }

+04235:                     f'got {_fqn(type(<object>cell))}.')
          __pyx_t_19 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4235, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_19);
          __pyx_t_20 = __Pyx_PyUnicode_Unicode(__pyx_t_19); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 4235, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_20);
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
          __pyx_t_21[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
          __pyx_t_21[1] = __pyx_t_13;
          __pyx_t_21[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
          __pyx_t_21[3] = __pyx_t_12;
          __pyx_t_21[4] = __pyx_mstate_global->__pyx_kp_u_expected_str_got;
          __pyx_t_21[5] = __pyx_t_20;
          __pyx_t_21[6] = __pyx_mstate_global->__pyx_kp_u__3;
 04236: 
+04237:         b.str_bytes_len = bytes_used
      __pyx_v_b->str_bytes_len = __pyx_v_bytes_used;
 04238: 
 04239:         # If the column turned out to be all-valid, drop the bitmap so
 04240:         # the FFI takes the no-validity hot path.
+04241:         if not b.has_nulls and b.validity != NULL:
      __pyx_t_22 = (!__pyx_v_b->has_nulls);

      if (__pyx_t_22) {

      } else {

        __pyx_t_1 = __pyx_t_22;

        goto __pyx_L24_bool_binop_done;
      }
      __pyx_t_22 = (__pyx_v_b->validity != NULL);


      __pyx_t_1 = __pyx_t_22;

      __pyx_L24_bool_binop_done:;
      if (__pyx_t_1) {
/* … */
      }
+04242:             free(b.validity)
        free(__pyx_v_b->validity);
+04243:             b.validity = NULL
        __pyx_v_b->validity = NULL;
+04244:     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_17, &__pyx_t_19) < 0) __PYX_ERR(0, 4244, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_17);
      __Pyx_XGOTREF(__pyx_t_19);
+04245:         pyobj_built_free(b)
      __pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+04246:         raise
      __Pyx_GIVEREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_17);
      __Pyx_XGIVEREF(__pyx_t_19);
      __Pyx_ErrRestoreWithState(__pyx_t_8, __pyx_t_17, __pyx_t_19);
      __pyx_t_8 = 0;  __pyx_t_17 = 0;  __pyx_t_19 = 0; 
      __PYX_ERR(0, 4246, __pyx_L6_except_error)
    }
 04247: 
+04248:     return b
  {

    __pyx_r = __pyx_v_b;
  }
  goto __pyx_L0;
 04249: 
 04250: 
+04251: 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_21);
  __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;
}
 04252:         col_t* col,
 04253:         size_t row_count,
 04254:         object df_col_name) except NULL:
 04255:     """
 04256:     Walk a PyObject int column once and produce a contiguous buffer +
 04257:     LSB-packed validity bitmap. Null cells leave the slot at 0 with the
 04258:     validity bit cleared.
 04259: 
 04260:     The slot is an int64 unless an IPV4 or CHAR round-trip claim
 04261:     narrows it to the 32- or 16-bit unsigned width that wire type
 04262:     needs; a GEOHASH claim keeps the int64 slot and carries its
 04263:     precision separately. Each is stored through its own pointer type,
 04264:     so the buffer holds native-order values whichever width it is.
 04265: 
 04266:     Null detection: ``None``, ``pd.NA``, and ``float('nan')`` all count
 04267:     as null — the NaN-as-null rule matches the row-path behaviour
 04268:     (`_dataframe_is_null_pyobj` in dataframe.pxi). A non-NaN float in
 04269:     an int-sniffed column raises ``QuestDBError`` with the row index;
 04270:     we accept the asymmetry because column-wide sniff has already
 04271:     locked the source type from the first non-null cell.
 04272:     """
+04273:     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))));
+04274:     if b == NULL:
  __pyx_t_1 = (__pyx_v_b == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+04275:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 4275, __pyx_L1_error)
+04276:     b.row_count = row_count
  __pyx_v_b->row_count = __pyx_v_row_count;
 04277: 
+04278:     cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
  __pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
 04279:     cdef PyObject* cell
 04280:     # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
 04281:     cdef object cell_ref
+04282:     cdef uint8_t* values = NULL
  __pyx_v_values = NULL;
+04283:     cdef size_t validity_bytes = (row_count + 7) // 8
  __pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
 04284:     cdef size_t i
 04285:     cdef int64_t value
+04286:     cdef int overflow = 0
  __pyx_v_overflow = 0;
+04287:     cdef size_t elem_size = 8
  __pyx_v_elem_size = 8;
+04288:     cdef int64_t narrow_max = 0
  __pyx_v_narrow_max = 0;
+04289:     cdef str narrow_type = None
  __Pyx_INCREF(Py_None);
  __pyx_v_narrow_type = ((PyObject*)Py_None);
 04290: 
+04291:     if col.setup.has_override:
  if (__pyx_v_col->setup->has_override) {
/* … */
  }
+04292:         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:
+04293:             elem_size = 4
      __pyx_v_elem_size = 4;
+04294:             narrow_max = 0xFFFFFFFF
      __pyx_v_narrow_max = 0xFFFFFFFF;
+04295:             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);
+04296:         elif col.setup.override_dtype == qwp_numpy_dtype.qwp_numpy_u16_char:
      break;
      default: break;
    }
+04297:             elem_size = 2
      __pyx_v_elem_size = 2;
+04298:             narrow_max = 0xFFFF
      __pyx_v_narrow_max = 0xFFFF;
+04299:             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);
 04300:         # GEOHASH has no per-value range check here, by design. That is
 04301:         # the documented bulk GEOHASH contract (`QuestDB.dataframe`,
 04302:         # docs/sender.rst): every DataFrame input shape -- NumPy, Arrow
 04303:         # and this object route -- takes a value as a raw bit pattern,
 04304:         # checks only the precision and the carrier width, and leaves
 04305:         # the values to the caller. The native encoder follows the same
 04306:         # rule and writes the low ceil(precision / 8) bytes, so a value
 04307:         # with bits above the precision lands as a different GEOHASH or
 04308:         # as NULL.
 04309:         #
 04310:         # The check would cost nothing in this per-cell loop. It is left
 04311:         # out so that one frame gets one answer: a masked pandas column
 04312:         # arrives here as Python ints, and plain `to_pandas()` returns a
 04313:         # GEOHASH column as a masked column when it holds a null and as
 04314:         # a NumPy column when it does not. A check on this route alone
 04315:         # would refuse an edited frame whose column holds a null and
 04316:         # write the same frame without one. IPV4 and CHAR get a range
 04317:         # check because their NumPy and Arrow carriers, uint32 and
 04318:         # uint16, cannot hold an out-of-range value either, so it gives
 04319:         # this route the same range as theirs.
 04320:         #
 04321:         # `test_roundtrip_claim_forwards_arbitrary_geohash_values` pins
 04322:         # this on every shape. Changing it changes the public contract,
 04323:         # docs and CHANGELOG included; it is not a local fix.
 04324: 
+04325:     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_21); __pyx_t_21 = 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:;
  }
+04326:         values = <uint8_t*>calloc(
      __pyx_v_values = ((uint8_t *)calloc(__pyx_t_5, (sizeof(uint8_t))));

+04327:             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;
      }

 04328:             sizeof(uint8_t))
+04329:         if values == NULL:
      __pyx_t_1 = (__pyx_v_values == NULL);

      if (unlikely(__pyx_t_1)) {
/* … */
      }
+04330:             raise MemoryError()
        PyErr_NoMemory(); __PYX_ERR(0, 4330, __pyx_L5_error)
+04331:         b.data = <void*>values
      __pyx_v_b->data = ((void *)__pyx_v_values);
+04332:         if validity_bytes > 0:
      __pyx_t_1 = (__pyx_v_validity_bytes > 0);

      if (__pyx_t_1) {
/* … */
      }
+04333:             b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
        __pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+04334:             if b.validity == NULL:
        __pyx_t_1 = (__pyx_v_b->validity == NULL);

        if (unlikely(__pyx_t_1)) {
/* … */
        }
+04335:                 raise MemoryError()
          PyErr_NoMemory(); __PYX_ERR(0, 4335, __pyx_L5_error)
+04336:         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;
+04337:             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;
+04338:             cell = <PyObject*>cell_ref
        __pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
 04339:             # PyBool_Check goes BEFORE PyLong_CheckExact because Python
 04340:             # bools are subclasses of int and PyLong_CheckExact returns
 04341:             # false for them; treat them as int (matches row-path).
+04342:             if PyBool_Check(cell):
        __pyx_t_1 = PyBool_Check(__pyx_v_cell);

        if (__pyx_t_1) {
/* … */
          goto __pyx_L16;
        }
+04343:                 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;
+04344:             elif PyLong_CheckExact(cell):
        __pyx_t_1 = PyLong_CheckExact(__pyx_v_cell);

        if (__pyx_t_1) {
/* … */
          goto __pyx_L16;
        }
+04345:                 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, 4345, __pyx_L5_error)
          __pyx_v_value = ((int64_t)__pyx_t_10);

 04346:                     <object>cell, &overflow)
+04347:                 if overflow != 0:
          __pyx_t_1 = (__pyx_v_overflow != 0);

          if (__pyx_t_1) {
/* … */
          }
+04348:                     if narrow_type is not None:
            __pyx_t_1 = (__pyx_v_narrow_type != ((PyObject*)Py_None));
            if (unlikely(__pyx_t_1)) {
/* … */
            }
+04349:                         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, 4349, __pyx_L5_error)
              __Pyx_GOTREF(__pyx_t_12);
+04350:                             QuestDBErrorCode.BadDataFrame,
              __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4350, __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, 4350, __pyx_L5_error)
              __Pyx_GOTREF(__pyx_t_14);
              __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+04351:                             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, 4351, __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, 4351, __pyx_L5_error)
              __Pyx_GOTREF(__pyx_t_15);
/* … */
              __pyx_t_19 = 56;
              #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
              for (Py_ssize_t i=1; i <= 7; i += 2) {
                Py_ssize_t l = __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18[i]);
                __pyx_t_19 += l;
              }
              #endif
              __pyx_t_20 = 0;
              #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
              __pyx_t_20 |= __Pyx_PyUnicode_KIND_04(__pyx_t_18[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_18[5]);
              #endif
              __pyx_t_21 = __Pyx_PyUnicode_Join(__pyx_t_18, 9, __pyx_t_19, __pyx_t_20);
              if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 4351, __pyx_L5_error)
              __Pyx_GOTREF(__pyx_t_21);
              __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_22 = 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_22 = 0;
              }
              #endif
              {
                PyObject *__pyx_callargs[3] = {__pyx_t_11, __pyx_t_14, __pyx_t_21};
                __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_12, __pyx_callargs+__pyx_t_22, (3-__pyx_t_22) | (__pyx_t_22*__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_21); __pyx_t_21 = 0;
                __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
                if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4349, __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, 4349, __pyx_L5_error)
+04352:                             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, 4352, __pyx_L5_error)
              __Pyx_GOTREF(__pyx_t_16);
+04353:                             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, 4353, __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__2;
              __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__3;
+04354:                     if overflow < 0:
            __pyx_t_1 = (__pyx_v_overflow < 0);

            if (unlikely(__pyx_t_1)) {
/* … */
            }
+04355:                         raise QuestDBError(
              __pyx_t_12 = NULL;
              __Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 4355, __pyx_L5_error)
              __Pyx_GOTREF(__pyx_t_21);
+04356:                             QuestDBErrorCode.BadDataFrame,
              __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4356, __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, 4356, __pyx_L5_error)
              __Pyx_GOTREF(__pyx_t_11);
              __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+04357:                             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, 4357, __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, 4357, __pyx_L5_error)
              __Pyx_GOTREF(__pyx_t_17);
              __pyx_t_23[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
              __pyx_t_23[1] = __pyx_t_14;
              __pyx_t_23[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
              __pyx_t_23[3] = __pyx_t_17;
              __pyx_t_23[4] = __pyx_mstate_global->__pyx_kp_u_integer_is_below_the_minimum_fo;
              __pyx_t_19 = 131;
              #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
              __pyx_t_19 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_23[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_23[3]);
              #endif
              __pyx_t_20 = 0;
              #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
              __pyx_t_20 |= __Pyx_PyUnicode_KIND_04(__pyx_t_23[1]);
              #endif
              __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_23, 5, __pyx_t_19, __pyx_t_20);
              if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4357, __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_22 = 1;
              #if CYTHON_UNPACK_METHODS
              if (unlikely(PyMethod_Check(__pyx_t_21))) {
                __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_21);
                assert(__pyx_t_12);
                PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_21);
                __Pyx_INCREF(__pyx_t_12);
                __Pyx_INCREF(__pyx__function);
                __Pyx_DECREF_SET(__pyx_t_21, __pyx__function);
                __pyx_t_22 = 0;
              }
              #endif
              {
                PyObject *__pyx_callargs[3] = {__pyx_t_12, __pyx_t_11, __pyx_t_16};
                __pyx_t_8 = __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_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_21); __pyx_t_21 = 0;
                if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4355, __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, 4355, __pyx_L5_error)
 04358:                             f'integer is below the minimum for a LONG '
 04359:                             f'column (-2**63). LONG256 is unsigned and '
 04360:                             f'cannot store negative values.')
+04361:                     raise QuestDBError(
            __pyx_t_21 = NULL;
            __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4361, __pyx_L5_error)
            __Pyx_GOTREF(__pyx_t_16);
+04362:                         QuestDBErrorCode.BadDataFrame,
            __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4362, __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, 4362, __pyx_L5_error)
            __Pyx_GOTREF(__pyx_t_12);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+04363:                         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, 4363, __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, 4363, __pyx_L5_error)
            __Pyx_GOTREF(__pyx_t_17);
/* … */
            __pyx_t_19 = 224;
            #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
            __pyx_t_19 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_24[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_24[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_24[5]);
            #endif
            __pyx_t_20 = 0;
            #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
            __pyx_t_20 |= __Pyx_PyUnicode_KIND_04(__pyx_t_24[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_24[5]);
            #endif
            __pyx_t_15 = __Pyx_PyUnicode_Join(__pyx_t_24, 7, __pyx_t_19, __pyx_t_20);
            if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4363, __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_22 = 1;
            #if CYTHON_UNPACK_METHODS
            if (unlikely(PyMethod_Check(__pyx_t_16))) {
              __pyx_t_21 = PyMethod_GET_SELF(__pyx_t_16);
              assert(__pyx_t_21);
              PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_16);
              __Pyx_INCREF(__pyx_t_21);
              __Pyx_INCREF(__pyx__function);
              __Pyx_DECREF_SET(__pyx_t_16, __pyx__function);
              __pyx_t_22 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[3] = {__pyx_t_21, __pyx_t_12, __pyx_t_15};
              __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_21); __pyx_t_21 = 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, 4361, __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, 4361, __pyx_L5_error)
 04364:                         f'out of range for a LONG column '
 04365:                         f'(-2**63 .. 2**63-1). A 256-bit value needs a '
 04366:                         f'LONG256 column, which this column claims with '
 04367:                         f"df.attrs['questdb'] = {{'version': 1, "
+04368:                         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, 4368, __pyx_L5_error)
            __Pyx_GOTREF(__pyx_t_14);
            __pyx_t_24[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
            __pyx_t_24[1] = __pyx_t_11;
            __pyx_t_24[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
            __pyx_t_24[3] = __pyx_t_17;
            __pyx_t_24[4] = __pyx_mstate_global->__pyx_kp_u_integer_out_of_range_for_a_LONG_2;
            __pyx_t_24[5] = __pyx_t_14;
            __pyx_t_24[6] = __pyx_mstate_global->__pyx_kp_u_kind_long256;
 04369:                         f"{{'kind': 'long256'}}}}}}.")
+04370:             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)) {
/* … */
        }
+04371:                 b.has_nulls = True
          __pyx_v_b->has_nulls = 1;
+04372:                 continue
          goto __pyx_L14_continue;
 04373:             else:
+04374:                 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, 4374, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_15);
+04375:                     QuestDBErrorCode.BadDataFrame,
          __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4375, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_21 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 4375, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_21);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+04376:                     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, 4376, __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, 4376, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_14);
/* … */
          __pyx_t_19 = 40;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_19 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_24[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_24[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_24[5]);
          #endif
          __pyx_t_20 = 0;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_20 |= __Pyx_PyUnicode_KIND_04(__pyx_t_24[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_24[5]);
          #endif
          __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_24, 7, __pyx_t_19, __pyx_t_20);
          if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4376, __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_22 = 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_22 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_16, __pyx_t_21, __pyx_t_17};
            __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_15, __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_21); __pyx_t_21 = 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, 4374, __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, 4374, __pyx_L5_error)
        }
        __pyx_L16:;
+04377:                     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, 4377, __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, 4377, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __pyx_t_24[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
          __pyx_t_24[1] = __pyx_t_12;
          __pyx_t_24[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
          __pyx_t_24[3] = __pyx_t_14;
          __pyx_t_24[4] = __pyx_mstate_global->__pyx_kp_u_expected_int_got;
          __pyx_t_24[5] = __pyx_t_11;
          __pyx_t_24[6] = __pyx_mstate_global->__pyx_kp_u__3;
 04378: 
+04379:             if narrow_type is not None and (value < 0 or value > narrow_max):
        __pyx_t_25 = (__pyx_v_narrow_type != ((PyObject*)Py_None));
        if (__pyx_t_25) {

        } else {

          __pyx_t_1 = __pyx_t_25;

          goto __pyx_L21_bool_binop_done;
        }
        __pyx_t_25 = (__pyx_v_value < 0);

        if (!__pyx_t_25) {

        } else {

          __pyx_t_1 = __pyx_t_25;

          goto __pyx_L21_bool_binop_done;
        }
        __pyx_t_25 = (__pyx_v_value > __pyx_v_narrow_max);


        __pyx_t_1 = __pyx_t_25;

        __pyx_L21_bool_binop_done:;
        if (unlikely(__pyx_t_1)) {
/* … */
        }
+04380:                 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, 4380, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_17);
+04381:                     QuestDBErrorCode.BadDataFrame,
          __Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 4381, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_21);
          __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4381, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
+04382:                     f'Bad column {df_col_name!r} at row {i}: '
          __pyx_t_21 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 4382, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_21);
          __pyx_t_11 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4382, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_11);
/* … */
          __pyx_t_19 = 56;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          for (Py_ssize_t i=1; i <= 7; i += 2) {
            Py_ssize_t l = __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18[i]);
            __pyx_t_19 += l;
          }
          #endif
          __pyx_t_20 = 0;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_20 |= __Pyx_PyUnicode_KIND_04(__pyx_t_18[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_18[5]);
          #endif
          __pyx_t_13 = __Pyx_PyUnicode_Join(__pyx_t_18, 9, __pyx_t_19, __pyx_t_20);
          if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4382, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 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_22 = 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_22 = 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_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_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, 4380, __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, 4380, __pyx_L5_error)
+04383:                     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, 4383, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_14);
+04384:                     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, 4384, __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_21;
          __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__2;
          __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__3;
+04385:             if elem_size == 4:
        switch (__pyx_v_elem_size) {
          case 4:
/* … */
          break;
          case 2:
+04386:                 (<uint32_t*>values)[i] = <uint32_t>value
          (((uint32_t *)__pyx_v_values)[__pyx_v_i]) = ((uint32_t)__pyx_v_value);
+04387:             elif elem_size == 2:
          break;
          default:
+04388:                 (<uint16_t*>values)[i] = <uint16_t>value
          (((uint16_t *)__pyx_v_values)[__pyx_v_i]) = ((uint16_t)__pyx_v_value);
 04389:             else:
+04390:                 (<int64_t*>values)[i] = value
          (((int64_t *)__pyx_v_values)[__pyx_v_i]) = __pyx_v_value;
          break;
        }
+04391:             if b.validity != NULL:
        __pyx_t_1 = (__pyx_v_b->validity != NULL);

        if (__pyx_t_1) {
/* … */
        }
        __pyx_L14_continue:;
      }

+04392:                 _pyobj_set_validity_bit(b.validity, i)
          __pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
 04393: 
+04394:         if not b.has_nulls and b.validity != NULL:
      __pyx_t_25 = (!__pyx_v_b->has_nulls);

      if (__pyx_t_25) {

      } else {

        __pyx_t_1 = __pyx_t_25;

        goto __pyx_L26_bool_binop_done;
      }
      __pyx_t_25 = (__pyx_v_b->validity != NULL);


      __pyx_t_1 = __pyx_t_25;

      __pyx_L26_bool_binop_done:;
      if (__pyx_t_1) {
/* … */
      }
+04395:             free(b.validity)
        free(__pyx_v_b->validity);
+04396:             b.validity = NULL
        __pyx_v_b->validity = NULL;
+04397:     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, 4397, __pyx_L7_except_error)
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_17);
      __Pyx_XGOTREF(__pyx_t_13);
+04398:         pyobj_built_free(b)
      __pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+04399:         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, 4399, __pyx_L7_except_error)
    }
 04400: 
+04401:     return b
  {

    __pyx_r = __pyx_v_b;
  }
  goto __pyx_L0;
 04402: 
 04403: 
+04404: 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);
 04405: 
 04406: 
+04407: 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_18);
  __Pyx_XDECREF(__pyx_t_21);
  __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;
}
 04408:         col_t* col,
 04409:         size_t row_count,
 04410:         object df_col_name) except NULL:
 04411:     """
 04412:     Walk a PyObject int column claimed as LONG256 and produce 32 bytes
 04413:     per row + LSB-packed validity bitmap.
 04414: 
 04415:     ``qwp_numpy_s32`` puts the row on the wire verbatim, and the wire
 04416:     order for LONG256 is little-endian — the same order
 04417:     ``QueryResult.to_pandas()`` read the integer out of, so a value that
 04418:     came from a query goes back unchanged.
 04419:     """
+04420:     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))));
+04421:     if b == NULL:
  __pyx_t_1 = (__pyx_v_b == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+04422:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 4422, __pyx_L1_error)
+04423:     b.row_count = row_count
  __pyx_v_b->row_count = __pyx_v_row_count;
 04424: 
+04425:     cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
  __pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
 04426:     cdef PyObject* cell
 04427:     # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
 04428:     cdef object cell_ref
+04429:     cdef uint8_t* buf = NULL
  __pyx_v_buf = NULL;
+04430:     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;
+04431:     cdef size_t validity_bytes = (row_count + 7) // 8
  __pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
 04432:     cdef size_t i
 04433:     cdef object py_cell
 04434:     cdef bytes le_bytes
 04435:     # Called unbound so that an `int` subclass overriding `to_bytes`
 04436:     # cannot hand back something other than the 32 bytes the column
 04437:     # write copies.
+04438:     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, 4438, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_int_to_bytes = __pyx_t_3;
  __pyx_t_3 = 0;
 04439: 
+04440:     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_18); __pyx_t_18 = 0;
    __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 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:;
  }
+04441:         buf = <uint8_t*>calloc(buf_bytes, sizeof(uint8_t))
      __pyx_v_buf = ((uint8_t *)calloc(__pyx_v_buf_bytes, (sizeof(uint8_t))));
+04442:         if buf == NULL:
      __pyx_t_1 = (__pyx_v_buf == NULL);

      if (unlikely(__pyx_t_1)) {
/* … */
      }
+04443:             raise MemoryError()
        PyErr_NoMemory(); __PYX_ERR(0, 4443, __pyx_L4_error)
+04444:         b.data = <void*>buf
      __pyx_v_b->data = ((void *)__pyx_v_buf);
+04445:         if validity_bytes > 0:
      __pyx_t_1 = (__pyx_v_validity_bytes > 0);

      if (__pyx_t_1) {
/* … */
      }
+04446:             b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
        __pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+04447:             if b.validity == NULL:
        __pyx_t_1 = (__pyx_v_b->validity == NULL);

        if (unlikely(__pyx_t_1)) {
/* … */
        }
+04448:                 raise MemoryError()
          PyErr_NoMemory(); __PYX_ERR(0, 4448, __pyx_L4_error)
+04449:         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;
+04450:             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;
+04451:             cell = <PyObject*>cell_ref
        __pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+04452:             if PyLong_CheckExact(cell):
        __pyx_t_1 = PyLong_CheckExact(__pyx_v_cell);

        if (__pyx_t_1) {
/* … */
          goto __pyx_L15;
        }
+04453:                 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;
+04454:                 if py_cell < 0 or py_cell >= _LONG256_LIMIT:
          __pyx_t_9 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_py_cell, __pyx_mstate_global->__pyx_int_0, Py_LT); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 4454, __pyx_L4_error)
          if (!__pyx_t_9) {

          } else {

            __pyx_t_1 = __pyx_t_9;

            goto __pyx_L17_bool_binop_done;
          }
          __pyx_t_9 = __Pyx_PyObject_CompareBoolGe_object_object(__pyx_v_py_cell, __pyx_v_7questdb_7_client__LONG256_LIMIT, Py_GE); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 4454, __pyx_L4_error)

          __pyx_t_1 = __pyx_t_9;

          __pyx_L17_bool_binop_done:;
          if (unlikely(__pyx_t_1)) {
/* … */
          }
+04455:                     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, 4455, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_11);
+04456:                         QuestDBErrorCode.BadDataFrame,
            __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4456, __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, 4456, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_13);
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+04457:                         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, 4457, __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, 4457, __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 = 114;
            #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
            __pyx_t_16 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15[3]);
            #endif
            __pyx_t_17 = 0;
            #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
            __pyx_t_17 |= __Pyx_PyUnicode_KIND_04(__pyx_t_15[1]);
            #endif
            __pyx_t_18 = __Pyx_PyUnicode_Join(__pyx_t_15, 5, __pyx_t_16, __pyx_t_17);
            if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4457, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_18);
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
            __pyx_t_19 = 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_19 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[3] = {__pyx_t_10, __pyx_t_13, __pyx_t_18};
              __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_19, (3-__pyx_t_19) | (__pyx_t_19*__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_18); __pyx_t_18 = 0;
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4455, __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, 4455, __pyx_L4_error)
 04458:                         f'is unsigned and 256 bits wide, so the value '
 04459:                         f'must be in the range 0 <= value < 2**256.')
+04460:                 le_bytes = int_to_bytes(py_cell, 32, 'little')
          __pyx_t_11 = NULL;
          __Pyx_INCREF(__pyx_v_int_to_bytes);
          __pyx_t_18 = __pyx_v_int_to_bytes; 
          __pyx_t_19 = 1;
          #if CYTHON_UNPACK_METHODS
          if (likely(PyMethod_Check(__pyx_t_18))) {
            __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_18);
            assert(__pyx_t_11);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_18);
            __Pyx_INCREF(__pyx_t_11);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_18, __pyx__function);
            __pyx_t_19 = 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_18, __pyx_callargs+__pyx_t_19, (4-__pyx_t_19) | (__pyx_t_19*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
            if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4460, __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, 4460, __pyx_L4_error)
          __Pyx_XDECREF_SET(__pyx_v_le_bytes, ((PyObject*)__pyx_t_3));
          __pyx_t_3 = 0;
+04461:                 memcpy(buf + i * 32, PyBytes_AsString(le_bytes), 32)
          __pyx_t_20 = PyBytes_AsString(__pyx_v_le_bytes); if (unlikely(__pyx_t_20 == ((void *)NULL))) __PYX_ERR(0, 4461, __pyx_L4_error)
          (void)(memcpy((__pyx_v_buf + (__pyx_v_i * 32)), __pyx_t_20, 32));

+04462:                 if b.validity != NULL:
          __pyx_t_1 = (__pyx_v_b->validity != NULL);

          if (__pyx_t_1) {
/* … */
          }
+04463:                     _pyobj_set_validity_bit(b.validity, i)
            __pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
+04464:             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;
        }
+04465:                 b.has_nulls = True
          __pyx_v_b->has_nulls = 1;
 04466:             else:
+04467:                 raise QuestDBError(
        /*else*/ {
          __pyx_t_18 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4467, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_11);
+04468:                     QuestDBErrorCode.BadDataFrame,
          __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4468, __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, 4468, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+04469:                     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, 4469, __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, 4469, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_14);
/* … */
          __pyx_t_16 = 40;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_16 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_22[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_22[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_22[5]);
          #endif
          __pyx_t_17 = 0;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_17 |= __Pyx_PyUnicode_KIND_04(__pyx_t_22[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_22[5]);
          #endif
          __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_22, 7, __pyx_t_16, __pyx_t_17);
          if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4469, __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_21); __pyx_t_21 = 0;
          __pyx_t_19 = 1;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_11))) {
            __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_11);
            assert(__pyx_t_18);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11);
            __Pyx_INCREF(__pyx_t_18);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_11, __pyx__function);
            __pyx_t_19 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_18, __pyx_t_10, __pyx_t_12};
            __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_19, (3-__pyx_t_19) | (__pyx_t_19*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 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, 4467, __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, 4467, __pyx_L4_error)
        }
        __pyx_L15:;
      }

+04470:                     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, 4470, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_21 = __Pyx_PyUnicode_Unicode(__pyx_t_12); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 4470, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_21);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __pyx_t_22[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
          __pyx_t_22[1] = __pyx_t_13;
          __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_21;
          __pyx_t_22[6] = __pyx_mstate_global->__pyx_kp_u__3;
 04471: 
+04472:         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) {
/* … */
      }
+04473:             free(b.validity)
        free(__pyx_v_b->validity);
+04474:             b.validity = NULL
        __pyx_v_b->validity = NULL;
+04475:     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, 4475, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_3);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
+04476:         pyobj_built_free(b)
      __pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+04477:         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, 4477, __pyx_L6_except_error)
    }
 04478: 
+04479:     return b
  {

    __pyx_r = __pyx_v_b;
  }
  goto __pyx_L0;
 04480: 
 04481: 
+04482: 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;
}
 04483:         col_t* col,
 04484:         size_t row_count,
 04485:         object df_col_name) except NULL:
 04486:     """
 04487:     Walk a PyObject float column once and produce a contiguous double
 04488:     buffer + LSB-packed validity bitmap.
 04489:     """
+04490:     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))));
+04491:     if b == NULL:
  __pyx_t_1 = (__pyx_v_b == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+04492:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 4492, __pyx_L1_error)
+04493:     b.row_count = row_count
  __pyx_v_b->row_count = __pyx_v_row_count;
 04494: 
+04495:     cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
  __pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
 04496:     cdef PyObject* cell
 04497:     # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
 04498:     cdef object cell_ref
+04499:     cdef double* values = NULL
  __pyx_v_values = NULL;
+04500:     cdef size_t validity_bytes = (row_count + 7) // 8
  __pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
 04501:     cdef size_t i
 04502:     cdef double value
 04503: 
+04504:     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:;
  }
+04505:         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))));

 04506:                                  sizeof(double))
+04507:         if values == NULL:
      __pyx_t_1 = (__pyx_v_values == NULL);

      if (unlikely(__pyx_t_1)) {
/* … */
      }
+04508:             raise MemoryError()
        PyErr_NoMemory(); __PYX_ERR(0, 4508, __pyx_L4_error)
+04509:         b.data = <void*>values
      __pyx_v_b->data = ((void *)__pyx_v_values);
+04510:         if validity_bytes > 0:
      __pyx_t_1 = (__pyx_v_validity_bytes > 0);

      if (__pyx_t_1) {
/* … */
      }
+04511:             b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
        __pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+04512:             if b.validity == NULL:
        __pyx_t_1 = (__pyx_v_b->validity == NULL);

        if (unlikely(__pyx_t_1)) {
/* … */
        }
+04513:                 raise MemoryError()
          PyErr_NoMemory(); __PYX_ERR(0, 4513, __pyx_L4_error)
+04514:         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;
+04515:             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;
+04516:             cell = <PyObject*>cell_ref
        __pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+04517:             if PyFloat_CheckExact(cell):
        __pyx_t_1 = PyFloat_CheckExact(__pyx_v_cell);

        if (__pyx_t_1) {
/* … */
          goto __pyx_L15;
        }
+04518:                 value = PyFloat_AS_DOUBLE(cell)
          __pyx_v_value = PyFloat_AS_DOUBLE(__pyx_v_cell);
+04519:                 if isnan(value):
          __pyx_t_1 = isnan(__pyx_v_value);

          if (__pyx_t_1) {
/* … */
            goto __pyx_L16;
          }
 04520:                     # pandas NaN-as-null convention matches the row-path.
+04521:                     b.has_nulls = True
            __pyx_v_b->has_nulls = 1;
 04522:                 else:
+04523:                     values[i] = value
          /*else*/ {
            (__pyx_v_values[__pyx_v_i]) = __pyx_v_value;
+04524:                     if b.validity != NULL:
            __pyx_t_1 = (__pyx_v_b->validity != NULL);

            if (__pyx_t_1) {
/* … */
            }
          }
          __pyx_L16:;
+04525:                         _pyobj_set_validity_bit(b.validity, i)
              __pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
+04526:             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;
        }
 04527:                 # Accept widening of int / bool to float, matching how
 04528:                 # Python implicitly converts when you do float(x).
+04529:                 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, 4529, __pyx_L4_error)
          (__pyx_v_values[__pyx_v_i]) = __pyx_t_10;

+04530:                 if b.validity != NULL:
          __pyx_t_1 = (__pyx_v_b->validity != NULL);

          if (__pyx_t_1) {
/* … */
          }
+04531:                     _pyobj_set_validity_bit(b.validity, i)
            __pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
+04532:             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;
        }
+04533:                 b.has_nulls = True
          __pyx_v_b->has_nulls = 1;
 04534:             else:
+04535:                 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, 4535, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_12);
+04536:                     QuestDBErrorCode.BadDataFrame,
          __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4536, __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, 4536, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+04537:                     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, 4537, __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, 4537, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_15);
/* … */
          __pyx_t_19 = 42;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_19 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18[5]);
          #endif
          __pyx_t_20 = 0;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_20 |= __Pyx_PyUnicode_KIND_04(__pyx_t_18[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_18[5]);
          #endif
          __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_18, 7, __pyx_t_19, __pyx_t_20);
          if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4537, __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_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[3] = {__pyx_t_11, __pyx_t_14, __pyx_t_16};
            __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_12, __pyx_callargs+__pyx_t_21, (3-__pyx_t_21) | (__pyx_t_21*__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, 4535, __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, 4535, __pyx_L4_error)
        }
        __pyx_L15:;
      }

+04538:                     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, 4538, __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, 4538, __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__3;
 04539: 
+04540:         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) {
/* … */
      }
+04541:             free(b.validity)
        free(__pyx_v_b->validity);
+04542:             b.validity = NULL
        __pyx_v_b->validity = NULL;
+04543:     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, 4543, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_16);
+04544:         pyobj_built_free(b)
      __pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+04545:         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, 4545, __pyx_L6_except_error)
    }
 04546: 
+04547:     return b
  {

    __pyx_r = __pyx_v_b;
  }
  goto __pyx_L0;
 04548: 
 04549: 
+04550: 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_18);
  __Pyx_XDECREF(__pyx_t_19);
  __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;
}
 04551:         col_t* col,
 04552:         size_t row_count,
 04553:         object df_col_name) except NULL:
 04554:     """
 04555:     Walk a PyObject bool column once and pack the values into an
 04556:     Arrow LSB-first bitmap (one bit per row). Null cells are rejected —
 04557:     matches the row-path behaviour (QuestDB BOOLEAN has no null
 04558:     representation at the row level).
 04559:     """
+04560:     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))));
+04561:     if b == NULL:
  __pyx_t_1 = (__pyx_v_b == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+04562:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 4562, __pyx_L1_error)
+04563:     b.row_count = row_count
  __pyx_v_b->row_count = __pyx_v_row_count;
 04564: 
+04565:     cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
  __pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
 04566:     cdef PyObject* cell
 04567:     # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
 04568:     cdef object cell_ref
+04569:     cdef uint8_t* bits = NULL
  __pyx_v_bits = NULL;
+04570:     cdef size_t bytes = (row_count + 7) // 8
  __pyx_v_bytes = ((__pyx_v_row_count + 7) / 8);
 04571:     cdef size_t i
 04572: 
+04573:     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_18); __pyx_t_18 = 0;
    __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 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:;
  }
+04574:         if bytes == 0:
      __pyx_t_1 = (__pyx_v_bytes == 0);

      if (__pyx_t_1) {
/* … */
      }
+04575:             bytes = 1
        __pyx_v_bytes = 1;
+04576:         bits = <uint8_t*>calloc(bytes, sizeof(uint8_t))
      __pyx_v_bits = ((uint8_t *)calloc(__pyx_v_bytes, (sizeof(uint8_t))));
+04577:         if bits == NULL:
      __pyx_t_1 = (__pyx_v_bits == NULL);

      if (unlikely(__pyx_t_1)) {
/* … */
      }
+04578:             raise MemoryError()
        PyErr_NoMemory(); __PYX_ERR(0, 4578, __pyx_L4_error)
+04579:         b.data = <void*>bits
      __pyx_v_b->data = ((void *)__pyx_v_bits);
+04580:         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;
+04581:             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;
+04582:             cell = <PyObject*>cell_ref
        __pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+04583:             if PyBool_Check(cell):
        __pyx_t_1 = PyBool_Check(__pyx_v_cell);

        if (likely(__pyx_t_1)) {
/* … */
          goto __pyx_L14;
        }
+04584:                 if cell == Py_True:
          __pyx_t_1 = (__pyx_v_cell == Py_True);

          if (__pyx_t_1) {
/* … */
          }
+04585:                     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))));
+04586:             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)) {
/* … */
        }
+04587:                 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, 4587, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_11);
+04588:                     QuestDBErrorCode.BadDataFrame,
          __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4588, __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, 4588, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+04589:                     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, 4589, __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, 4589, __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 = 62;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_16 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15[3]);
          #endif
          __pyx_t_17 = 0;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_17 |= __Pyx_PyUnicode_KIND_04(__pyx_t_15[1]);
          #endif
          __pyx_t_18 = __Pyx_PyUnicode_Join(__pyx_t_15, 5, __pyx_t_16, __pyx_t_17);
          if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4589, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_18);
          __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_18};
            __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_18); __pyx_t_18 = 0;
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4587, __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, 4587, __pyx_L4_error)
 04590:                     'null into a boolean column.')
 04591:             else:
+04592:                 raise QuestDBError(
        /*else*/ {
          __pyx_t_11 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4592, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_18);
+04593:                     QuestDBErrorCode.BadDataFrame,
          __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4593, __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, 4593, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+04594:                     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, 4594, __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, 4594, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_14);
/* … */
          __pyx_t_16 = 41;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_16 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_20[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_20[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_20[5]);
          #endif
          __pyx_t_17 = 0;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_17 |= __Pyx_PyUnicode_KIND_04(__pyx_t_20[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_20[5]);
          #endif
          __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_20, 7, __pyx_t_16, __pyx_t_17);
          if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4594, __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_9 = 1;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_18))) {
            __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_18);
            assert(__pyx_t_11);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_18);
            __Pyx_INCREF(__pyx_t_11);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_18, __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_18, __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_18); __pyx_t_18 = 0;
            if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4592, __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, 4592, __pyx_L4_error)
        }
        __pyx_L14:;
      }

+04595:                     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, 4595, __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, 4595, __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_bool_got;
          __pyx_t_20[5] = __pyx_t_19;
          __pyx_t_20[6] = __pyx_mstate_global->__pyx_kp_u__3;
+04596:     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_18, &__pyx_t_12) < 0) __PYX_ERR(0, 4596, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_18);
      __Pyx_XGOTREF(__pyx_t_12);
+04597:         pyobj_built_free(b)
      __pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+04598:         raise
      __Pyx_GIVEREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_18);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_ErrRestoreWithState(__pyx_t_8, __pyx_t_18, __pyx_t_12);
      __pyx_t_8 = 0;  __pyx_t_18 = 0;  __pyx_t_12 = 0; 
      __PYX_ERR(0, 4598, __pyx_L6_except_error)
    }
 04599: 
+04600:     return b
  {

    __pyx_r = __pyx_v_b;
  }
  goto __pyx_L0;
 04601: 
 04602: 
+04603: 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;
}
 04604:         col_t* col,
 04605:         size_t row_count,
 04606:         object df_col_name) except NULL:
+04607:     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))));
+04608:     if b == NULL:
  __pyx_t_1 = (__pyx_v_b == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+04609:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 4609, __pyx_L1_error)
+04610:     b.row_count = row_count
  __pyx_v_b->row_count = __pyx_v_row_count;
 04611: 
+04612:     cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
  __pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
 04613:     cdef PyObject* cell
 04614:     # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
 04615:     cdef object cell_ref
+04616:     cdef uint8_t* buf = NULL
  __pyx_v_buf = NULL;
+04617:     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;
+04618:     cdef size_t validity_bytes = (row_count + 7) // 8
  __pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
 04619:     cdef size_t i
 04620:     cdef bytes be_bytes
+04621:     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, 4621, __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, 4621, __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;
+04622:     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, 4622, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_int_to_bytes = __pyx_t_4;
  __pyx_t_4 = 0;
 04623: 
+04624:     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:;
  }
+04625:         buf = <uint8_t*>calloc(buf_bytes, sizeof(uint8_t))
      __pyx_v_buf = ((uint8_t *)calloc(__pyx_v_buf_bytes, (sizeof(uint8_t))));
+04626:         if buf == NULL:
      __pyx_t_1 = (__pyx_v_buf == NULL);

      if (unlikely(__pyx_t_1)) {
/* … */
      }
+04627:             raise MemoryError()
        PyErr_NoMemory(); __PYX_ERR(0, 4627, __pyx_L4_error)
+04628:         b.data = <void*>buf
      __pyx_v_b->data = ((void *)__pyx_v_buf);
+04629:         if validity_bytes > 0:
      __pyx_t_1 = (__pyx_v_validity_bytes > 0);

      if (__pyx_t_1) {
/* … */
      }
+04630:             b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
        __pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+04631:             if b.validity == NULL:
        __pyx_t_1 = (__pyx_v_b->validity == NULL);

        if (unlikely(__pyx_t_1)) {
/* … */
        }
+04632:                 raise MemoryError()
          PyErr_NoMemory(); __PYX_ERR(0, 4632, __pyx_L4_error)
+04633:         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;
+04634:             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;
+04635:             cell = <PyObject*>cell_ref
        __pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+04636:             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, 4636, __pyx_L4_error)
        if (__pyx_t_1) {
/* … */
          goto __pyx_L15;
        }
 04637:                 # `qwp_numpy_s16` reads canonical RFC 4122 big-endian
 04638:                 # rows and byte-swaps them into QWP wire order itself.
 04639:                 # `int.to_bytes` is called unbound so that a replaced
 04640:                 # `UUID.int` cannot narrow the result: it is always the
 04641:                 # 16 bytes `UUID.bytes` would give, in one C-implemented
 04642:                 # call plus one 16-byte memcpy per row.
+04643:                 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, 4643, __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, 4643, __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, 4643, __pyx_L4_error)
          __Pyx_XDECREF_SET(__pyx_v_be_bytes, ((PyObject*)__pyx_t_4));
          __pyx_t_4 = 0;
+04644:                 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, 4644, __pyx_L4_error)
          (void)(memcpy((__pyx_v_buf + (__pyx_v_i * 16)), __pyx_t_13, 16));

+04645:                 if b.validity != NULL:
          __pyx_t_1 = (__pyx_v_b->validity != NULL);

          if (__pyx_t_1) {
/* … */
          }
+04646:                     _pyobj_set_validity_bit(b.validity, i)
            __pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
+04647:             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;
        }
+04648:                 b.has_nulls = True
          __pyx_v_b->has_nulls = 1;
 04649:             else:
+04650:                 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, 4650, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_11);
+04651:                     QuestDBErrorCode.BadDataFrame,
          __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4651, __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, 4651, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+04652:                     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, 4652, __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, 4652, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_15);
/* … */
          __pyx_t_19 = 41;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_19 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18[5]);
          #endif
          __pyx_t_20 = 0;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_20 |= __Pyx_PyUnicode_KIND_04(__pyx_t_18[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_18[5]);
          #endif
          __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_18, 7, __pyx_t_19, __pyx_t_20);
          if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4652, __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, 4650, __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, 4650, __pyx_L4_error)
        }
        __pyx_L15:;
      }

+04653:                     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, 4653, __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, 4653, __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__3;
 04654: 
+04655:         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_L18_bool_binop_done;
      }
      __pyx_t_21 = (__pyx_v_b->validity != NULL);


      __pyx_t_1 = __pyx_t_21;

      __pyx_L18_bool_binop_done:;
      if (__pyx_t_1) {
/* … */
      }
+04656:             free(b.validity)
        free(__pyx_v_b->validity);
+04657:             b.validity = NULL
        __pyx_v_b->validity = NULL;
+04658:     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, 4658, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_16);
+04659:         pyobj_built_free(b)
      __pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+04660:         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, 4660, __pyx_L6_except_error)
    }
 04661: 
+04662:     return b
  {

    __pyx_r = __pyx_v_b;
  }
  goto __pyx_L0;
 04663: 
 04664: 
+04665: 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_18);
  __Pyx_XDECREF(__pyx_t_20);
  __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;
}
 04666:         col_t* col,
 04667:         size_t row_count,
 04668:         object df_col_name) except NULL:
+04669:     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))));
+04670:     if b == NULL:
  __pyx_t_1 = (__pyx_v_b == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+04671:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 4671, __pyx_L1_error)
+04672:     b.row_count = row_count
  __pyx_v_b->row_count = __pyx_v_row_count;
 04673: 
+04674:     cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
  __pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
 04675:     cdef PyObject* cell
 04676:     # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
 04677:     cdef object cell_ref
+04678:     cdef uint32_t* values = NULL
  __pyx_v_values = NULL;
+04679:     cdef size_t validity_bytes = (row_count + 7) // 8
  __pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
 04680:     cdef size_t i
+04681:     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_18); __pyx_t_18 = 0;
    __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 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:;
  }
+04682:         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))));

 04683:                                    sizeof(uint32_t))
+04684:         if values == NULL:
      __pyx_t_1 = (__pyx_v_values == NULL);

      if (unlikely(__pyx_t_1)) {
/* … */
      }
+04685:             raise MemoryError()
        PyErr_NoMemory(); __PYX_ERR(0, 4685, __pyx_L4_error)
+04686:         b.data = <void*>values
      __pyx_v_b->data = ((void *)__pyx_v_values);
+04687:         if validity_bytes > 0:
      __pyx_t_1 = (__pyx_v_validity_bytes > 0);

      if (__pyx_t_1) {
/* … */
      }
+04688:             b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
        __pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+04689:             if b.validity == NULL:
        __pyx_t_1 = (__pyx_v_b->validity == NULL);

        if (unlikely(__pyx_t_1)) {
/* … */
        }
+04690:                 raise MemoryError()
          PyErr_NoMemory(); __PYX_ERR(0, 4690, __pyx_L4_error)
+04691:         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;
+04692:             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;
+04693:             cell = <PyObject*>cell_ref
        __pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+04694:             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, 4694, __pyx_L4_error)
        if (__pyx_t_1) {
/* … */
          goto __pyx_L15;
        }
+04695:                 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, 4695, __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, 4695, __pyx_L4_error)
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          (__pyx_v_values[__pyx_v_i]) = ((uint32_t)__pyx_t_9);

+04696:                 if b.validity != NULL:
          __pyx_t_1 = (__pyx_v_b->validity != NULL);

          if (__pyx_t_1) {
/* … */
          }
+04697:                     _pyobj_set_validity_bit(b.validity, i)
            __pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
+04698:             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;
        }
+04699:                 b.has_nulls = True
          __pyx_v_b->has_nulls = 1;
+04700:             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, 4700, __pyx_L4_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(__pyx_t_1)) {
/* … */
        }
+04701:                 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, 4701, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_11);
+04702:                     QuestDBErrorCode.BadDataFrame,
          __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4702, __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, 4702, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+04703:                     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, 4703, __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, 4703, __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__2;
          __pyx_t_16 = 21;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_16 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15[3]);
          #endif
          __pyx_t_17 = 0;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_17 |= __Pyx_PyUnicode_KIND_04(__pyx_t_15[1]);
          #endif
          __pyx_t_18 = __Pyx_PyUnicode_Join(__pyx_t_15, 5, __pyx_t_16, __pyx_t_17);
          if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4703, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+04704:                     + _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, 4704, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_12 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_t_18, __pyx_t_14); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4704, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __pyx_t_19 = 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_19 = 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_19, (3-__pyx_t_19) | (__pyx_t_19*__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, 4701, __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, 4701, __pyx_L4_error)
 04705:             else:
+04706:                 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, 4706, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_12);
+04707:                     QuestDBErrorCode.BadDataFrame,
          __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4707, __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, 4707, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+04708:                     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, 4708, __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, 4708, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_14);
/* … */
          __pyx_t_16 = 58;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_16 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_21[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_21[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_21[5]);
          #endif
          __pyx_t_17 = 0;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_17 |= __Pyx_PyUnicode_KIND_04(__pyx_t_21[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_21[5]);
          #endif
          __pyx_t_18 = __Pyx_PyUnicode_Join(__pyx_t_21, 7, __pyx_t_16, __pyx_t_17);
          if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4708, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 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_10, __pyx_t_18};
            __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_10); __pyx_t_10 = 0;
            __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4706, __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, 4706, __pyx_L4_error)
        }
        __pyx_L15:;
      }

+04709:                     f'ipaddress.IPv4Address, got {_fqn(type(<object>cell))}.')
          __pyx_t_18 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4709, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_20 = __Pyx_PyUnicode_Unicode(__pyx_t_18); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 4709, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_20);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __pyx_t_21[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
          __pyx_t_21[1] = __pyx_t_13;
          __pyx_t_21[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
          __pyx_t_21[3] = __pyx_t_14;
          __pyx_t_21[4] = __pyx_mstate_global->__pyx_kp_u_expected_ipaddress_IPv4Address;
          __pyx_t_21[5] = __pyx_t_20;
          __pyx_t_21[6] = __pyx_mstate_global->__pyx_kp_u__3;
 04710: 
+04711:         if not b.has_nulls and b.validity != NULL:
      __pyx_t_22 = (!__pyx_v_b->has_nulls);

      if (__pyx_t_22) {

      } else {

        __pyx_t_1 = __pyx_t_22;

        goto __pyx_L18_bool_binop_done;
      }
      __pyx_t_22 = (__pyx_v_b->validity != NULL);


      __pyx_t_1 = __pyx_t_22;

      __pyx_L18_bool_binop_done:;
      if (__pyx_t_1) {
/* … */
      }
+04712:             free(b.validity)
        free(__pyx_v_b->validity);
+04713:             b.validity = NULL
        __pyx_v_b->validity = NULL;
+04714:     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_18) < 0) __PYX_ERR(0, 4714, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_18);
+04715:         pyobj_built_free(b)
      __pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+04716:         raise
      __Pyx_GIVEREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_18);
      __Pyx_ErrRestoreWithState(__pyx_t_8, __pyx_t_12, __pyx_t_18);
      __pyx_t_8 = 0;  __pyx_t_12 = 0;  __pyx_t_18 = 0; 
      __PYX_ERR(0, 4716, __pyx_L6_except_error)
    }
 04717: 
+04718:     return b
  {

    __pyx_r = __pyx_v_b;
  }
  goto __pyx_L0;
 04719: 
 04720: 
+04721: 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;
}
+04722:     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;
+04723:     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);

+04724:     cdef int yoe = y_adj - era * 400
  __pyx_v_yoe = (__pyx_v_y_adj - (__pyx_v_era * 0x190));
+04725:     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;
+04726:     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);
+04727:     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);
+04728:     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;
 04729: 
 04730: 
+04731: 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;
}
 04732:         col_t* col,
 04733:         size_t row_count,
 04734:         object df_col_name) except NULL:
+04735:     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))));
+04736:     if b == NULL:
  __pyx_t_1 = (__pyx_v_b == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+04737:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 4737, __pyx_L1_error)
+04738:     b.row_count = row_count
  __pyx_v_b->row_count = __pyx_v_row_count;
 04739: 
+04740:     cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
  __pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
 04741:     cdef PyObject* cell
 04742:     # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
 04743:     cdef object cell_ref
+04744:     cdef int64_t* values = NULL
  __pyx_v_values = NULL;
+04745:     cdef size_t validity_bytes = (row_count + 7) // 8
  __pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
 04746:     cdef size_t i
 04747:     cdef object dt
+04748:     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, 4748, __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, 4748, __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[3], __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4748, __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;
+04749:         1970, 1, 1, tzinfo=datetime.timezone.utc)
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4749, __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, 4749, __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, 4749, __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, 4749, __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, 4749, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+04750:     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, 4750, __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, 4750, __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;
 04751:     cdef object delta
 04752:     cdef int year, month, day, hour, minute, second, us
 04753:     cdef int64_t days
 04754: 
+04755:     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:;
  }
+04756:         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))));

 04757:                                   sizeof(int64_t))
+04758:         if values == NULL:
      __pyx_t_1 = (__pyx_v_values == NULL);

      if (unlikely(__pyx_t_1)) {
/* … */
      }
+04759:             raise MemoryError()
        PyErr_NoMemory(); __PYX_ERR(0, 4759, __pyx_L4_error)
+04760:         b.data = <void*>values
      __pyx_v_b->data = ((void *)__pyx_v_values);
+04761:         if validity_bytes > 0:
      __pyx_t_1 = (__pyx_v_validity_bytes > 0);

      if (__pyx_t_1) {
/* … */
      }
+04762:             b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
        __pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+04763:             if b.validity == NULL:
        __pyx_t_1 = (__pyx_v_b->validity == NULL);

        if (unlikely(__pyx_t_1)) {
/* … */
        }
+04764:                 raise MemoryError()
          PyErr_NoMemory(); __PYX_ERR(0, 4764, __pyx_L4_error)
+04765:         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;
+04766:             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;
+04767:             cell = <PyObject*>cell_ref
        __pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+04768:             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;
        }
+04769:                 b.has_nulls = True
          __pyx_v_b->has_nulls = 1;
+04770:             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, 4770, __pyx_L4_error)
        if (likely(__pyx_t_1)) {
/* … */
          goto __pyx_L15;
        }
+04771:                 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;
+04772:                 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, 4772, __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;
          }
 04773:                     # Fast path: C-level field extraction + Howard
 04774:                     # Hinnant days_from_civil; no Python timedelta /
 04775:                     # int arithmetic per row.
+04776:                     year = PyDateTime_GET_YEAR(dt)
            __pyx_v_year = PyDateTime_GET_YEAR(__pyx_v_dt);
+04777:                     month = PyDateTime_GET_MONTH(dt)
            __pyx_v_month = PyDateTime_GET_MONTH(__pyx_v_dt);
+04778:                     day = PyDateTime_GET_DAY(dt)
            __pyx_v_day = PyDateTime_GET_DAY(__pyx_v_dt);
+04779:                     hour = PyDateTime_DATE_GET_HOUR(dt)
            __pyx_v_hour = PyDateTime_DATE_GET_HOUR(__pyx_v_dt);
+04780:                     minute = PyDateTime_DATE_GET_MINUTE(dt)
            __pyx_v_minute = PyDateTime_DATE_GET_MINUTE(__pyx_v_dt);
+04781:                     second = PyDateTime_DATE_GET_SECOND(dt)
            __pyx_v_second = PyDateTime_DATE_GET_SECOND(__pyx_v_dt);
+04782:                     us = PyDateTime_DATE_GET_MICROSECOND(dt)
            __pyx_v_us = PyDateTime_DATE_GET_MICROSECOND(__pyx_v_dt);
+04783:                     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);
+04784:                     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));
 04785:                         days * <int64_t>86_400_000_000
 04786:                         + <int64_t>hour * <int64_t>3_600_000_000
 04787:                         + <int64_t>minute * 60_000_000
 04788:                         + <int64_t>second * 1_000_000
 04789:                         + <int64_t>us)
 04790:                 else:
+04791:                     delta = dt - epoch_aware
          /*else*/ {
            __pyx_t_2 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_dt, __pyx_v_epoch_aware); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4791, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_XDECREF_SET(__pyx_v_delta, __pyx_t_2);
            __pyx_t_2 = 0;
+04792:                     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:;
+04793:                         <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, 4793, __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, 4793, __pyx_L4_error)
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+04794:                         + <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, 4794, __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, 4794, __pyx_L4_error)
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+04795:                         + <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, 4795, __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, 4795, __pyx_L4_error)
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+04796:                 if b.validity != NULL:
          __pyx_t_1 = (__pyx_v_b->validity != NULL);

          if (__pyx_t_1) {
/* … */
          }
+04797:                     _pyobj_set_validity_bit(b.validity, i)
            __pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
 04798:             else:
+04799:                 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, 4799, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_3);
+04800:                     QuestDBErrorCode.BadDataFrame,
          __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4800, __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, 4800, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+04801:                     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, 4801, __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, 4801, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_16);
/* … */
          __pyx_t_20 = 54;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_20 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_19[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_19[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_19[5]);
          #endif
          __pyx_t_21 = 0;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_21 |= __Pyx_PyUnicode_KIND_04(__pyx_t_19[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_19[5]);
          #endif
          __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_19, 7, __pyx_t_20, __pyx_t_21);
          if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4801, __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_22 = 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_22 = 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_22, (3-__pyx_t_22) | (__pyx_t_22*__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, 4799, __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, 4799, __pyx_L4_error)
        }
        __pyx_L15:;
      }

+04802:                     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, 4802, __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, 4802, __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__3;
 04803: 
+04804:         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_L19_bool_binop_done;
      }
      __pyx_t_23 = (__pyx_v_b->validity != NULL);


      __pyx_t_1 = __pyx_t_23;

      __pyx_L19_bool_binop_done:;
      if (__pyx_t_1) {
/* … */
      }
+04805:             free(b.validity)
        free(__pyx_v_b->validity);
+04806:             b.validity = NULL
        __pyx_v_b->validity = NULL;
+04807:     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, 4807, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_2);
      __Pyx_XGOTREF(__pyx_t_3);
      __Pyx_XGOTREF(__pyx_t_17);
+04808:         pyobj_built_free(b)
      __pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+04809:         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, 4809, __pyx_L6_except_error)
    }
 04810: 
+04811:     return b
  {

    __pyx_r = __pyx_v_b;
  }
  goto __pyx_L0;
 04812: 
 04813: 
+04814: 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_23);
  __Pyx_XDECREF(__pyx_t_25);
  __Pyx_XDECREF(__pyx_t_26);
  __Pyx_XDECREF(__pyx_t_27);
  __Pyx_XDECREF(__pyx_t_29);
  __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;
}
 04815:         col_t* col,
 04816:         size_t row_count,
 04817:         object df_col_name) except NULL:
+04818:     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))));
+04819:     if b == NULL:
  __pyx_t_1 = (__pyx_v_b == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+04820:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 4820, __pyx_L1_error)
+04821:     b.row_count = row_count
  __pyx_v_b->row_count = __pyx_v_row_count;
 04822: 
+04823:     cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
  __pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
 04824:     cdef PyObject* cell
 04825:     # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
 04826:     cdef object cell_ref
 04827:     cdef Py_ssize_t blob_len
 04828:     cdef const char* blob_buf
 04829:     cdef object py_cell
 04830:     cdef Py_buffer view
 04831:     cdef bint release_view
+04832:     cdef size_t validity_bytes = (row_count + 7) // 8
  __pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
+04833:     cdef size_t bytes_cap = 16
  __pyx_v_bytes_cap = 16;
 04834:     cdef uint8_t* new_bytes
+04835:     cdef size_t bytes_used = 0
  __pyx_v_bytes_used = 0;
 04836:     cdef size_t i
 04837: 
+04838:     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_23); __pyx_t_23 = 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_29); __pyx_t_29 = 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:;
  }
+04839:         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))));
+04840:         if b.str_offsets == NULL:
      __pyx_t_1 = (__pyx_v_b->str_offsets == NULL);

      if (unlikely(__pyx_t_1)) {
/* … */
      }
+04841:             raise MemoryError()
        PyErr_NoMemory(); __PYX_ERR(0, 4841, __pyx_L4_error)
+04842:         if validity_bytes > 0:
      __pyx_t_1 = (__pyx_v_validity_bytes > 0);

      if (__pyx_t_1) {
/* … */
      }
+04843:             b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
        __pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+04844:             if b.validity == NULL:
        __pyx_t_1 = (__pyx_v_b->validity == NULL);

        if (unlikely(__pyx_t_1)) {
/* … */
        }
+04845:                 raise MemoryError()
          PyErr_NoMemory(); __PYX_ERR(0, 4845, __pyx_L4_error)
+04846:         b.str_bytes = <uint8_t*>malloc(bytes_cap)
      __pyx_v_b->str_bytes = ((uint8_t *)malloc(__pyx_v_bytes_cap));
+04847:         if b.str_bytes == NULL:
      __pyx_t_1 = (__pyx_v_b->str_bytes == NULL);

      if (unlikely(__pyx_t_1)) {
/* … */
      }
+04848:             raise MemoryError()
        PyErr_NoMemory(); __PYX_ERR(0, 4848, __pyx_L4_error)
 04849: 
+04850:         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;
+04851:             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;
+04852:             cell = <PyObject*>cell_ref
        __pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+04853:             release_view = False
        __pyx_v_release_view = 0;
+04854:             try:
        /*try:*/ {
+04855:                 if PyBytes_Check(<object>cell):
          __pyx_t_1 = PyBytes_Check(((PyObject *)__pyx_v_cell));

          if (__pyx_t_1) {
/* … */
            goto __pyx_L21;
          }
+04856:                     blob_len = PyBytes_GET_SIZE(<object>cell)
            __pyx_v_blob_len = PyBytes_GET_SIZE(((PyObject *)__pyx_v_cell));
+04857:                     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, 4857, __pyx_L19_error)
            __pyx_v_blob_buf = __pyx_t_9;
+04858:                 elif PyByteArray_Check(<object>cell):
          __pyx_t_1 = PyByteArray_Check(((PyObject *)__pyx_v_cell));

          if (__pyx_t_1) {
/* … */
            goto __pyx_L21;
          }
+04859:                     blob_len = PyByteArray_Size(<object>cell)
            __pyx_v_blob_len = PyByteArray_Size(((PyObject *)__pyx_v_cell));
+04860:                     blob_buf = PyByteArray_AsString(<object>cell)
            __pyx_v_blob_buf = PyByteArray_AsString(((PyObject *)__pyx_v_cell));
+04861:                 elif PyMemoryView_Check(<object>cell):
          __pyx_t_1 = PyMemoryView_Check(((PyObject *)__pyx_v_cell));

          if (__pyx_t_1) {
/* … */
            goto __pyx_L21;
          }
+04862:                     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;
 04863:                     # A released memoryview raises ValueError from the
 04864:                     # `itemsize` and `c_contiguous` reads, not from
 04865:                     # `PyObject_GetBuffer`, so those reads sit inside the
 04866:                     # handler that names the column and the row.
+04867:                     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_23); __pyx_t_23 = 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:;
            }
+04868:                         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, 4868, __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, 4868, __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)) {
/* … */
                }
+04869:                                 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, 4869, __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, 4869, __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:;
+04870:                             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, 4870, __pyx_L22_error)
                  __Pyx_GOTREF(__pyx_t_16);
+04871:                                 QuestDBErrorCode.BadDataFrame,
                  __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4871, __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, 4871, __pyx_L22_error)
                  __Pyx_GOTREF(__pyx_t_18);
                  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+04872:                                 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, 4872, __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, 4872, __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 = 87;
                  #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
                  __pyx_t_21 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_20[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_20[3]);
                  #endif
                  __pyx_t_22 = 0;
                  #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
                  __pyx_t_22 |= __Pyx_PyUnicode_KIND_04(__pyx_t_20[1]);
                  #endif
                  __pyx_t_23 = __Pyx_PyUnicode_Join(__pyx_t_20, 5, __pyx_t_21, __pyx_t_22);
                  if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 4872, __pyx_L22_error)
                  __Pyx_GOTREF(__pyx_t_23);
                  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
                  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
                  __pyx_t_24 = 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_24 = 0;
                  }
                  #endif
                  {
                    PyObject *__pyx_callargs[3] = {__pyx_t_15, __pyx_t_18, __pyx_t_23};
                    __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_16, __pyx_callargs+__pyx_t_24, (3-__pyx_t_24) | (__pyx_t_24*__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_23); __pyx_t_23 = 0;
                    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
                    if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4870, __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, 4870, __pyx_L22_error)
 04873:                                 'memoryview BINARY values must be '
 04874:                                 'C-contiguous with one-byte items.')
+04875:                         PyObject_GetBuffer(py_cell, &view, PyBUF_SIMPLE)
                __pyx_t_22 = PyObject_GetBuffer(__pyx_v_py_cell, (&__pyx_v_view), PyBUF_SIMPLE); if (unlikely(__pyx_t_22 == ((int)-1))) __PYX_ERR(0, 4875, __pyx_L22_error)

+04876:                     except (BufferError, ValueError) as exc:
              __pyx_t_22 = __Pyx_PyErr_ExceptionMatches2(((PyObject *)(((PyTypeObject*)PyExc_BufferError))), ((PyObject *)(((PyTypeObject*)PyExc_ValueError))));
              if (__pyx_t_22) {
                __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_23) < 0) __PYX_ERR(0, 4876, __pyx_L24_except_error)
                __Pyx_XGOTREF(__pyx_t_8);
                __Pyx_XGOTREF(__pyx_t_16);
                __Pyx_XGOTREF(__pyx_t_23);
                __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_32 = 0; __pyx_t_33 = 0; __pyx_t_34 = 0; __pyx_t_35 = 0; __pyx_t_36 = 0; __pyx_t_37 = 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_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_29); __pyx_t_29 = 0;
                     __Pyx_ExceptionSwap(&__pyx_t_35, &__pyx_t_36, &__pyx_t_37);
                    if ( unlikely(__Pyx_GetException(&__pyx_t_32, &__pyx_t_33, &__pyx_t_34) < 0)) __Pyx_ErrFetch(&__pyx_t_32, &__pyx_t_33, &__pyx_t_34);
                    __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_XGOTREF(__pyx_t_37);
                    __pyx_t_22 = __pyx_lineno; __pyx_t_30 = __pyx_clineno; __pyx_t_31 = __pyx_filename;
                    {
                      __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
                    }
                    __Pyx_XGIVEREF(__pyx_t_35);
                    __Pyx_XGIVEREF(__pyx_t_36);
                    __Pyx_XGIVEREF(__pyx_t_37);
                    __Pyx_ExceptionReset(__pyx_t_35, __pyx_t_36, __pyx_t_37);
                    __Pyx_XGIVEREF(__pyx_t_32);
                    __Pyx_XGIVEREF(__pyx_t_33);
                    __Pyx_XGIVEREF(__pyx_t_34);
                    __Pyx_ErrRestore(__pyx_t_32, __pyx_t_33, __pyx_t_34);
                    __pyx_t_32 = 0; __pyx_t_33 = 0; __pyx_t_34 = 0; __pyx_t_35 = 0; __pyx_t_36 = 0; __pyx_t_37 = 0;
                    __pyx_lineno = __pyx_t_22; __pyx_clineno = __pyx_t_30; __pyx_filename = __pyx_t_31;
                    goto __pyx_L24_except_error;
                  }
                }
              }
              goto __pyx_L24_except_error;
+04877:                         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, 4877, __pyx_L38_error)
                  __Pyx_GOTREF(__pyx_t_19);
+04878:                             QuestDBErrorCode.BadDataFrame,
                  __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4878, __pyx_L38_error)
                  __Pyx_GOTREF(__pyx_t_17);
                  __pyx_t_25 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 4878, __pyx_L38_error)
                  __Pyx_GOTREF(__pyx_t_25);
                  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+04879:                             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, 4879, __pyx_L38_error)
                  __Pyx_GOTREF(__pyx_t_17);
                  __pyx_t_26 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 4879, __pyx_L38_error)
                  __Pyx_GOTREF(__pyx_t_26);
/* … */
                  __pyx_t_21 = 54;
                  #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
                  __pyx_t_21 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_28[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_28[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_28[5]);
                  #endif
                  __pyx_t_22 = 0;
                  #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
                  __pyx_t_22 |= __Pyx_PyUnicode_KIND_04(__pyx_t_28[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_28[5]);
                  #endif
                  __pyx_t_29 = __Pyx_PyUnicode_Join(__pyx_t_28, 6, __pyx_t_21, __pyx_t_22);
                  if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 4879, __pyx_L38_error)
                  __Pyx_GOTREF(__pyx_t_29);
                  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
                  __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
                  __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
                  __pyx_t_24 = 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_24 = 0;
                  }
                  #endif
                  {
                    PyObject *__pyx_callargs[3] = {__pyx_t_15, __pyx_t_25, __pyx_t_29};
                    __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_19, __pyx_callargs+__pyx_t_24, (3-__pyx_t_24) | (__pyx_t_24*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
                    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
                    __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
                    __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
                    if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4877, __pyx_L38_error)
                    __Pyx_GOTREF(__pyx_t_18);
                  }
+04880:                             f'invalid memoryview BINARY value: {exc}') from exc
                  __pyx_t_27 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 4880, __pyx_L38_error)
                  __Pyx_GOTREF(__pyx_t_27);
                  __pyx_t_28[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
                  __pyx_t_28[1] = __pyx_t_17;
                  __pyx_t_28[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
                  __pyx_t_28[3] = __pyx_t_26;
                  __pyx_t_28[4] = __pyx_mstate_global->__pyx_kp_u_invalid_memoryview_BINARY_value;
                  __pyx_t_28[5] = __pyx_t_27;
/* … */
                  __Pyx_Raise(__pyx_t_18, 0, 0, __pyx_v_exc);
                  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
                  __PYX_ERR(0, 4877, __pyx_L38_error)
                }
+04881:                     release_view = True
            __pyx_v_release_view = 1;
+04882:                     blob_len = view.len
            __pyx_t_21 = __pyx_v_view.len;

            __pyx_v_blob_len = __pyx_t_21;
+04883:                     blob_buf = <const char*>view.buf
            __pyx_v_blob_buf = ((char const *)__pyx_v_view.buf);
+04884:                 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)) {
/* … */
          }
+04885:                     b.str_offsets[i + 1] = <int32_t>bytes_used
            (__pyx_v_b->str_offsets[(__pyx_v_i + 1)]) = ((int32_t)__pyx_v_bytes_used);
+04886:                     b.has_nulls = True
            __pyx_v_b->has_nulls = 1;
+04887:                     continue
            goto __pyx_L16_continue;
 04888:                 else:
+04889:                     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, 4889, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_8);
+04890:                         QuestDBErrorCode.BadDataFrame,
            __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4890, __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, 4890, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_19);
            __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+04891:                         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, 4891, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_18);
            __pyx_t_29 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 4891, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_29);
/* … */
            __pyx_t_21 = 68;
            #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
            __pyx_t_21 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_38[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_38[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_38[5]);
            #endif
            __pyx_t_30 = 0;
            #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
            __pyx_t_30 |= __Pyx_PyUnicode_KIND_04(__pyx_t_38[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_38[5]);
            #endif
            __pyx_t_25 = __Pyx_PyUnicode_Join(__pyx_t_38, 7, __pyx_t_21, __pyx_t_30);
            if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 4891, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_25);
            __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
            __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __pyx_t_24 = 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_24 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[3] = {__pyx_t_16, __pyx_t_19, __pyx_t_25};
              __pyx_t_23 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_24, (3-__pyx_t_24) | (__pyx_t_24*__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_25); __pyx_t_25 = 0;
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
              if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 4889, __pyx_L19_error)
              __Pyx_GOTREF(__pyx_t_23);
            }
            __Pyx_Raise(__pyx_t_23, 0, 0, 0);
            __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
            __PYX_ERR(0, 4889, __pyx_L19_error)
          }
          __pyx_L21:;
 04892:                         'bytes, bytearray, or memoryview, '
+04893:                         f'got {_fqn(type(<object>cell))}.')
            __pyx_t_25 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 4893, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_25);
            __pyx_t_15 = __Pyx_PyUnicode_Unicode(__pyx_t_25); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4893, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 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_29;
            __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__3;
 04894: 
+04895:                 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)) {
/* … */
          }
+04896:                     raise QuestDBError(
            __pyx_t_8 = NULL;
            __Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 4896, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_25);
+04897:                         QuestDBErrorCode.BadDataFrame,
            __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4897, __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, 4897, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_16);
            __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+04898:                         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, 4898, __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_21 = 87;
            #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
            __pyx_t_21 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_39[1]);
            #endif
            __pyx_t_30 = 0;
            #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
            __pyx_t_30 |= __Pyx_PyUnicode_KIND_04(__pyx_t_39[1]);
            #endif
            __pyx_t_15 = __Pyx_PyUnicode_Join(__pyx_t_39, 3, __pyx_t_21, __pyx_t_30);
            if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4898, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
            __pyx_t_24 = 1;
            #if CYTHON_UNPACK_METHODS
            if (unlikely(PyMethod_Check(__pyx_t_25))) {
              __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_25);
              assert(__pyx_t_8);
              PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_25);
              __Pyx_INCREF(__pyx_t_8);
              __Pyx_INCREF(__pyx__function);
              __Pyx_DECREF_SET(__pyx_t_25, __pyx__function);
              __pyx_t_24 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_16, __pyx_t_15};
              __pyx_t_23 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_25, __pyx_callargs+__pyx_t_24, (3-__pyx_t_24) | (__pyx_t_24*__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_25); __pyx_t_25 = 0;
              if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 4896, __pyx_L19_error)
              __Pyx_GOTREF(__pyx_t_23);
            }
            __Pyx_Raise(__pyx_t_23, 0, 0, 0);
            __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
            __PYX_ERR(0, 4896, __pyx_L19_error)
 04899:                         'exceeds the QWP wire binary offset table '
 04900:                         'limit (2 GiB).')
+04901:                 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;
+04902:                     bytes_cap *= 2
            __pyx_v_bytes_cap = (__pyx_v_bytes_cap * 2);
+04903:                     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));
+04904:                     if new_bytes == NULL:
            __pyx_t_1 = (__pyx_v_new_bytes == NULL);

            if (unlikely(__pyx_t_1)) {
/* … */
            }
+04905:                         raise MemoryError()
              PyErr_NoMemory(); __PYX_ERR(0, 4905, __pyx_L19_error)
+04906:                     b.str_bytes = new_bytes
            __pyx_v_b->str_bytes = __pyx_v_new_bytes;
          }
+04907:                 if blob_len > 0:
          __pyx_t_1 = (__pyx_v_blob_len > 0);

          if (__pyx_t_1) {
/* … */
          }
+04908:                     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)));
+04909:                 bytes_used += <size_t>blob_len
          __pyx_v_bytes_used = (__pyx_v_bytes_used + ((size_t)__pyx_v_blob_len));
+04910:                 b.str_offsets[i + 1] = <int32_t>bytes_used
          (__pyx_v_b->str_offsets[(__pyx_v_i + 1)]) = ((int32_t)__pyx_v_bytes_used);
+04911:                 if b.validity != NULL:
          __pyx_t_1 = (__pyx_v_b->validity != NULL);

          if (__pyx_t_1) {
/* … */
          }
        }
+04912:                     _pyobj_set_validity_bit(b.validity, i)
            __pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
 04913:             finally:
+04914:                 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_37 = 0; __pyx_t_36 = 0; __pyx_t_35 = 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_23); __pyx_t_23 = 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_29); __pyx_t_29 = 0;
            __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
             __Pyx_ExceptionSwap(&__pyx_t_37, &__pyx_t_36, &__pyx_t_35);
            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_37);
            __Pyx_XGOTREF(__pyx_t_36);
            __Pyx_XGOTREF(__pyx_t_35);
            __pyx_t_30 = __pyx_lineno; __pyx_t_22 = __pyx_clineno; __pyx_t_31 = __pyx_filename;
            {
              if (__pyx_v_release_view) {
/* … */
              }
            }
            __Pyx_XGIVEREF(__pyx_t_37);
            __Pyx_XGIVEREF(__pyx_t_36);
            __Pyx_XGIVEREF(__pyx_t_35);
            __Pyx_ExceptionReset(__pyx_t_37, __pyx_t_36, __pyx_t_35);
            __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_37 = 0; __pyx_t_36 = 0; __pyx_t_35 = 0;
            __pyx_lineno = __pyx_t_30; __pyx_clineno = __pyx_t_22; __pyx_filename = __pyx_t_31;
            goto __pyx_L4_error;
          }
          __pyx_L16_continue: {
            if (__pyx_v_release_view) {
/* … */
            }
            goto __pyx_L14_continue;
          }
          __pyx_L20:;
        }
        __pyx_L14_continue:;
      }

+04915:                     PyBuffer_Release(&view)
              PyBuffer_Release((&__pyx_v_view));
/* … */
                PyBuffer_Release((&__pyx_v_view));
/* … */
              PyBuffer_Release((&__pyx_v_view));
 04916: 
+04917:         b.str_bytes_len = bytes_used
      __pyx_v_b->str_bytes_len = __pyx_v_bytes_used;
+04918:         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) {
/* … */
      }
+04919:             free(b.validity)
        free(__pyx_v_b->validity);
+04920:             b.validity = NULL
        __pyx_v_b->validity = NULL;
+04921:     except:
    /*except:*/ {
      __Pyx_AddTraceback("questdb._client._dataframe_columnar_build_bytes_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_23, &__pyx_t_25, &__pyx_t_15) < 0) __PYX_ERR(0, 4921, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_23);
      __Pyx_XGOTREF(__pyx_t_25);
      __Pyx_XGOTREF(__pyx_t_15);
+04922:         pyobj_built_free(b)
      __pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+04923:         raise
      __Pyx_GIVEREF(__pyx_t_23);
      __Pyx_GIVEREF(__pyx_t_25);
      __Pyx_XGIVEREF(__pyx_t_15);
      __Pyx_ErrRestoreWithState(__pyx_t_23, __pyx_t_25, __pyx_t_15);
      __pyx_t_23 = 0;  __pyx_t_25 = 0;  __pyx_t_15 = 0; 
      __PYX_ERR(0, 4923, __pyx_L6_except_error)
    }
 04924: 
+04925:     return b
  {

    __pyx_r = __pyx_v_b;
  }
  goto __pyx_L0;
 04926: 
 04927: 
+04928: 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_23);
  __Pyx_XDECREF(__pyx_t_25);
  __Pyx_XDECREF(__pyx_t_26);
  __Pyx_XDECREF(__pyx_t_27);
  __Pyx_XDECREF(__pyx_t_29);
  __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;
}
 04929:         col_t* col,
 04930:         size_t row_count,
 04931:         object df_col_name,
 04932:         size_t width,
 04933:         str type_name) except NULL:
 04934:     """
 04935:     Walk an object column of `bytes` claimed as UUID or LONG256 and
 04936:     produce `width` bytes per row + LSB-packed validity bitmap.
 04937: 
 04938:     ``to_pandas(dtype_backend='numpy_nullable')`` hands a fixed-size
 04939:     binary column back as object-dtype `bytes`, so the raw rows are
 04940:     already in the order the wire wants: canonical RFC 4122 big-endian
 04941:     for UUID, little-endian limbs for LONG256. Every non-null cell must
 04942:     be exactly `width` bytes — a column whose values no longer are is
 04943:     refused rather than written to a column of the claimed type.
 04944:     """
+04945:     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))));
+04946:     if b == NULL:
  __pyx_t_1 = (__pyx_v_b == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+04947:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 4947, __pyx_L1_error)
+04948:     b.row_count = row_count
  __pyx_v_b->row_count = __pyx_v_row_count;
 04949: 
+04950:     cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
  __pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
 04951:     cdef PyObject* cell
 04952:     # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
 04953:     cdef object cell_ref
+04954:     cdef uint8_t* buf = NULL
  __pyx_v_buf = NULL;
+04955:     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;
+04956:     cdef size_t validity_bytes = (row_count + 7) // 8
  __pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
 04957:     cdef size_t i
 04958:     cdef Py_ssize_t blob_len
 04959:     cdef const char* blob_buf
 04960:     cdef object py_cell
 04961:     cdef Py_buffer view
 04962:     cdef bint release_view
 04963: 
+04964:     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_23); __pyx_t_23 = 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_29); __pyx_t_29 = 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:;
  }
+04965:         buf = <uint8_t*>calloc(buf_bytes, sizeof(uint8_t))
      __pyx_v_buf = ((uint8_t *)calloc(__pyx_v_buf_bytes, (sizeof(uint8_t))));
+04966:         if buf == NULL:
      __pyx_t_1 = (__pyx_v_buf == NULL);

      if (unlikely(__pyx_t_1)) {
/* … */
      }
+04967:             raise MemoryError()
        PyErr_NoMemory(); __PYX_ERR(0, 4967, __pyx_L4_error)
+04968:         b.data = <void*>buf
      __pyx_v_b->data = ((void *)__pyx_v_buf);
+04969:         if validity_bytes > 0:
      __pyx_t_1 = (__pyx_v_validity_bytes > 0);

      if (__pyx_t_1) {
/* … */
      }
+04970:             b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
        __pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+04971:             if b.validity == NULL:
        __pyx_t_1 = (__pyx_v_b->validity == NULL);

        if (unlikely(__pyx_t_1)) {
/* … */
        }
+04972:                 raise MemoryError()
          PyErr_NoMemory(); __PYX_ERR(0, 4972, __pyx_L4_error)
+04973:         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;
+04974:             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;
+04975:             cell = <PyObject*>cell_ref
        __pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+04976:             release_view = False
        __pyx_v_release_view = 0;
+04977:             try:
        /*try:*/ {
+04978:                 if PyBytes_Check(<object>cell):
          __pyx_t_1 = PyBytes_Check(((PyObject *)__pyx_v_cell));

          if (__pyx_t_1) {
/* … */
            goto __pyx_L20;
          }
+04979:                     blob_len = PyBytes_GET_SIZE(<object>cell)
            __pyx_v_blob_len = PyBytes_GET_SIZE(((PyObject *)__pyx_v_cell));
+04980:                     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, 4980, __pyx_L18_error)
            __pyx_v_blob_buf = __pyx_t_9;
+04981:                 elif PyByteArray_Check(<object>cell):
          __pyx_t_1 = PyByteArray_Check(((PyObject *)__pyx_v_cell));

          if (__pyx_t_1) {
/* … */
            goto __pyx_L20;
          }
+04982:                     blob_len = PyByteArray_Size(<object>cell)
            __pyx_v_blob_len = PyByteArray_Size(((PyObject *)__pyx_v_cell));
+04983:                     blob_buf = PyByteArray_AsString(<object>cell)
            __pyx_v_blob_buf = PyByteArray_AsString(((PyObject *)__pyx_v_cell));
+04984:                 elif PyMemoryView_Check(<object>cell):
          __pyx_t_1 = PyMemoryView_Check(((PyObject *)__pyx_v_cell));

          if (__pyx_t_1) {
/* … */
            goto __pyx_L20;
          }
+04985:                     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;
+04986:                     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_23); __pyx_t_23 = 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:;
            }
+04987:                         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, 4987, __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, 4987, __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)) {
/* … */
                }
+04988:                                 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, 4988, __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, 4988, __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:;
+04989:                             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, 4989, __pyx_L21_error)
                  __Pyx_GOTREF(__pyx_t_16);
+04990:                                 QuestDBErrorCode.BadDataFrame,
                  __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4990, __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, 4990, __pyx_L21_error)
                  __Pyx_GOTREF(__pyx_t_18);
                  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+04991:                                 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, 4991, __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, 4991, __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 = 80;
                  #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
                  __pyx_t_21 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_20[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_20[3]);
                  #endif
                  __pyx_t_22 = 0;
                  #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
                  __pyx_t_22 |= __Pyx_PyUnicode_KIND_04(__pyx_t_20[1]);
                  #endif
                  __pyx_t_23 = __Pyx_PyUnicode_Join(__pyx_t_20, 5, __pyx_t_21, __pyx_t_22);
                  if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 4991, __pyx_L21_error)
                  __Pyx_GOTREF(__pyx_t_23);
                  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
                  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
                  __pyx_t_24 = 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_24 = 0;
                  }
                  #endif
                  {
                    PyObject *__pyx_callargs[3] = {__pyx_t_15, __pyx_t_18, __pyx_t_23};
                    __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_16, __pyx_callargs+__pyx_t_24, (3-__pyx_t_24) | (__pyx_t_24*__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_23); __pyx_t_23 = 0;
                    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
                    if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4989, __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, 4989, __pyx_L21_error)
 04992:                                 'memoryview values must be C-contiguous '
 04993:                                 'with one-byte items.')
+04994:                         PyObject_GetBuffer(py_cell, &view, PyBUF_SIMPLE)
                __pyx_t_22 = PyObject_GetBuffer(__pyx_v_py_cell, (&__pyx_v_view), PyBUF_SIMPLE); if (unlikely(__pyx_t_22 == ((int)-1))) __PYX_ERR(0, 4994, __pyx_L21_error)

+04995:                     except (BufferError, ValueError) as exc:
              __pyx_t_22 = __Pyx_PyErr_ExceptionMatches2(((PyObject *)(((PyTypeObject*)PyExc_BufferError))), ((PyObject *)(((PyTypeObject*)PyExc_ValueError))));
              if (__pyx_t_22) {
                __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_23) < 0) __PYX_ERR(0, 4995, __pyx_L23_except_error)
                __Pyx_XGOTREF(__pyx_t_8);
                __Pyx_XGOTREF(__pyx_t_16);
                __Pyx_XGOTREF(__pyx_t_23);
                __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_32 = 0; __pyx_t_33 = 0; __pyx_t_34 = 0; __pyx_t_35 = 0; __pyx_t_36 = 0; __pyx_t_37 = 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_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_29); __pyx_t_29 = 0;
                     __Pyx_ExceptionSwap(&__pyx_t_35, &__pyx_t_36, &__pyx_t_37);
                    if ( unlikely(__Pyx_GetException(&__pyx_t_32, &__pyx_t_33, &__pyx_t_34) < 0)) __Pyx_ErrFetch(&__pyx_t_32, &__pyx_t_33, &__pyx_t_34);
                    __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_XGOTREF(__pyx_t_37);
                    __pyx_t_22 = __pyx_lineno; __pyx_t_30 = __pyx_clineno; __pyx_t_31 = __pyx_filename;
                    {
                      __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
                    }
                    __Pyx_XGIVEREF(__pyx_t_35);
                    __Pyx_XGIVEREF(__pyx_t_36);
                    __Pyx_XGIVEREF(__pyx_t_37);
                    __Pyx_ExceptionReset(__pyx_t_35, __pyx_t_36, __pyx_t_37);
                    __Pyx_XGIVEREF(__pyx_t_32);
                    __Pyx_XGIVEREF(__pyx_t_33);
                    __Pyx_XGIVEREF(__pyx_t_34);
                    __Pyx_ErrRestore(__pyx_t_32, __pyx_t_33, __pyx_t_34);
                    __pyx_t_32 = 0; __pyx_t_33 = 0; __pyx_t_34 = 0; __pyx_t_35 = 0; __pyx_t_36 = 0; __pyx_t_37 = 0;
                    __pyx_lineno = __pyx_t_22; __pyx_clineno = __pyx_t_30; __pyx_filename = __pyx_t_31;
                    goto __pyx_L23_except_error;
                  }
                }
              }
              goto __pyx_L23_except_error;
+04996:                         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, 4996, __pyx_L37_error)
                  __Pyx_GOTREF(__pyx_t_19);
+04997:                             QuestDBErrorCode.BadDataFrame,
                  __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4997, __pyx_L37_error)
                  __Pyx_GOTREF(__pyx_t_17);
                  __pyx_t_25 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 4997, __pyx_L37_error)
                  __Pyx_GOTREF(__pyx_t_25);
                  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+04998:                             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, 4998, __pyx_L37_error)
                  __Pyx_GOTREF(__pyx_t_17);
                  __pyx_t_26 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 4998, __pyx_L37_error)
                  __Pyx_GOTREF(__pyx_t_26);
/* … */
                  __pyx_t_21 = 47;
                  #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
                  __pyx_t_21 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_28[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_28[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_28[5]);
                  #endif
                  __pyx_t_22 = 0;
                  #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
                  __pyx_t_22 |= __Pyx_PyUnicode_KIND_04(__pyx_t_28[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_28[5]);
                  #endif
                  __pyx_t_29 = __Pyx_PyUnicode_Join(__pyx_t_28, 6, __pyx_t_21, __pyx_t_22);
                  if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 4998, __pyx_L37_error)
                  __Pyx_GOTREF(__pyx_t_29);
                  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
                  __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
                  __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
                  __pyx_t_24 = 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_24 = 0;
                  }
                  #endif
                  {
                    PyObject *__pyx_callargs[3] = {__pyx_t_15, __pyx_t_25, __pyx_t_29};
                    __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_19, __pyx_callargs+__pyx_t_24, (3-__pyx_t_24) | (__pyx_t_24*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
                    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
                    __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
                    __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
                    if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4996, __pyx_L37_error)
                    __Pyx_GOTREF(__pyx_t_18);
                  }
+04999:                             f'invalid memoryview value: {exc}') from exc
                  __pyx_t_27 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 4999, __pyx_L37_error)
                  __Pyx_GOTREF(__pyx_t_27);
                  __pyx_t_28[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
                  __pyx_t_28[1] = __pyx_t_17;
                  __pyx_t_28[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
                  __pyx_t_28[3] = __pyx_t_26;
                  __pyx_t_28[4] = __pyx_mstate_global->__pyx_kp_u_invalid_memoryview_value;
                  __pyx_t_28[5] = __pyx_t_27;
/* … */
                  __Pyx_Raise(__pyx_t_18, 0, 0, __pyx_v_exc);
                  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
                  __PYX_ERR(0, 4996, __pyx_L37_error)
                }
+05000:                     release_view = True
            __pyx_v_release_view = 1;
+05001:                     blob_len = view.len
            __pyx_t_21 = __pyx_v_view.len;

            __pyx_v_blob_len = __pyx_t_21;
+05002:                     blob_buf = <const char*>view.buf
            __pyx_v_blob_buf = ((char const *)__pyx_v_view.buf);
+05003:                 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)) {
/* … */
          }
+05004:                     b.has_nulls = True
            __pyx_v_b->has_nulls = 1;
+05005:                     continue
            goto __pyx_L15_continue;
 05006:                 else:
+05007:                     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, 5007, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_8);
+05008:                         QuestDBErrorCode.BadDataFrame,
            __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5008, __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, 5008, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_19);
            __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+05009:                         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, 5009, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_18);
            __pyx_t_29 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 5009, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_29);
/* … */
            __pyx_t_21 = 68;
            #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
            __pyx_t_21 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_38[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_38[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_38[5]);
            #endif
            __pyx_t_30 = 0;
            #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
            __pyx_t_30 |= __Pyx_PyUnicode_KIND_04(__pyx_t_38[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_38[5]);
            #endif
            __pyx_t_25 = __Pyx_PyUnicode_Join(__pyx_t_38, 7, __pyx_t_21, __pyx_t_30);
            if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 5009, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_25);
            __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
            __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __pyx_t_24 = 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_24 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[3] = {__pyx_t_16, __pyx_t_19, __pyx_t_25};
              __pyx_t_23 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_24, (3-__pyx_t_24) | (__pyx_t_24*__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_25); __pyx_t_25 = 0;
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
              if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 5007, __pyx_L18_error)
              __Pyx_GOTREF(__pyx_t_23);
            }
            __Pyx_Raise(__pyx_t_23, 0, 0, 0);
            __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
            __PYX_ERR(0, 5007, __pyx_L18_error)
          }
          __pyx_L20:;
 05010:                         'bytes, bytearray, or memoryview, '
+05011:                         f'got {_fqn(type(<object>cell))}.')
            __pyx_t_25 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 5011, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_25);
            __pyx_t_15 = __Pyx_PyUnicode_Unicode(__pyx_t_25); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5011, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 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_29;
            __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__3;
 05012: 
+05013:                 if <size_t>blob_len != width:
          __pyx_t_1 = (((size_t)__pyx_v_blob_len) != __pyx_v_width);

          if (unlikely(__pyx_t_1)) {
/* … */
          }
+05014:                     raise QuestDBError(
            __pyx_t_8 = NULL;
            __Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 5014, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_25);
+05015:                         QuestDBErrorCode.BadDataFrame,
            __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5015, __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, 5015, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_16);
            __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+05016:                         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, 5016, __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, 5016, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_15);
/* … */
            __pyx_t_21 = 54;
            #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
            for (Py_ssize_t i=1; i <= 9; i += 2) {
              Py_ssize_t l = __Pyx_PyUnicode_GET_LENGTH(__pyx_t_39[i]);
              __pyx_t_21 += l;
            }
            #endif
            __pyx_t_30 = 0;
            #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
            __pyx_t_30 |= __Pyx_PyUnicode_KIND_04(__pyx_t_39[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_39[5]);
            #endif
            __pyx_t_26 = __Pyx_PyUnicode_Join(__pyx_t_39, 11, __pyx_t_21, __pyx_t_30);
            if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 5016, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_26);
            __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
            __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
            __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
            __pyx_t_24 = 1;
            #if CYTHON_UNPACK_METHODS
            if (unlikely(PyMethod_Check(__pyx_t_25))) {
              __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_25);
              assert(__pyx_t_8);
              PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_25);
              __Pyx_INCREF(__pyx_t_8);
              __Pyx_INCREF(__pyx__function);
              __Pyx_DECREF_SET(__pyx_t_25, __pyx__function);
              __pyx_t_24 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_16, __pyx_t_26};
              __pyx_t_23 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_25, __pyx_callargs+__pyx_t_24, (3-__pyx_t_24) | (__pyx_t_24*__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_26); __pyx_t_26 = 0;
              __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
              if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 5014, __pyx_L18_error)
              __Pyx_GOTREF(__pyx_t_23);
            }
            __Pyx_Raise(__pyx_t_23, 0, 0, 0);
            __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
            __PYX_ERR(0, 5014, __pyx_L18_error)
+05017:                         f'{type_name} value is exactly {width} bytes, '
            __pyx_t_29 = __Pyx_PyUnicode_Unicode(__pyx_v_type_name); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 5017, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_29);
            __pyx_t_18 = __Pyx_PyUnicode_From_size_t(__pyx_v_width, 0, ' ', 'd'); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5017, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_18);
+05018:                         f'got {blob_len}.')
            __pyx_t_27 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_blob_len, 0, ' ', 'd'); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 5018, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_27);
            __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_29;
            __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_27;
            __pyx_t_39[10] = __pyx_mstate_global->__pyx_kp_u__3;
+05019:                 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));
+05020:                 if b.validity != NULL:
          __pyx_t_1 = (__pyx_v_b->validity != NULL);

          if (__pyx_t_1) {
/* … */
          }
        }
+05021:                     _pyobj_set_validity_bit(b.validity, i)
            __pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
 05022:             finally:
+05023:                 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_37 = 0; __pyx_t_36 = 0; __pyx_t_35 = 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_23); __pyx_t_23 = 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_29); __pyx_t_29 = 0;
            __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
             __Pyx_ExceptionSwap(&__pyx_t_37, &__pyx_t_36, &__pyx_t_35);
            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_37);
            __Pyx_XGOTREF(__pyx_t_36);
            __Pyx_XGOTREF(__pyx_t_35);
            __pyx_t_30 = __pyx_lineno; __pyx_t_22 = __pyx_clineno; __pyx_t_31 = __pyx_filename;
            {
              if (__pyx_v_release_view) {
/* … */
              }
            }
            __Pyx_XGIVEREF(__pyx_t_37);
            __Pyx_XGIVEREF(__pyx_t_36);
            __Pyx_XGIVEREF(__pyx_t_35);
            __Pyx_ExceptionReset(__pyx_t_37, __pyx_t_36, __pyx_t_35);
            __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_37 = 0; __pyx_t_36 = 0; __pyx_t_35 = 0;
            __pyx_lineno = __pyx_t_30; __pyx_clineno = __pyx_t_22; __pyx_filename = __pyx_t_31;
            goto __pyx_L4_error;
          }
          __pyx_L15_continue: {
            if (__pyx_v_release_view) {
/* … */
            }
            goto __pyx_L13_continue;
          }
          __pyx_L19:;
        }
        __pyx_L13_continue:;
      }

+05024:                     PyBuffer_Release(&view)
              PyBuffer_Release((&__pyx_v_view));
/* … */
                PyBuffer_Release((&__pyx_v_view));
/* … */
              PyBuffer_Release((&__pyx_v_view));
 05025: 
+05026:         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) {
/* … */
      }
+05027:             free(b.validity)
        free(__pyx_v_b->validity);
+05028:             b.validity = NULL
        __pyx_v_b->validity = NULL;
+05029:     except:
    /*except:*/ {
      __Pyx_AddTraceback("questdb._client._dataframe_columnar_build_fsb_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_23, &__pyx_t_25, &__pyx_t_26) < 0) __PYX_ERR(0, 5029, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_23);
      __Pyx_XGOTREF(__pyx_t_25);
      __Pyx_XGOTREF(__pyx_t_26);
+05030:         pyobj_built_free(b)
      __pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+05031:         raise
      __Pyx_GIVEREF(__pyx_t_23);
      __Pyx_GIVEREF(__pyx_t_25);
      __Pyx_XGIVEREF(__pyx_t_26);
      __Pyx_ErrRestoreWithState(__pyx_t_23, __pyx_t_25, __pyx_t_26);
      __pyx_t_23 = 0;  __pyx_t_25 = 0;  __pyx_t_26 = 0; 
      __PYX_ERR(0, 5031, __pyx_L6_except_error)
    }
 05032: 
+05033:     return b
  {

    __pyx_r = __pyx_v_b;
  }
  goto __pyx_L0;
 05034: 
 05035: 
+05036: 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_22);
  __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;
}
 05037:         object df,
 05038:         dataframe_plan_t* plan) except -1:
 05039:     """
 05040:     Walk every PyObject-sourced column once and stash typed buffers on
 05041:     `plan.pyobj_built`. Runs after `validate_plan` and before the chunk
 05042:     emission loop in `QuestDB.dataframe()`.
 05043:     """
 05044:     cdef size_t i
 05045:     cdef col_t* col
+05046:     cdef bint any_pyobj = False
  __pyx_v_any_pyobj = 0;
 05047: 
+05048:     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;
+05049:         col = &plan.cols.d[i]
    __pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_i]));
+05050:         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:;

+05051:             any_pyobj = True
      __pyx_v_any_pyobj = 1;
+05052:             break
      goto __pyx_L4_break;
+05053:     if not any_pyobj:
  __pyx_t_4 = (!__pyx_v_any_pyobj);

  if (__pyx_t_4) {
/* … */
  }
+05054:         return 0
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
 05055: 
+05056:     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 *))));
 05057:         plan.col_count, sizeof(pyobj_built_t*))
+05058:     if plan.pyobj_built == NULL:
  __pyx_t_4 = (__pyx_v_plan->pyobj_built == NULL);

  if (unlikely(__pyx_t_4)) {
/* … */
  }
+05059:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 5059, __pyx_L1_error)
 05060: 
+05061:     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;
+05062:         col = &plan.cols.d[i]
    __pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_i]));
+05063:         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) {
/* … */
    }
+05064:             continue
      goto __pyx_L8_continue;
+05065:         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, 5065, __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, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5065, __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;
+05066:         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:;
  }

+05067:             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:
+05068:                 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, 5068, __pyx_L11_error)
          (__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;

 05069:                     col, plan.row_count, col_name)
+05070:             elif col.setup.source == col_source_t.col_source_int_pyobj:
          break;
          case __pyx_e_7questdb_7_client_col_source_float_pyobj:
+05071:                 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;
          }
 05072:                         and col.setup.override_dtype
+05073:                             == 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:;
+05074:                     plan.pyobj_built[i] = \
            (__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;

+05075:                         _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, 5075, __pyx_L11_error)
 05076:                             col, plan.row_count, col_name)
 05077:                 else:
+05078:                     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, 5078, __pyx_L11_error)
/* … */
            (__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;

          }
          __pyx_L19:;
 05079:                         col, plan.row_count, col_name)
+05080:             elif col.setup.source == col_source_t.col_source_float_pyobj:
          break;
          case __pyx_e_7questdb_7_client_col_source_bool_pyobj:
+05081:                 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, 5081, __pyx_L11_error)
          (__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;

 05082:                     col, plan.row_count, col_name)
+05083:             elif col.setup.source == col_source_t.col_source_bool_pyobj:
          break;
          case __pyx_e_7questdb_7_client_col_source_uuid_pyobj:
+05084:                 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, 5084, __pyx_L11_error)
          (__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;

 05085:                     col, plan.row_count, col_name)
+05086:             elif col.setup.source == col_source_t.col_source_uuid_pyobj:
          break;
          case __pyx_e_7questdb_7_client_col_source_ipv4_pyobj:
+05087:                 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, 5087, __pyx_L11_error)
          (__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;

 05088:                     col, plan.row_count, col_name)
+05089:             elif col.setup.source == col_source_t.col_source_ipv4_pyobj:
          break;
          case __pyx_e_7questdb_7_client_col_source_datetime_pyobj:
+05090:                 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, 5090, __pyx_L11_error)
          (__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;

 05091:                     col, plan.row_count, col_name)
+05092:             elif col.setup.source == col_source_t.col_source_datetime_pyobj:
          break;
          case __pyx_e_7questdb_7_client_col_source_bytes_pyobj:
+05093:                 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, 5093, __pyx_L11_error)
          (__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;

 05094:                     col, plan.row_count, col_name)
+05095:             elif col.setup.source == col_source_t.col_source_bytes_pyobj:
          break;
          default: break;
        }
+05096:                 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;
          }
 05097:                         and col.setup.override_dtype
+05098:                             == 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:;
+05099:                     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, 5099, __pyx_L11_error)
            (__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;

 05100:                         col, plan.row_count, col_name, 16, 'UUID')
+05101:                 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;
          }
 05102:                         and col.setup.override_dtype
+05103:                             == 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:;
+05104:                     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, 5104, __pyx_L11_error)
            (__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;

 05105:                         col, plan.row_count, col_name, 32, 'LONG256')
 05106:                 else:
+05107:                     plan.pyobj_built[i] = \
            (__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;

          }
          __pyx_L22:;
+05108:                         _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, 5108, __pyx_L11_error)
 05109:                             col, plan.row_count, col_name)
+05110:         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, 5110, __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_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0; __pyx_t_31 = 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_22); __pyx_t_22 = 0;
             __Pyx_ExceptionSwap(&__pyx_t_29, &__pyx_t_30, &__pyx_t_31);
            if ( unlikely(__Pyx_GetException(&__pyx_t_26, &__pyx_t_27, &__pyx_t_28) < 0)) __Pyx_ErrFetch(&__pyx_t_26, &__pyx_t_27, &__pyx_t_28);
            __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_XGOTREF(__pyx_t_31);
            __pyx_t_12 = __pyx_lineno; __pyx_t_24 = __pyx_clineno; __pyx_t_25 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_oe); __pyx_v_oe = 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_26);
            __Pyx_XGIVEREF(__pyx_t_27);
            __Pyx_XGIVEREF(__pyx_t_28);
            __Pyx_ErrRestore(__pyx_t_26, __pyx_t_27, __pyx_t_28);
            __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0; __pyx_t_31 = 0;
            __pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_24; __pyx_filename = __pyx_t_25;
            goto __pyx_L13_except_error;
          }
        }
      }
+05111:             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, 5111, __pyx_L32_error)
          __Pyx_GOTREF(__pyx_t_16);
+05112:                 QuestDBErrorCode.BadDataFrame,
          __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5112, __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, 5112, __pyx_L32_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+05113:                 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, 5113, __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, 5113, __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__2;
          __pyx_t_20[3] = __pyx_t_19;
          __pyx_t_21 = 13;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_21 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_20[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_20[3]);
          #endif
          __pyx_t_12 = 0;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_12 |= __Pyx_PyUnicode_KIND_04(__pyx_t_20[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_20[3]);
          #endif
          __pyx_t_22 = __Pyx_PyUnicode_Join(__pyx_t_20, 4, __pyx_t_21, __pyx_t_12);
          if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 5113, __pyx_L32_error)
          __Pyx_GOTREF(__pyx_t_22);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
          __pyx_t_23 = 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_23 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_15, __pyx_t_18, __pyx_t_22};
            __pyx_t_14 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_16, __pyx_callargs+__pyx_t_23, (3-__pyx_t_23) | (__pyx_t_23*__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_22); __pyx_t_22 = 0;
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5111, __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, 5111, __pyx_L32_error)
        }
+05114:         except UnicodeEncodeError as ue:
      __pyx_t_24 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_UnicodeEncodeError))));
      if (__pyx_t_24) {
        __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, 5114, __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_31 = 0; __pyx_t_30 = 0; __pyx_t_29 = 0; __pyx_t_28 = 0; __pyx_t_27 = 0; __pyx_t_26 = 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_22); __pyx_t_22 = 0;
             __Pyx_ExceptionSwap(&__pyx_t_28, &__pyx_t_27, &__pyx_t_26);
            if ( unlikely(__Pyx_GetException(&__pyx_t_31, &__pyx_t_30, &__pyx_t_29) < 0)) __Pyx_ErrFetch(&__pyx_t_31, &__pyx_t_30, &__pyx_t_29);
            __Pyx_XGOTREF(__pyx_t_31);
            __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_t_24 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_25 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_ue); __pyx_v_ue = 0;
            }
            __Pyx_XGIVEREF(__pyx_t_28);
            __Pyx_XGIVEREF(__pyx_t_27);
            __Pyx_XGIVEREF(__pyx_t_26);
            __Pyx_ExceptionReset(__pyx_t_28, __pyx_t_27, __pyx_t_26);
            __Pyx_XGIVEREF(__pyx_t_31);
            __Pyx_XGIVEREF(__pyx_t_30);
            __Pyx_XGIVEREF(__pyx_t_29);
            __Pyx_ErrRestore(__pyx_t_31, __pyx_t_30, __pyx_t_29);
            __pyx_t_31 = 0; __pyx_t_30 = 0; __pyx_t_29 = 0; __pyx_t_28 = 0; __pyx_t_27 = 0; __pyx_t_26 = 0;
            __pyx_lineno = __pyx_t_24; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_25;
            goto __pyx_L13_except_error;
          }
        }
      }
      goto __pyx_L13_except_error;
+05115:             raise QuestDBError(
          __pyx_t_16 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 5115, __pyx_L43_error)
          __Pyx_GOTREF(__pyx_t_22);
+05116:                 QuestDBErrorCode.InvalidUtf8,
          __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5116, __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, 5116, __pyx_L43_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+05117:                 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, 5117, __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, 5117, __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__2;
          __pyx_t_20[3] = __pyx_t_19;
          __pyx_t_21 = 13;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_21 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_20[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_20[3]);
          #endif
          __pyx_t_24 = 0;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_24 |= __Pyx_PyUnicode_KIND_04(__pyx_t_20[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_20[3]);
          #endif
          __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_20, 4, __pyx_t_21, __pyx_t_24);
          if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5117, __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_23 = 1;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_22))) {
            __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_22);
            assert(__pyx_t_16);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_22);
            __Pyx_INCREF(__pyx_t_16);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_22, __pyx__function);
            __pyx_t_23 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_16, __pyx_t_15, __pyx_t_17};
            __pyx_t_14 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_22, __pyx_callargs+__pyx_t_23, (3-__pyx_t_23) | (__pyx_t_23*__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_22); __pyx_t_22 = 0;
            if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5115, __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, 5115, __pyx_L43_error)
        }
 05118: 
 05119: 
+05120: 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;
}
 05121:         qwp_chunk* chunk,
 05122:         col_t* col,
 05123:         pyobj_built_t* prebuilt,
 05124:         size_t row_offset,
 05125:         size_t row_count) except -1:
+05126:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 05127:     cdef qwp_validity validity
+05128:     cdef const qwp_validity* validity_ptr = NULL
  __pyx_v_validity_ptr = NULL;
+05129:     cdef bint ok = False
  __pyx_v_ok = 0;
 05130:     cdef int32_t* offsets
 05131:     cdef size_t bytes_len
 05132: 
+05133:     if prebuilt == NULL:
  __pyx_t_1 = (__pyx_v_prebuilt == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+05134:         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, 5134, __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, 5134, __pyx_L1_error)
 05135:             'PyObject str column missing pre-built buffer; '
 05136:             'prebuild phase did not run.')
+05137:     if prebuilt.has_nulls:
  if (__pyx_v_prebuilt->has_nulls) {
/* … */
  }
+05138:         if row_offset % 8 != 0:
    __pyx_t_1 = ((__pyx_v_row_offset % 8) != 0);

    if (unlikely(__pyx_t_1)) {
/* … */
    }
+05139:             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, 5139, __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, 5139, __pyx_L1_error)
 05140:                 'PyObject str column with nulls requires byte-aligned '
 05141:                 'chunk boundaries.')
+05142:         validity.bits = prebuilt.validity + (row_offset // 8)
    __pyx_v_validity.bits = (__pyx_v_prebuilt->validity + (__pyx_v_row_offset / 8));
+05143:         validity.bit_len = row_count
    __pyx_v_validity.bit_len = __pyx_v_row_count;
+05144:         validity_ptr = &validity
    __pyx_v_validity_ptr = (&__pyx_v_validity);
+05145:     offsets = prebuilt.str_offsets + row_offset
  __pyx_v_offsets = (__pyx_v_prebuilt->str_offsets + __pyx_v_row_offset);
+05146:     bytes_len = prebuilt.str_bytes_len
  __pyx_t_4 = __pyx_v_prebuilt->str_bytes_len;

  __pyx_v_bytes_len = __pyx_t_4;
+05147:     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:;
      }
  }
+05148:         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));
      }
 05149:             chunk,
 05150:             col.name.buf,
 05151:             col.name.len,
 05152:             offsets,
 05153:             prebuilt.str_bytes,
 05154:             bytes_len,
 05155:             row_count,
 05156:             validity_ptr,
 05157:             &err)
+05158:     if not ok:
  __pyx_t_1 = (!__pyx_v_ok);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+05159:         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, 5159, __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, 5159, __pyx_L1_error)
 05160: 
 05161: 
+05162: 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;
}
 05163:         qwp_chunk* chunk,
 05164:         col_t* col,
 05165:         pyobj_built_t* prebuilt,
 05166:         size_t row_offset,
 05167:         size_t row_count,
 05168:         size_t elem_size,
 05169:         qwp_numpy_dtype dtype) except -1:
+05170:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 05171:     cdef qwp_validity validity
+05172:     cdef const qwp_validity* validity_ptr = NULL
  __pyx_v_validity_ptr = NULL;
+05173:     cdef bint ok = False
  __pyx_v_ok = 0;
 05174: 
+05175:     if prebuilt == NULL:
  __pyx_t_1 = (__pyx_v_prebuilt == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+05176:         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, 5176, __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, 5176, __pyx_L1_error)
+05177:     if prebuilt.has_nulls:
  if (__pyx_v_prebuilt->has_nulls) {
/* … */
  }
+05178:         if row_offset % 8 != 0:
    __pyx_t_1 = ((__pyx_v_row_offset % 8) != 0);

    if (unlikely(__pyx_t_1)) {
/* … */
    }
+05179:             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, 5179, __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, 5179, __pyx_L1_error)
 05180:                 'PyObject column with nulls requires byte-aligned '
 05181:                 'chunk boundaries.')
+05182:         validity.bits = prebuilt.validity + (row_offset // 8)
    __pyx_v_validity.bits = (__pyx_v_prebuilt->validity + (__pyx_v_row_offset / 8));
+05183:         validity.bit_len = row_count
    __pyx_v_validity.bit_len = __pyx_v_row_count;
+05184:         validity_ptr = &validity
    __pyx_v_validity_ptr = (&__pyx_v_validity);
+05185:     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:;
      }
  }
+05186:         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));
      }
 05187:             chunk,
 05188:             col.name.buf,
 05189:             col.name.len,
 05190:             dtype,
 05191:             (<const uint8_t*>prebuilt.data) + row_offset * elem_size,
 05192:             row_count * elem_size,
 05193:             row_count,
 05194:             validity_ptr,
 05195:             NULL,
 05196:             &err)
+05197:     if not ok:
  __pyx_t_1 = (!__pyx_v_ok);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+05198:         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, 5198, __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, 5198, __pyx_L1_error)
 05199: 
 05200: 
+05201: 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;
}
 05202:         qwp_chunk* chunk,
 05203:         col_t* col,
 05204:         pyobj_built_t* prebuilt,
 05205:         size_t row_offset,
 05206:         size_t row_count) except -1:
+05207:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 05208:     cdef qwp_validity validity
+05209:     cdef const qwp_validity* validity_ptr = NULL
  __pyx_v_validity_ptr = NULL;
+05210:     cdef bint ok = False
  __pyx_v_ok = 0;
 05211: 
+05212:     if prebuilt == NULL:
  __pyx_t_1 = (__pyx_v_prebuilt == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+05213:         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, 5213, __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, 5213, __pyx_L1_error)
+05214:     if prebuilt.has_nulls:
  if (__pyx_v_prebuilt->has_nulls) {
/* … */
  }
+05215:         if row_offset % 8 != 0:
    __pyx_t_1 = ((__pyx_v_row_offset % 8) != 0);

    if (unlikely(__pyx_t_1)) {
/* … */
    }
+05216:             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, 5216, __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, 5216, __pyx_L1_error)
 05217:                 'PyObject bytes column with nulls requires byte-aligned '
 05218:                 'chunk boundaries.')
+05219:         validity.bits = prebuilt.validity + (row_offset // 8)
    __pyx_v_validity.bits = (__pyx_v_prebuilt->validity + (__pyx_v_row_offset / 8));
+05220:         validity.bit_len = row_count
    __pyx_v_validity.bit_len = __pyx_v_row_count;
+05221:         validity_ptr = &validity
    __pyx_v_validity_ptr = (&__pyx_v_validity);
+05222:     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:;
      }
  }
+05223:         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));
      }
 05224:             chunk,
 05225:             col.name.buf,
 05226:             col.name.len,
 05227:             prebuilt.str_offsets + row_offset,
 05228:             prebuilt.str_bytes,
 05229:             prebuilt.str_bytes_len,
 05230:             row_count,
 05231:             validity_ptr,
 05232:             &err)
+05233:     if not ok:
  __pyx_t_1 = (!__pyx_v_ok);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+05234:         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, 5234, __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, 5234, __pyx_L1_error)
 05235: 
 05236: 
+05237: 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__30;
  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;
};
 05238:         qwp_chunk* chunk,
 05239:         col_t* col,
 05240:         size_t row_offset,
 05241:         size_t row_count,
 05242:         qwp_symbol_mode symbol_mode
+05243:             =qwp_symbol_mode_auto) except -1:
  __pyx_mstate_global->__pyx_k__30 = qwp_symbol_mode_auto;

+05244:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+05245:     cdef bint ok = False
  __pyx_v_ok = 0;
+05246:     cdef qwp_arrow_import* imported = col.setup.arrow_import
  __pyx_t_1 = __pyx_v_col->setup->arrow_import;

  __pyx_v_imported = __pyx_t_1;
+05247:     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:;
      }
  }
+05248:         if imported == NULL:
        __pyx_t_2 = (__pyx_v_imported == NULL);

        if (__pyx_t_2) {
/* … */
        }
+05249:             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));
 05250:                 &col.setup.chunks.chunks[0],
 05251:                 &col.setup.arrow_schema,
 05252:                 symbol_mode,
 05253:                 &err)
+05254:         if imported != NULL:
        __pyx_t_2 = (__pyx_v_imported != NULL);

        if (__pyx_t_2) {
/* … */
        }
      }
+05255:             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));
 05256:                 chunk,
 05257:                 col.name.buf,
 05258:                 col.name.len,
 05259:                 imported,
 05260:                 row_offset,
 05261:                 row_count,
 05262:                 &err)
+05263:     col.setup.arrow_import = imported
  __pyx_v_col->setup->arrow_import = __pyx_v_imported;
+05264:     if not ok:
  __pyx_t_2 = (!__pyx_v_ok);

  if (unlikely(__pyx_t_2)) {
/* … */
  }
+05265:         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, 5265, __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, 5265, __pyx_L1_error)
+05266:     return 0
  {

    __pyx_r = 0;
  }
  goto __pyx_L0;
 05267: 
 05268: 
+05269: 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;
}
 05270:     """A planned column's name as text, for a message naming it."""
+05271:     if col.name.buf == NULL:
  __pyx_t_1 = (__pyx_v_col->name.buf == NULL);

  if (__pyx_t_1) {
/* … */
  }
+05272:         return '?'
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_);
        __pyx_r = __pyx_mstate_global->__pyx_kp_u_;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+05273:     return PyUnicode_FromStringAndSize(
  __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, 5273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = ((PyObject*)__pyx_t_2);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_2 = 0;
  goto __pyx_L0;
 05274:         col.name.buf, <Py_ssize_t>col.name.len)
 05275: 
 05276: 
+05277: 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_13);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_append_field", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;











  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 05278:         qwp_chunk* chunk,
 05279:         col_t* col,
 05280:         pyobj_built_t* prebuilt,
 05281:         size_t row_offset,
 05282:         size_t row_count) except -1:
+05283:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+05284:     cdef ArrowArray* arr = &col.setup.chunks.chunks[0]
  __pyx_v_arr = (&(__pyx_v_col->setup->chunks.chunks[0]));
 05285:     cdef ArrowArray* dictionary
+05286:     cdef const void* data = NULL
  __pyx_v_data = NULL;
 05287:     cdef int32_t* offsets
 05288:     cdef int32_t* dict_offsets
 05289:     cdef size_t bytes_len
 05290:     cdef size_t dict_offsets_len
 05291:     cdef size_t dict_bytes_len
 05292:     cdef qwp_validity validity
+05293:     cdef const qwp_validity* validity_ptr = NULL
  __pyx_v_validity_ptr = NULL;
+05294:     cdef bint ok = False
  __pyx_v_ok = 0;
 05295: 
 05296:     cdef qwp_numpy_dtype numpy_dtype
 05297:     cdef size_t element_size
 05298:     cdef qwp_numpy_extras extras
 05299:     cdef const qwp_numpy_extras* extras_ptr
 05300: 
 05301:     # Generic Arrow passthrough owns its complete layout: the native importer
 05302:     # validates and reads the parent buffers and child tree. In particular, a
 05303:     # FixedSizeList legitimately has no buffers[1]. Dispatch it before any
 05304:     # direct-encoder validity or value-buffer read on this side.
+05305:     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) {
/* … */
  }
+05306:         _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, 5306, __pyx_L1_error)

 05307:             chunk, col, row_offset, row_count)
+05308:         return 0
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
 05309: 
 05310:     # pyarrow allocates exactly `n_buffers` pointers, so reading the
 05311:     # value buffer of a column that has fewer reads past the
 05312:     # allocation. The planner turns such a column away, and saying so
 05313:     # here keeps that a property of this read rather than of the checks
 05314:     # upstream of it.
+05315:     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)) {
/* … */
  }
+05316:         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, 5316, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
+05317:             QuestDBErrorCode.BadDataFrame,
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5317, __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, 5317, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+05318:             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, 5318, __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, 5318, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
    __pyx_t_11 = 73;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_11 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10[3]);
    #endif
    __pyx_t_12 = 0;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_12 |= __Pyx_PyUnicode_KIND_04(__pyx_t_10[1]);
    #endif
    __pyx_t_13 = __Pyx_PyUnicode_Join(__pyx_t_10, 5, __pyx_t_11, __pyx_t_12);
    if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 5318, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_14 = 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_14 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_8, __pyx_t_13};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_14, (3-__pyx_t_14) | (__pyx_t_14*__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_13); __pyx_t_13 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5316, __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, 5316, __pyx_L1_error)
+05319:             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, 5319, __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;
 05320:             f'values from.')
+05321:     data = arr.buffers[1]
  __pyx_v_data = (__pyx_v_arr->buffers[1]);
+05322:     validity_ptr = _dataframe_columnar_validity(
  __pyx_t_15 = __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_15 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 5322, __pyx_L1_error)
  __pyx_v_validity_ptr = __pyx_t_15;
 05323:         arr, row_offset, row_count, &validity)
 05324: 
+05325:     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:
+05326:         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:
+05327:             if prebuilt == NULL:
      __pyx_t_1 = (__pyx_v_prebuilt == NULL);

      if (unlikely(__pyx_t_1)) {
/* … */
      }
+05328:                 raise RuntimeError(
        __pyx_t_6 = NULL;
        __pyx_t_14 = 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_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5328, __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, 5328, __pyx_L1_error)
 05329:                     'PyObject bool column missing pre-built bitmap.')
+05330:             if row_offset % 8 != 0:
      __pyx_t_1 = ((__pyx_v_row_offset % 8) != 0);

      if (unlikely(__pyx_t_1)) {
/* … */
      }
+05331:                 raise RuntimeError(
        __pyx_t_6 = NULL;
        __pyx_t_14 = 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_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5331, __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, 5331, __pyx_L1_error)
 05332:                     'PyObject bool column requires byte-aligned chunk boundaries.')
+05333:             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:;
          }
      }
+05334:                 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));
          }
 05335:                     chunk,
 05336:                     col.name.buf,
 05337:                     col.name.len,
 05338:                     (<const uint8_t*>prebuilt.data) + (row_offset // 8),
 05339:                     row_count,
 05340:                     NULL,
 05341:                     &err)
+05342:         elif col.setup.source == col_source_t.col_source_bool_numpy:
      break;
      default:
 05343:             # NumPy bool is byte-per-row; Rust packs to LSB-bitmap
 05344:             # inside qwp_chunk_append_numpy_column.
+05345:             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:;
          }
      }
+05346:                 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));
          }
 05347:                     chunk,
 05348:                     col.name.buf,
 05349:                     col.name.len,
 05350:                     qwp_numpy_dtype.qwp_numpy_bool,
 05351:                     (<const uint8_t*>data) + row_offset,
 05352:                     row_count,
 05353:                     row_count,
 05354:                     validity_ptr,
 05355:                     NULL,
 05356:                     &err)
 05357:         else:
+05358:             raise RuntimeError('Unsupported columnar bool source.')
      __pyx_t_6 = NULL;
      __pyx_t_14 = 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_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5358, __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, 5358, __pyx_L1_error)
      break;
    }
+05359:     elif col.setup.target == col_target_t.col_target_column_i64:
    break;
    case __pyx_e_7questdb_7_client_col_target_column_f64:
+05360:         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;
    }
+05361:             if prebuilt == NULL:
      __pyx_t_1 = (__pyx_v_prebuilt == NULL);

      if (unlikely(__pyx_t_1)) {
/* … */
      }
+05362:                 raise RuntimeError(
        __pyx_t_6 = NULL;
        __pyx_t_14 = 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_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5362, __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, 5362, __pyx_L1_error)
 05363:                     'PyObject int column missing pre-built buffer.')
+05364:             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)) {
/* … */
      }
+05365:                 raise RuntimeError(
        __pyx_t_6 = NULL;
        __pyx_t_14 = 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_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5365, __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, 5365, __pyx_L1_error)
 05366:                     'PyObject int column with nulls requires byte-aligned '
 05367:                     'chunk boundaries.')
+05368:             if prebuilt.has_nulls:
      if (__pyx_v_prebuilt->has_nulls) {
/* … */
        goto __pyx_L20;
      }
+05369:                 validity.bits = prebuilt.validity + (row_offset // 8)
        __pyx_v_validity.bits = (__pyx_v_prebuilt->validity + (__pyx_v_row_offset / 8));
+05370:                 validity.bit_len = row_count
        __pyx_v_validity.bit_len = __pyx_v_row_count;
+05371:                 validity_ptr = &validity
        __pyx_v_validity_ptr = (&__pyx_v_validity);
 05372:             else:
+05373:                 validity_ptr = NULL
      /*else*/ {
        __pyx_v_validity_ptr = NULL;
      }
      __pyx_L20:;
 05374:             # A round-trip claim decides the slot width the prebuild
 05375:             # wrote: IPV4 and CHAR narrow it, `long256` widens it to 32
 05376:             # raw bytes, and GEOHASH keeps the int64 slot and carries
 05377:             # its precision in `extras`. Without a claim the column is
 05378:             # an int64 LONG.
+05379:             numpy_dtype = qwp_numpy_dtype.qwp_numpy_i64
      __pyx_v_numpy_dtype = qwp_numpy_i64;
+05380:             element_size = 8
      __pyx_v_element_size = 8;
+05381:             extras_ptr = NULL
      __pyx_v_extras_ptr = NULL;
+05382:             if col.setup.has_override:
      if (__pyx_v_col->setup->has_override) {
/* … */
      }
+05383:                 numpy_dtype = col.setup.override_dtype
        __pyx_t_16 = __pyx_v_col->setup->override_dtype;

        __pyx_v_numpy_dtype = __pyx_t_16;
+05384:                 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:
+05385:                     element_size = 4
          __pyx_v_element_size = 4;
+05386:                 elif numpy_dtype == qwp_numpy_dtype.qwp_numpy_u16_char:
          break;
          case qwp_numpy_s32:
+05387:                     element_size = 2
          __pyx_v_element_size = 2;
+05388:                 elif numpy_dtype == qwp_numpy_dtype.qwp_numpy_s32:
          break;
          case qwp_numpy_geohash_i64:
+05389:                     element_size = 32
          __pyx_v_element_size = 32;
+05390:                 elif numpy_dtype == qwp_numpy_dtype.qwp_numpy_geohash_i64:
          break;
          default: break;
        }
+05391:                     memset(&extras, 0, sizeof(qwp_numpy_extras))
          (void)(memset((&__pyx_v_extras), 0, (sizeof(struct qwp_numpy_extras))));
+05392:                     extras.geohash_bits = col.setup.override_geohash_bits
          __pyx_t_17 = __pyx_v_col->setup->override_geohash_bits;

          __pyx_v_extras.geohash_bits = __pyx_t_17;
+05393:                     extras_ptr = &extras
          __pyx_v_extras_ptr = (&__pyx_v_extras);
+05394:             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:;
          }
      }
+05395:                 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));
          }
 05396:                     chunk,
 05397:                     col.name.buf,
 05398:                     col.name.len,
 05399:                     numpy_dtype,
 05400:                     (<const uint8_t*>prebuilt.data) + row_offset * element_size,
 05401:                     row_count * element_size,
 05402:                     row_count,
 05403:                     validity_ptr,
 05404:                     extras_ptr,
 05405:                     &err)
 05406:         else:
 05407:             # Rust widens narrow ints to a sentinel-safe wire (i8/i16 → INT,
 05408:             # i32/u32/u64 → LONG); see questdb-rs NumpyDtype::*WidenTo*.
+05409:             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:
+05410:                     col_source_t.col_source_i64_numpy,
        case __pyx_e_7questdb_7_client_col_source_i64_arrow:
 05411:                     col_source_t.col_source_i64_arrow):
+05412:                 numpy_dtype = qwp_numpy_dtype.qwp_numpy_i64
        __pyx_v_numpy_dtype = qwp_numpy_i64;
+05413:                 element_size = 8
        __pyx_v_element_size = 8;
+05414:             elif col.setup.source == col_source_t.col_source_i8_numpy:
        break;
        case __pyx_e_7questdb_7_client_col_source_i16_numpy:
+05415:                 numpy_dtype = qwp_numpy_dtype.qwp_numpy_i8
        __pyx_v_numpy_dtype = qwp_numpy_i8;
+05416:                 element_size = 1
        __pyx_v_element_size = 1;
+05417:             elif col.setup.source == col_source_t.col_source_i16_numpy:
        break;
        case __pyx_e_7questdb_7_client_col_source_i32_numpy:
+05418:                 numpy_dtype = qwp_numpy_dtype.qwp_numpy_i16
        __pyx_v_numpy_dtype = qwp_numpy_i16;
+05419:                 element_size = 2
        __pyx_v_element_size = 2;
+05420:             elif col.setup.source == col_source_t.col_source_i32_numpy:
        break;
        case __pyx_e_7questdb_7_client_col_source_u8_numpy:
+05421:                 numpy_dtype = qwp_numpy_dtype.qwp_numpy_i32
        __pyx_v_numpy_dtype = qwp_numpy_i32;
+05422:                 element_size = 4
        __pyx_v_element_size = 4;
+05423:             elif col.setup.source == col_source_t.col_source_u8_numpy:
        break;
        case __pyx_e_7questdb_7_client_col_source_u16_numpy:
+05424:                 numpy_dtype = qwp_numpy_dtype.qwp_numpy_u8
        __pyx_v_numpy_dtype = qwp_numpy_u8;
+05425:                 element_size = 1
        __pyx_v_element_size = 1;
+05426:             elif col.setup.source == col_source_t.col_source_u16_numpy:
        break;
        case __pyx_e_7questdb_7_client_col_source_u32_numpy:
+05427:                 numpy_dtype = qwp_numpy_dtype.qwp_numpy_u16
        __pyx_v_numpy_dtype = qwp_numpy_u16;
+05428:                 element_size = 2
        __pyx_v_element_size = 2;
+05429:             elif col.setup.source in (
        break;
        case __pyx_e_7questdb_7_client_col_source_u64_numpy:
+05430:                     col_source_t.col_source_u32_numpy,
        case __pyx_e_7questdb_7_client_col_source_u32_arrow:
 05431:                     col_source_t.col_source_u32_arrow):
+05432:                 numpy_dtype = qwp_numpy_dtype.qwp_numpy_u32
        __pyx_v_numpy_dtype = qwp_numpy_u32;
+05433:                 element_size = 4
        __pyx_v_element_size = 4;
+05434:             elif col.setup.source == col_source_t.col_source_u64_numpy:
        break;
        default:
+05435:                 numpy_dtype = qwp_numpy_dtype.qwp_numpy_u64
        __pyx_v_numpy_dtype = qwp_numpy_u64;
+05436:                 element_size = 8
        __pyx_v_element_size = 8;
 05437:             else:
+05438:                 raise RuntimeError('Unsupported columnar int source.')
        __pyx_t_6 = NULL;
        __pyx_t_14 = 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_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5438, __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, 5438, __pyx_L1_error)
        break;
      }
+05439:             extras_ptr = NULL
      __pyx_v_extras_ptr = NULL;
+05440:             if col.setup.has_override:
      if (__pyx_v_col->setup->has_override) {
/* … */
      }
+05441:                 numpy_dtype = col.setup.override_dtype
        __pyx_t_16 = __pyx_v_col->setup->override_dtype;

        __pyx_v_numpy_dtype = __pyx_t_16;
+05442:                 if (numpy_dtype
        switch (__pyx_v_numpy_dtype) {
          case qwp_numpy_geohash_i8:
/* … */
          break;
          default: break;
        }
+05443:                             == qwp_numpy_dtype.qwp_numpy_geohash_i8
          case qwp_numpy_geohash_i16:
 05444:                         or numpy_dtype
+05445:                             == qwp_numpy_dtype.qwp_numpy_geohash_i16
          case qwp_numpy_geohash_i32:
 05446:                         or numpy_dtype
+05447:                             == qwp_numpy_dtype.qwp_numpy_geohash_i32
          case qwp_numpy_geohash_i64:
 05448:                         or numpy_dtype
 05449:                             == qwp_numpy_dtype.qwp_numpy_geohash_i64):
+05450:                     memset(&extras, 0, sizeof(qwp_numpy_extras))
          (void)(memset((&__pyx_v_extras), 0, (sizeof(struct qwp_numpy_extras))));
+05451:                     extras.geohash_bits = col.setup.override_geohash_bits
          __pyx_t_17 = __pyx_v_col->setup->override_geohash_bits;

          __pyx_v_extras.geohash_bits = __pyx_t_17;
+05452:                     extras_ptr = &extras
          __pyx_v_extras_ptr = (&__pyx_v_extras);
+05453:             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:;
+05454:                 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));
          }
 05455:                     chunk,
 05456:                     col.name.buf,
 05457:                     col.name.len,
 05458:                     numpy_dtype,
 05459:                     (<const uint8_t*>data) + row_offset * element_size,
 05460:                     row_count * element_size,
 05461:                     row_count,
 05462:                     validity_ptr,
 05463:                     extras_ptr,
 05464:                     &err)
+05465:     elif col.setup.target == col_target_t.col_target_column_f64:
    break;
    case __pyx_e_7questdb_7_client_col_target_column_ts:
+05466:         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:
+05467:                 col_source_t.col_source_f64_numpy,
      case __pyx_e_7questdb_7_client_col_source_f64_arrow:
 05468:                 col_source_t.col_source_f64_arrow):
+05469:             numpy_dtype = qwp_numpy_dtype.qwp_numpy_f64
      __pyx_v_numpy_dtype = qwp_numpy_f64;
+05470:             element_size = 8
      __pyx_v_element_size = 8;
+05471:             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:;
          }
      }
+05472:                 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));
          }
 05473:                     chunk,
 05474:                     col.name.buf,
 05475:                     col.name.len,
 05476:                     numpy_dtype,
 05477:                     (<const uint8_t*>data) + row_offset * element_size,
 05478:                     row_count * element_size,
 05479:                     row_count,
 05480:                     validity_ptr,
 05481:                     NULL,
 05482:                     &err)
+05483:         elif col.setup.source == col_source_t.col_source_f32_numpy:
      break;
      case __pyx_e_7questdb_7_client_col_source_float_pyobj:
 05484:             # numpy f32 maps directly to a FLOAT column on the wire; the
 05485:             # source stride is 4 bytes per row.
+05486:             numpy_dtype = qwp_numpy_dtype.qwp_numpy_f32
      __pyx_v_numpy_dtype = qwp_numpy_f32;
+05487:             element_size = 4
      __pyx_v_element_size = 4;
+05488:             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:;
          }
      }
+05489:                 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));
          }
 05490:                     chunk,
 05491:                     col.name.buf,
 05492:                     col.name.len,
 05493:                     numpy_dtype,
 05494:                     (<const uint8_t*>data) + row_offset * element_size,
 05495:                     row_count * element_size,
 05496:                     row_count,
 05497:                     validity_ptr,
 05498:                     NULL,
 05499:                     &err)
+05500:         elif col.setup.source == col_source_t.col_source_float_pyobj:
      break;
      default:
+05501:             if prebuilt == NULL:
      __pyx_t_1 = (__pyx_v_prebuilt == NULL);

      if (unlikely(__pyx_t_1)) {
/* … */
      }
+05502:                 raise RuntimeError(
        __pyx_t_6 = NULL;
        __pyx_t_14 = 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_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5502, __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, 5502, __pyx_L1_error)
 05503:                     'PyObject float column missing pre-built buffer.')
+05504:             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)) {
/* … */
      }
+05505:                 raise RuntimeError(
        __pyx_t_6 = NULL;
        __pyx_t_14 = 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_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5505, __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, 5505, __pyx_L1_error)
 05506:                     'PyObject float column with nulls requires byte-aligned '
 05507:                     'chunk boundaries.')
+05508:             if prebuilt.has_nulls:
      if (__pyx_v_prebuilt->has_nulls) {
/* … */
        goto __pyx_L39;
      }
+05509:                 validity.bits = prebuilt.validity + (row_offset // 8)
        __pyx_v_validity.bits = (__pyx_v_prebuilt->validity + (__pyx_v_row_offset / 8));
+05510:                 validity.bit_len = row_count
        __pyx_v_validity.bit_len = __pyx_v_row_count;
+05511:                 validity_ptr = &validity
        __pyx_v_validity_ptr = (&__pyx_v_validity);
 05512:             else:
+05513:                 validity_ptr = NULL
      /*else*/ {
        __pyx_v_validity_ptr = NULL;
      }
      __pyx_L39:;
+05514:             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:;
          }
      }
+05515:                 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));
          }
 05516:                     chunk,
 05517:                     col.name.buf,
 05518:                     col.name.len,
 05519:                     qwp_numpy_dtype.qwp_numpy_f64,
 05520:                     (<const uint8_t*>prebuilt.data) + row_offset * 8,
 05521:                     row_count * 8,
 05522:                     row_count,
 05523:                     validity_ptr,
 05524:                     NULL,
 05525:                     &err)
 05526:         else:
+05527:             raise RuntimeError('Unsupported columnar float source.')
      __pyx_t_6 = NULL;
      __pyx_t_14 = 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_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5527, __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, 5527, __pyx_L1_error)
      break;
    }
+05528:     elif col.setup.target == col_target_t.col_target_column_ts:
    break;
    case __pyx_e_7questdb_7_client_col_target_column_i8:
+05529:         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:
+05530:             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:;
          }
      }
+05531:                 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));
          }
 05532:                     chunk,
 05533:                     col.name.buf,
 05534:                     col.name.len,
 05535:                     qwp_numpy_dtype.qwp_numpy_datetime64_ns,
 05536:                     (<const uint8_t*>data) + row_offset * 8,
 05537:                     row_count * 8,
 05538:                     row_count,
 05539:                     validity_ptr,
 05540:                     NULL,
 05541:                     &err)
+05542:         elif col.setup.source == col_source_t.col_source_dt64us_numpy:
      break;
      case __pyx_e_7questdb_7_client_col_source_dt64ns_tz_arrow:
+05543:             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:;
          }
      }
+05544:                 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));
          }
 05545:                     chunk,
 05546:                     col.name.buf,
 05547:                     col.name.len,
 05548:                     qwp_numpy_dtype.qwp_numpy_datetime64_us,
 05549:                     (<const uint8_t*>data) + row_offset * 8,
 05550:                     row_count * 8,
 05551:                     row_count,
 05552:                     validity_ptr,
 05553:                     NULL,
 05554:                     &err)
+05555:         elif col.setup.source in (
      break;
      case __pyx_e_7questdb_7_client_col_source_datetime_pyobj:
+05556:                 col_source_t.col_source_dt64ns_tz_arrow,
      case __pyx_e_7questdb_7_client_col_source_dt64us_tz_arrow:
 05557:                 col_source_t.col_source_dt64us_tz_arrow):
+05558:             _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, 5558, __pyx_L1_error)

 05559:                 chunk, col, row_offset, row_count)
+05560:             return 0
      {

        __pyx_r = 0;
      }
      goto __pyx_L0;
+05561:         elif col.setup.source == col_source_t.col_source_datetime_pyobj:
      break;
      default:
+05562:             _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, 5562, __pyx_L1_error)

 05563:                 chunk, col, prebuilt, row_offset, row_count, 8,
 05564:                 qwp_numpy_dtype.qwp_numpy_datetime64_us)
+05565:             return 0
      {

        __pyx_r = 0;
      }
      goto __pyx_L0;
 05566:         else:
+05567:             raise RuntimeError('Unsupported columnar timestamp field source.')
      __pyx_t_6 = NULL;
      __pyx_t_14 = 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_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5567, __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, 5567, __pyx_L1_error)
      break;
    }
+05568:     elif col.setup.target in (
    break;
    case __pyx_e_7questdb_7_client_col_target_column_uuid:
+05569:             col_target_t.col_target_column_i8,
    case __pyx_e_7questdb_7_client_col_target_column_i16:
+05570:             col_target_t.col_target_column_i16,
    case __pyx_e_7questdb_7_client_col_target_column_i32:
+05571:             col_target_t.col_target_column_i32,
    case __pyx_e_7questdb_7_client_col_target_column_f32:
 05572:             col_target_t.col_target_column_f32):
+05573:         _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, 5573, __pyx_L1_error)

 05574:             chunk, col, row_offset, row_count)
+05575:         return 0
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+05576:     elif col.setup.target == col_target_t.col_target_column_uuid:
    break;
    case __pyx_e_7questdb_7_client_col_target_column_ipv4:
+05577:         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) {
/* … */
    }
+05578:             _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, 5578, __pyx_L1_error)

 05579:                 chunk, col, prebuilt, row_offset, row_count, 16,
 05580:                 qwp_numpy_dtype.qwp_numpy_s16)
+05581:             return 0
      {

        __pyx_r = 0;
      }
      goto __pyx_L0;
+05582:         _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, 5582, __pyx_L1_error)

 05583:             chunk, col, row_offset, row_count)
+05584:         return 0
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+05585:     elif col.setup.target == col_target_t.col_target_column_ipv4:
    break;
    case __pyx_e_7questdb_7_client_col_target_column_binary:
+05586:         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) {
/* … */
    }
+05587:             _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, 5587, __pyx_L1_error)

 05588:                 chunk, col, prebuilt, row_offset, row_count, 4,
 05589:                 qwp_numpy_dtype.qwp_numpy_u32_ipv4)
+05590:             return 0
      {

        __pyx_r = 0;
      }
      goto __pyx_L0;
+05591:         _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, 5591, __pyx_L1_error)

 05592:             chunk, col, row_offset, row_count)
+05593:         return 0
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+05594:     elif col.setup.target == col_target_t.col_target_column_binary:
    break;
    case __pyx_e_7questdb_7_client_col_target_column_str:
+05595:         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) {
/* … */
    }
 05596:             # A UUID or LONG256 round-trip claim turns the same object
 05597:             # column into fixed-width rows instead of an offsets table.
+05598:             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) {
/* … */
      }
 05599:                     and col.setup.override_dtype
+05600:                         == 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:;
+05601:                 _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, 5601, __pyx_L1_error)

 05602:                     chunk, col, prebuilt, row_offset, row_count, 16,
 05603:                     qwp_numpy_dtype.qwp_numpy_s16)
+05604:                 return 0
        {

          __pyx_r = 0;
        }
        goto __pyx_L0;
+05605:             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) {
/* … */
      }
 05606:                     and col.setup.override_dtype
+05607:                         == 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:;
+05608:                 _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, 5608, __pyx_L1_error)

 05609:                     chunk, col, prebuilt, row_offset, row_count, 32,
 05610:                     qwp_numpy_dtype.qwp_numpy_s32)
+05611:                 return 0
        {

          __pyx_r = 0;
        }
        goto __pyx_L0;
+05612:             _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, 5612, __pyx_L1_error)

 05613:                 chunk, col, prebuilt, row_offset, row_count)
+05614:             return 0
      {

        __pyx_r = 0;
      }
      goto __pyx_L0;
+05615:         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;
    }
 05616:             # The Arrow value buffer is already packed 16- or 32-byte
 05617:             # rows, the layout the claimed kind's NumPy dtype reads, so
 05618:             # it goes out as it stands with the column's own validity.
 05619:             # The plan checks have held it to one zero-offset array.
+05620:             if strncmp(col.setup.arrow_schema.format,
      if (__pyx_t_1) {
/* … */
        goto __pyx_L59;
      }
+05621:                        _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);

+05622:                 numpy_dtype = qwp_numpy_dtype.qwp_numpy_s16
        __pyx_v_numpy_dtype = qwp_numpy_s16;
+05623:                 element_size = 16
        __pyx_v_element_size = 16;
+05624:             elif strncmp(col.setup.arrow_schema.format,
      if (likely(__pyx_t_1)) {
/* … */
        goto __pyx_L59;
      }
+05625:                          _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);

+05626:                 numpy_dtype = qwp_numpy_dtype.qwp_numpy_s32
        __pyx_v_numpy_dtype = qwp_numpy_s32;
+05627:                 element_size = 32
        __pyx_v_element_size = 32;
 05628:             else:
+05629:                 raise RuntimeError(
      /*else*/ {
        __pyx_t_6 = NULL;
        __pyx_t_14 = 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_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5629, __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, 5629, __pyx_L1_error)
      }
      __pyx_L59:;
 05630:                     'Claimed fixed-size binary column is neither 16 nor '
 05631:                     '32 bytes wide.')
+05632:             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:;
          }
      }
+05633:                 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));
          }
 05634:                     chunk,
 05635:                     col.name.buf,
 05636:                     col.name.len,
 05637:                     numpy_dtype,
 05638:                     (<const uint8_t*>data) + row_offset * element_size,
 05639:                     row_count * element_size,
 05640:                     row_count,
 05641:                     validity_ptr,
 05642:                     NULL,
 05643:                     &err)
 05644:         else:
+05645:             raise RuntimeError('Unsupported columnar binary field source.')
    /*else*/ {
      __pyx_t_6 = NULL;
      __pyx_t_14 = 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_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5645, __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, 5645, __pyx_L1_error)
    }
    __pyx_L58:;
+05646:     elif col.setup.target == col_target_t.col_target_column_str:
    break;
    case __pyx_e_7questdb_7_client_col_target_symbol:
+05647:         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) {
/* … */
    }
+05648:             _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, 5648, __pyx_L1_error)

 05649:                 chunk, col, prebuilt, row_offset, row_count)
+05650:             return 0  # err already raised inside on failure
      {

        __pyx_r = 0;
      }
      goto __pyx_L0;
+05651:         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;
    }
+05652:                 col_source_t.col_source_str_i8_cat,
      case __pyx_e_7questdb_7_client_col_source_str_i16_cat:
+05653:                 col_source_t.col_source_str_i16_cat,
      case __pyx_e_7questdb_7_client_col_source_str_i32_cat:
 05654:                 col_source_t.col_source_str_i32_cat):
+05655:             _dataframe_columnar_call_arrow_append(
      __pyx_t_18.__pyx_n = 1;
      __pyx_t_18.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_18); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 5655, __pyx_L1_error)

 05656:                 chunk, col, row_offset, row_count,
 05657:                 qwp_symbol_mode_not_symbol)
+05658:             return 0
      {

        __pyx_r = 0;
      }
      goto __pyx_L0;
+05659:         _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, 5659, __pyx_L1_error)

 05660:             chunk, col, row_offset, row_count)
+05661:         return 0
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+05662:     elif col.setup.target == col_target_t.col_target_symbol:
    break;
    case __pyx_e_7questdb_7_client_col_target_column_decimal:
+05663:         _dataframe_columnar_call_arrow_append(
    __pyx_t_18.__pyx_n = 1;
    __pyx_t_18.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_18); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 5663, __pyx_L1_error)

 05664:             chunk, col, row_offset, row_count,
 05665:             qwp_symbol_mode_symbol)
+05666:         return 0
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+05667:     elif col.setup.target == col_target_t.col_target_column_decimal:
    break;
    default:
+05668:         _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, 5668, __pyx_L1_error)

 05669:             chunk, col, row_offset, row_count)
+05670:         return 0
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
 05671:     else:
+05672:         raise RuntimeError('Unsupported columnar field target.')
    __pyx_t_6 = NULL;
    __pyx_t_14 = 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_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5672, __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, 5672, __pyx_L1_error)
    break;
  }
 05673: 
+05674:     if not ok:
  __pyx_t_1 = (!__pyx_v_ok);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+05675:         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, 5675, __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, 5675, __pyx_L1_error)
 05676: 
 05677: 
+05678: 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;
}
 05679:         qwp_chunk* chunk,
 05680:         col_t* col,
 05681:         pyobj_built_t* prebuilt,
 05682:         size_t row_offset,
 05683:         size_t row_count) except -1:
+05684:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 05685:     cdef const int64_t* data
+05686:     cdef bint ok = False
  __pyx_v_ok = 0;
 05687: 
+05688:     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) {
/* … */
  }
+05689:         if prebuilt == NULL:
    __pyx_t_1 = (__pyx_v_prebuilt == NULL);

    if (unlikely(__pyx_t_1)) {
/* … */
    }
+05690:             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, 5690, __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, 5690, __pyx_L1_error)
 05691:                 'PyObject datetime designated TS missing pre-built buffer.')
+05692:         if prebuilt.has_nulls:
    if (unlikely(__pyx_v_prebuilt->has_nulls)) {
/* … */
    }
+05693:             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, 5693, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
+05694:                 QuestDBErrorCode.BadDataFrame,
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5694, __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, 5694, __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, 5693, __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, 5693, __pyx_L1_error)
 05695:                 'Designated timestamp column cannot contain nulls.')
+05696:         data = <const int64_t*>prebuilt.data
    __pyx_v_data = ((int64_t const *)__pyx_v_prebuilt->data);
+05697:         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:;
        }
    }
+05698:             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));
        }
 05699:                 chunk,
 05700:                 data + row_offset,
 05701:                 row_count,
 05702:                 &err)
+05703:         if not ok:
    __pyx_t_1 = (!__pyx_v_ok);

    if (unlikely(__pyx_t_1)) {
/* … */
    }
+05704:             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, 5704, __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, 5704, __pyx_L1_error)
+05705:         return 0
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
 05706: 
+05707:     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]));
 05708: 
+05709:     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:
+05710:             col_source_t.col_source_dt64ns_numpy,
    case __pyx_e_7questdb_7_client_col_source_dt64ns_tz_arrow:
 05711:             col_source_t.col_source_dt64ns_tz_arrow):
+05712:         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:;
        }
    }
+05713:             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));
        }
 05714:                 chunk,
 05715:                 data + row_offset,
 05716:                 row_count,
 05717:                 &err)
+05718:     elif col.setup.source in (
    break;
    case __pyx_e_7questdb_7_client_col_source_dt64ms_tz_arrow:
+05719:             col_source_t.col_source_dt64us_numpy,
    case __pyx_e_7questdb_7_client_col_source_dt64us_tz_arrow:
 05720:             col_source_t.col_source_dt64us_tz_arrow):
+05721:         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:;
        }
    }
+05722:             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));
        }
 05723:                 chunk,
 05724:                 data + row_offset,
 05725:                 row_count,
 05726:                 &err)
+05727:     elif col.setup.source == col_source_t.col_source_dt64ms_tz_arrow:
    break;
    case __pyx_e_7questdb_7_client_col_source_dt64s_tz_arrow:
+05728:         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:;
        }
    }
+05729:             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));
        }
 05730:                 chunk,
 05731:                 data + row_offset,
 05732:                 row_count,
 05733:                 &err)
+05734:     elif col.setup.source == col_source_t.col_source_dt64s_tz_arrow:
    break;
    default:
+05735:         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:;
        }
    }
+05736:             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));
        }
 05737:                 chunk,
 05738:                 data + row_offset,
 05739:                 row_count,
 05740:                 &err)
 05741:     else:
+05742:         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, 5742, __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, 5742, __pyx_L1_error)
    break;
  }
 05743: 
+05744:     if not ok:
  __pyx_t_1 = (!__pyx_v_ok);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+05745:         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, 5745, __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, 5745, __pyx_L1_error)
 05746: 
 05747: 
 05748: # What `_geohash_override_dtype` answers with besides a
 05749: # `qwp_numpy_dtype` slot.
+05750: cdef int _GEOHASH_DTYPE_NONE = -1
  __pyx_v_7questdb_7_client__GEOHASH_DTYPE_NONE = -1;
+05751: cdef int _GEOHASH_DTYPE_UNSIGNED = -2
  __pyx_v_7questdb_7_client__GEOHASH_DTYPE_UNSIGNED = -2;
 05752: 
 05753: 
+05754: 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;
}
 05755:     """The GEOHASH slot a column of this source goes out in,
 05756:     ``_GEOHASH_DTYPE_UNSIGNED`` for an unsigned integer column, or
 05757:     ``_GEOHASH_DTYPE_NONE`` for anything else.
 05758: 
 05759:     A GEOHASH rides on a signed integer: `qwp_numpy_dtype` names only
 05760:     signed geohash slots. An unsigned column whose claim fits its width
 05761:     has already been given the signed type of the same width by
 05762:     `_dataframe_reinterpret_unsigned_geohash`, so an unsigned column
 05763:     here holds a claim wider than it can carry. It gets its own answer
 05764:     so that the dropped claim is reported rather than left silent.
 05765:     """
+05766:     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;
  }
+05767:             or source == col_source_t.col_source_u16_numpy
    case __pyx_e_7questdb_7_client_col_source_u32_numpy:
+05768:             or source == col_source_t.col_source_u32_numpy
    case __pyx_e_7questdb_7_client_col_source_u64_numpy:
 05769:             or source == col_source_t.col_source_u64_numpy):
+05770:         return _GEOHASH_DTYPE_UNSIGNED
    {

      __pyx_r = __pyx_v_7questdb_7_client__GEOHASH_DTYPE_UNSIGNED;
    }
    goto __pyx_L0;
+05771:     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) {
/* … */
  }
+05772:         return <int>qwp_numpy_dtype.qwp_numpy_geohash_i8
    {

      __pyx_r = ((int)qwp_numpy_geohash_i8);
    }
    goto __pyx_L0;
+05773:     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) {
/* … */
  }
+05774:         return <int>qwp_numpy_dtype.qwp_numpy_geohash_i16
    {

      __pyx_r = ((int)qwp_numpy_geohash_i16);
    }
    goto __pyx_L0;
+05775:     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) {
/* … */
  }
+05776:         return <int>qwp_numpy_dtype.qwp_numpy_geohash_i32
    {

      __pyx_r = ((int)qwp_numpy_geohash_i32);
    }
    goto __pyx_L0;
+05777:     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;
  }
+05778:             or source == col_source_t.col_source_i64_arrow
    case __pyx_e_7questdb_7_client_col_source_int_pyobj:
 05779:             or source == col_source_t.col_source_int_pyobj):
 05780:         # An object column of Python ints — what a masked pandas dtype
 05781:         # becomes — is widened to the 64-bit geohash; the claim carries
 05782:         # the precision, so the storage width no longer has to.
 05783:         #
 05784:         # `i64_arrow` is here because it is the one Arrow integer width
 05785:         # that resolves to `col_target_column_i64` and so reaches the
 05786:         # wire as a raw buffer the append call names a dtype for. The
 05787:         # narrower Arrow widths take their own targets and go to the
 05788:         # native importer as Arrow arrays, which carry no type hint;
 05789:         # `_dataframe_normalize_claimed_arrow` reshapes those instead.
+05790:         return <int>qwp_numpy_dtype.qwp_numpy_geohash_i64
    {

      __pyx_r = ((int)qwp_numpy_geohash_i64);
    }
    goto __pyx_L0;
+05791:     return _GEOHASH_DTYPE_NONE
  {

    __pyx_r = __pyx_v_7questdb_7_client__GEOHASH_DTYPE_NONE;
  }
  goto __pyx_L0;
 05792: 
 05793: 
+05794: 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;
}
 05795:     """The widest precision a GEOHASH slot of this width can hold.
 05796: 
 05797:     Signed carriers preserve their raw two's-complement bits, so their
 05798:     sign bit is available to a byte-aligned GEOHASH. The 64-bit slot
 05799:     stops at 60 because that is the widest GEOHASH QuestDB has.
 05800: 
 05801:     `_attrs_override_fits` states the same four numbers against Arrow
 05802:     types.
 05803:     """
+05804:     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) {
/* … */
  }
+05805:         return 8
    {

      __pyx_r = 8;
    }
    goto __pyx_L0;
+05806:     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) {
/* … */
  }
+05807:         return 16
    {

      __pyx_r = 16;
    }
    goto __pyx_L0;
+05808:     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) {
/* … */
  }
+05809:         return 32
    {

      __pyx_r = 32;
    }
    goto __pyx_L0;
+05810:     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) {
/* … */
  }
+05811:         return 60
    {

      __pyx_r = 60;
    }
    goto __pyx_L0;
+05812:     return -1
  {

    __pyx_r = -1;
  }
  goto __pyx_L0;
 05813: 
 05814: 
+05815: 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;
}
+05816:     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, 5816, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);


  if (__pyx_t_2) {
/* … */
  }
+05817:         return df
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_df);
        __pyx_r = __pyx_v_df;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+05818:     _dataframe_may_import_deps()
  __pyx_t_3 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5818, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+05819:     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, 5819, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_masked_base = __pyx_t_3;
  __pyx_t_3 = 0;
+05820:     convert = []
  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5820, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_convert = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+05821:     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, 5821, __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, 5821, __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, 5821, __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, 5821, __pyx_L1_error)
          #endif
          if (__pyx_t_6 >= __pyx_temp) break;
        }
        __pyx_t_4 = __Pyx_PyList_GET_ITEM_REF(__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, 5821, __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, 5821, __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, 5821, __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, 5821, __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;
 05822:         # pyarrow-backed strings keep their Arrow buffers (resolved as
 05823:         # str_utf8_arrow), so an all-null column survives as a null VARCHAR
 05824:         # instead of collapsing to a skipped all-null object column.
+05825:         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, 5825, __pyx_L1_error)
    if (__pyx_t_2) {
/* … */
      goto __pyx_L6;
    }
+05826:             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, 5826, __pyx_L1_error)

+05827:         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, 5827, __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, 5827, __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:;
+05828:                 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, 5828, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = __Pyx_PyObject_CompareBoolNe_object_str(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_pyarrow, Py_NE); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 5828, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    __pyx_t_2 = __pyx_t_1;

    __pyx_L7_bool_binop_done:;
+05829:             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, 5829, __pyx_L1_error)

+05830:     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, 5830, __pyx_L1_error)
    __pyx_t_2 = (__pyx_temp != 0);
  }

  __pyx_t_1 = (!__pyx_t_2);


  if (__pyx_t_1) {
/* … */
  }
+05831:         return df
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_df);
        __pyx_r = __pyx_v_df;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+05832:     out = df.copy(deep=False)
  __pyx_t_5 = __pyx_v_df;
  __Pyx_INCREF(__pyx_t_5);
  __pyx_t_9 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, Py_False};
    #if CYTHON_VECTORCALL
    __pyx_t_4 = __pyx_mstate_global->__pyx_tuple[2];
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5832, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_4);
    #else
    {
      PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_deep};
      __pyx_t_4 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5832, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    #endif
    __pyx_t_3 = __Pyx_Object_VectorcallMethodKwds((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, 5832, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_v_out = __pyx_t_3;
  __pyx_t_3 = 0;
+05833:     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, 5833, __pyx_L1_error)
      #endif
      if (__pyx_t_6 >= __pyx_temp) break;
    }
    __pyx_t_4 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_3, __pyx_t_6, __Pyx_ReferenceSharing_OwnStrongReference);
    ++__pyx_t_6;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5833, __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;
+05834:         _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, 5834, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5834, __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, 5834, __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, 5834, __pyx_L1_error);
    __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5834, __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, 5834, __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, 5834, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

+05835:     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, 5835, __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, 5835, __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, 5835, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+05836:     return out
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_v_out);
      __pyx_r = __pyx_v_out;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 05837: 
 05838: 
+05839: 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;
}
 05840:         object out, object df, object pos, object value) except -1:
 05841:     # `out[name] = value` trips pandas' chained-assignment refcount
 05842:     # heuristic when called from Cython (the shallow copy looks like a
 05843:     # temporary), spamming FutureWarnings under pandas >= 2.2 warn-CoW
 05844:     # and erroring under `-W error`. Positional `isetitem` performs the
 05845:     # same block replacement without the heuristic; pandas < 1.5 lacks
 05846:     # it but also lacks the warning, so plain setitem stays correct.
+05847:     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, 5847, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+05848:         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, 5848, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 05849:     else:
+05850:         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, 5850, __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, 5850, __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, 5850, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_L3:;
 05851: 
 05852: 
+05853: 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;
}
 05854:     # tz-aware (DatetimeTZ) ms/s designated-`at` columns can't reach the
 05855:     # columnar resolver's source override (the shared classifier rejects
 05856:     # non-ns/us tz units first), so widen them to us here. ArrowDtype ms/s
 05857:     # is widened to micros in Rust by the millis/seconds designated-ts FFI.
 05858:     cdef object dtype, new_dtype, out, at_name
+05859:     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, 5859, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);


  if (__pyx_t_2) {
/* … */
  }
+05860:         return df
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_df);
        __pyx_r = __pyx_v_df;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+05861:     if isinstance(at, str):
  __pyx_t_2 = PyUnicode_Check(__pyx_v_at); 
  if (__pyx_t_2) {
/* … */
    goto __pyx_L4;
  }
+05862:         at_name = at
    __Pyx_INCREF(__pyx_v_at);
    __pyx_v_at_name = __pyx_v_at;
+05863:     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;
  }
+05864:         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:;
    }
+05865:             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, 5865, __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, 5865, __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;
+05866:         except Exception:
      __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
      if (__pyx_t_9) {
        __Pyx_ErrRestore(0,0,0);
+05867:             return df
        {
          PyObject *__pyx_temp;
          {
            __pyx_temp = __pyx_r;
            __Pyx_INCREF(__pyx_v_df);
            __pyx_r = __pyx_v_df;
          }
          __Pyx_XDECREF(__pyx_temp);
        }
        goto __pyx_L10_except_return;
      }
      goto __pyx_L9_except_error;
+05868:         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) {
/* … */
    }
+05869:             return df
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __Pyx_INCREF(__pyx_v_df);
          __pyx_r = __pyx_v_df;
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      goto __pyx_L0;
 05870:     else:
+05871:         return df
  /*else*/ {
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_df);
        __pyx_r = __pyx_v_df;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
  }
  __pyx_L4:;
+05872:     _dataframe_may_import_deps()
  __pyx_t_8 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5872, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+05873:     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:;
  }
+05874:         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, 5874, __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, 5874, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (__pyx_t_3) {
/* … */
      }
+05875:             return df
        {
          PyObject *__pyx_temp;
          {
            __pyx_temp = __pyx_r;
            __Pyx_INCREF(__pyx_v_df);
            __pyx_r = __pyx_v_df;
          }
          __Pyx_XDECREF(__pyx_temp);
        }
        goto __pyx_L20_try_return;
+05876:         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, 5876, __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, 5876, __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;
+05877:     except Exception:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_9) {
      __Pyx_ErrRestore(0,0,0);
+05878:         return df
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __Pyx_INCREF(__pyx_v_df);
          __pyx_r = __pyx_v_df;
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      goto __pyx_L19_except_return;
    }
    goto __pyx_L18_except_error;
+05879:     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, 5879, __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, 5879, __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, 5879, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_2 = (__Pyx_PyObject_Equals_obj_ch115(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_s, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 5879, __pyx_L1_error)
  if (__pyx_t_2) {

  } else {

    __pyx_t_1 = __pyx_t_2;

    goto __pyx_L28_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_PyObject_CompareBoolNe_object_str(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_ms, Py_NE); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 5879, __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) {
/* … */
  }
+05880:         return df
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_df);
        __pyx_r = __pyx_v_df;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+05881:     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, 5881, __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, 5881, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  __pyx_v_new_dtype = __pyx_t_7;
  __pyx_t_7 = 0;
+05882:     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, 5882, __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, 5882, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  __pyx_v_pos = __pyx_t_7;
  __pyx_t_7 = 0;
+05883:     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, 5883, __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) {
/* … */
  }
 05884:         # Duplicate at-column names: leave the frame for the planner
 05885:         # to reject.
+05886:         return df
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_df);
        __pyx_r = __pyx_v_df;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+05887:     out = df.copy(deep=False)
  __pyx_t_8 = __pyx_v_df;
  __Pyx_INCREF(__pyx_t_8);
  __pyx_t_11 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_8, Py_False};
    #if CYTHON_VECTORCALL
    __pyx_t_10 = __pyx_mstate_global->__pyx_tuple[2];
    if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5887, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_10);
    #else
    {
      PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_deep};
      __pyx_t_10 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
      if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5887, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
    }
    #endif
    __pyx_t_7 = __Pyx_Object_VectorcallMethodKwds((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, 5887, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  __pyx_v_out = __pyx_t_7;
  __pyx_t_7 = 0;
+05888:     _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, 5888, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5888, __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, 5888, __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, 5888, __pyx_L1_error);
  __pyx_t_13 = __Pyx_PyObject_GetItem(__pyx_t_8, __pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 5888, __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, 5888, __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, 5888, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

+05889:     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, 5889, __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, 5889, __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, 5889, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+05890:     return out
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_v_out);
      __pyx_r = __pyx_v_out;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 05891: 
 05892: 
+05893: 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;
}
 05894:         object types, object raw_ty, object ty, str kind, object series):
 05895:     """The dtype an Arrow-backed claimed column has to be copied to for
 05896:     the manual planner to honour its claim, or None where the column
 05897:     carries it as it stands.
 05898: 
 05899:     An integer claim reaches the wire as the NumPy dtype named in the
 05900:     append call, so it only lands on columns the planner sends as raw
 05901:     buffers. A column handed to the native Arrow importer instead
 05902:     carries no type hint, and `qwp_chunk_append_arrow_column` takes no
 05903:     per-column type override, so those are the ones that need
 05904:     reshaping.
 05905: 
 05906:     The matching NumPy width is the copy to make where the claim has
 05907:     one: it keeps the column a raw buffer and costs a memcpy, where
 05908:     object dtype costs a boxed Python int per row -- about 100 times
 05909:     more for a column of any size. The caller downgrades a NumPy width
 05910:     to object for a column holding a null, which a NumPy integer dtype
 05911:     cannot express.
 05912: 
 05913:     UUID on a bare 16-byte column and LONG256 on a 32-byte one depend
 05914:     on the column's layout, which is why `series` is passed in. The
 05915:     classifier reads those two claims itself and sends the Arrow value
 05916:     buffer as it stands, so a column that is one zero-offset array
 05917:     needs no copy and gets None; any other layout gets object, the
 05918:     fallback `_dataframe_normalize_claimed_arrow` describes.
 05919: 
 05920:     `_attrs_override_fits` has already held each kind to the Arrow
 05921:     types listed here, so the widths not named are the ones it rejects.
 05922:     """
+05923:     if kind == 'ipv4':
  __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_ipv4, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 5923, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
 05924:         # uint32 resolves to the i64 target and goes out as a raw
 05925:         # buffer, claim and all.
+05926:         return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+05927:     if kind == 'geohash':
  __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_geohash_2, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 5927, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
 05928:         # int64 does the same. int8/16/32 take the narrow BYTE/SHORT/INT
 05929:         # targets, which reach the importer as Arrow arrays; the same
 05930:         # width in NumPy takes the i64 target and the raw-buffer route.
+05931:         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, 5931, __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, 5931, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_1) {
/* … */
    }
+05932:             return None
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __pyx_r = Py_None; __Pyx_INCREF(Py_None);
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      goto __pyx_L0;
+05933:         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, 5933, __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, 5933, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_1) {
/* … */
    }
+05934:             return 'int8'
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_int8);
          __pyx_r = __pyx_mstate_global->__pyx_n_u_int8;
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      goto __pyx_L0;
+05935:         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, 5935, __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, 5935, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_1) {
/* … */
    }
+05936:             return 'int16'
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_int16);
          __pyx_r = __pyx_mstate_global->__pyx_n_u_int16;
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      goto __pyx_L0;
+05937:         return 'int32'
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_int32);
        __pyx_r = __pyx_mstate_global->__pyx_n_u_int32;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+05938:     if kind == 'char':
  __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_char_2, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 5938, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
 05939:         # An Arrow uint16 column goes to the importer, which has no CHAR
 05940:         # hint to read; NumPy uint16 takes the raw-buffer route.
+05941:         return 'uint16'
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_uint16);
        __pyx_r = __pyx_mstate_global->__pyx_n_u_uint16;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+05942:     if kind == 'uuid':
  __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_uuid, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 5942, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
 05943:         # A `pa.uuid()` column states its own type to the importer and
 05944:         # already lands as UUID.
+05945:         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, 5945, __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, 5945, __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, 5945, __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) {
/* … */
    }
+05946:                 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, 5946, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_t_3, __pyx_v_7questdb_7_client__ARROW_EXT_UUID, Py_EQ); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 5946, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    __pyx_t_1 = __pyx_t_5;

    __pyx_L11_bool_binop_done:;
+05947:             return None
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __pyx_r = Py_None; __Pyx_INCREF(Py_None);
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      goto __pyx_L0;
 05948:     # UUID on a bare 16-byte column and LONG256 on a 32-byte one: the
 05949:     # planner sends the Arrow value buffer as it stands when there is
 05950:     # one buffer to send, and object dtype is the fallback for the rest.
 05951:     # `_dataframe_normalize_claimed_arrow` sets out what that costs.
+05952:     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, 5952, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+05953:         return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+05954:     return object
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_builtin_object);
      __pyx_r = __pyx_builtin_object;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 05955: 
 05956: 
+05957: 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;
}
 05958:     """Whether the planner can send this Arrow-backed column's value
 05959:     buffer as it stands.
 05960: 
 05961:     The planner's direct encoders address `buffers[1]` and the validity
 05962:     bitmap from their first byte, and take one array for the whole
 05963:     column, so `_dataframe_columnar_plan_failures` refuses any other
 05964:     layout with "v1 requires one contiguous zero-offset buffer". This
 05965:     asks the same question of the arrays the planner will export: it
 05966:     reads them through the same `pa.Array.from_pandas` call
 05967:     `_dataframe_series_to_arrow_chunks` makes, which for an `ArrowDtype`
 05968:     column hands back the arrays pandas holds without copying them.
 05969:     """
+05970:     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, 5970, __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, 5970, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_array = __pyx_t_1;
  __pyx_t_1 = 0;
 05971:     cdef object buffers
+05972:     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, 5972, __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, 5972, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_5) {
/* … */
  }
+05973:         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, 5973, __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, 5973, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_5) {
/* … */
    }
+05974:             return False
      {

        __pyx_r = 0;
      }
      goto __pyx_L0;
+05975:         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, 5975, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_DECREF_SET(__pyx_v_array, __pyx_t_1);
    __pyx_t_1 = 0;
+05976:     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, 5976, __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, 5976, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_5) {
/* … */
  }
+05977:         return False
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+05978:     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, 5978, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_buffers = __pyx_t_1;
  __pyx_t_1 = 0;
+05979:     return (len(buffers) >= 2
  __pyx_t_6 = PyObject_Length(__pyx_v_buffers); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5979, __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;
  }
+05980:             and buffers[1] is not None
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_buffers, 1, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5980, __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;
  }
+05981:             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, 5981, __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, 5981, __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, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5981, __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;
 05982: 
 05983: 
+05984: 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;
}
 05985:     """The signed GEOHASH slot of this many bytes, or
 05986:     ``_GEOHASH_DTYPE_NONE``."""
+05987:     if width == 1:
  __pyx_t_1 = (__pyx_v_width == 1);

  if (__pyx_t_1) {
/* … */
  }
+05988:         return <int>qwp_numpy_dtype.qwp_numpy_geohash_i8
    {

      __pyx_r = ((int)qwp_numpy_geohash_i8);
    }
    goto __pyx_L0;
+05989:     if width == 2:
  __pyx_t_1 = (__pyx_v_width == 2);

  if (__pyx_t_1) {
/* … */
  }
+05990:         return <int>qwp_numpy_dtype.qwp_numpy_geohash_i16
    {

      __pyx_r = ((int)qwp_numpy_geohash_i16);
    }
    goto __pyx_L0;
+05991:     if width == 4:
  __pyx_t_1 = (__pyx_v_width == 4);

  if (__pyx_t_1) {
/* … */
  }
+05992:         return <int>qwp_numpy_dtype.qwp_numpy_geohash_i32
    {

      __pyx_r = ((int)qwp_numpy_geohash_i32);
    }
    goto __pyx_L0;
+05993:     if width == 8:
  __pyx_t_1 = (__pyx_v_width == 8);

  if (__pyx_t_1) {
/* … */
  }
+05994:         return <int>qwp_numpy_dtype.qwp_numpy_geohash_i64
    {

      __pyx_r = ((int)qwp_numpy_geohash_i64);
    }
    goto __pyx_L0;
+05995:     return _GEOHASH_DTYPE_NONE
  {

    __pyx_r = __pyx_v_7questdb_7_client__GEOHASH_DTYPE_NONE;
  }
  goto __pyx_L0;
 05996: 
 05997: 
+05998: 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;
}
 05999:     """The precision `schema_overrides` gives this column as a GEOHASH,
 06000:     or ``None`` when it leaves the column out or names another kind.
 06001: 
 06002:     The overrides are validated by the time this runs, so a GEOHASH
 06003:     entry is always a ``('geohash', bits)`` pair.
 06004:     """
 06005:     cdef object override
+06006:     if not schema_overrides:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_schema_overrides); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6006, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);


  if (__pyx_t_2) {
/* … */
  }
+06007:         return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+06008:     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, 6008, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_v_override = __pyx_t_3;
  __pyx_t_3 = 0;
+06009:     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, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6009, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_geohash_2, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6009, __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) {
/* … */
  }
+06010:         return override[1]
    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_override, 1, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6010, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_3;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_3 = 0;
    goto __pyx_L0;
+06011:     return None
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 06012: 
 06013: 
+06014: 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 */
 06015:     """The signed pyarrow integer type of this many bytes."""
+06016:     if width == 1:
  __pyx_t_1 = (__pyx_v_width == 1);

  if (__pyx_t_1) {
/* … */
  }
+06017:         return _PYARROW.int8()
    __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, 6017, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+06018:     if width == 2:
  __pyx_t_1 = (__pyx_v_width == 2);

  if (__pyx_t_1) {
/* … */
  }
+06019:         return _PYARROW.int16()
    __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, 6019, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+06020:     if width == 4:
  __pyx_t_1 = (__pyx_v_width == 4);

  if (__pyx_t_1) {
/* … */
  }
+06021:         return _PYARROW.int32()
    __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, 6021, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+06022:     return _PYARROW.int64()
  __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, 6022, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_2;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_2 = 0;
  goto __pyx_L0;
 06023: 
 06024: 
+06025: 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_9___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_9___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_9___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_9___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_9___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 6025, __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_9___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash {
  PyObject_HEAD
  PyObject *__pyx_v_schema_overrides;
};

 06026:         object df, object schema_overrides):
 06027:     """A copy of the frame in which each unsigned integer column bound
 06028:     for GEOHASH is the signed integer of the same width, holding the
 06029:     same bits.
 06030: 
 06031:     Both write routes carry a GEOHASH only on a signed integer, and the
 06032:     native Arrow importer refuses an unsigned column outright, so these
 06033:     columns are given the signed type before either route looks at the
 06034:     frame. A GEOHASH value is its bit pattern, so the server receives
 06035:     exactly the bits the unsigned column held. Arrow columns become
 06036:     views of each chunk, so no data is copied. A NumPy column of a
 06037:     pandas frame is viewed as signed too, but pandas copies the view
 06038:     into a new block when it is set back into the frame. An 8- or
 06039:     16-bit polars column on polars older than 1.39 refuses to
 06040:     reinterpret, so it is copied by a wrapping cast (see
 06041:     `_polars_reinterpret_unsigned_geohash`).
 06042: 
 06043:     A column is bound for GEOHASH when `schema_overrides` names it
 06044:     ``('geohash', bits)``, or when it carries a GEOHASH claim in
 06045:     ``df.attrs['questdb']`` and `schema_overrides` does not name it:
 06046:     the override outranks the claim. The claim is how a frame saved
 06047:     from version 5.0 of this client arrives, since its plain
 06048:     `to_pandas()` returned a GEOHASH column as an unsigned NumPy
 06049:     integer, and `convert_dtypes(dtype_backend='pyarrow')` turns that
 06050:     into an unsigned Arrow column. An override can name an unsigned
 06051:     column in any frame that takes overrides, so pyarrow and polars
 06052:     frames are covered too. A one-shot stream, such as a
 06053:     `RecordBatchReader`, is read only as the write goes, so its
 06054:     columns keep their own type.
 06055: 
 06056:     Only a claim the column's width can carry is taken this way. A
 06057:     column whose claim is dropped goes out as its own type, so its
 06058:     values have to stay as they are. An override is taken at any
 06059:     precision: one too wide for the column is refused by the importer,
 06060:     which names the range the column can hold. An override of another
 06061:     kind leaves the column alone, since 'ipv4' and 'char' need the
 06062:     unsigned type to apply.
 06063:     """
+06064:     cdef object names_geohash = None
  __Pyx_INCREF(Py_None);
  __pyx_v_names_geohash = Py_None;
+06065:     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, 6065, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+06066:         return _pandas_reinterpret_unsigned_geohash(df, schema_overrides)
    __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, 6066, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_3;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_3 = 0;
    goto __pyx_L0;
+06067:     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, 6067, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
 06068:         names_geohash = any(
+06069:             _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_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, 6069, __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_9___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, 6069, __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, 6069, __pyx_L1_error)
/* … */
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_schema_overrides)) { __Pyx_RaiseClosureNameError("schema_overrides"); __PYX_ERR(0, 6069, __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, 6069, __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) {
/* … */
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __Pyx_INCREF(Py_True);
          __pyx_r = Py_True;
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
/* … */
    }
/* … */
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(Py_False);
        __pyx_r = Py_False;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    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, 6069, __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, 6069, __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_10_genexpr {
  PyObject_HEAD
  struct __pyx_obj_7questdb_7_client___pyx_scope_struct_9___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash *__pyx_outer_scope;
  PyObject *__pyx_genexpr_arg_0;
  PyObject *__pyx_v_name;
};

+06070:             for name in schema_overrides)
  if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 6070, __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, 6070, __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, 6070, __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, 6070, __pyx_L1_error)
          #endif
          if (__pyx_t_2 >= __pyx_temp) break;
        }
        __pyx_t_4 = __Pyx_PyList_GET_ITEM_REF(__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, 6070, __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, 6070, __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, 6070, __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*/ {
+06071:     if not names_geohash:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_names_geohash); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6071, __pyx_L1_error)
  __pyx_t_4 = (!__pyx_t_1);


  if (__pyx_t_4) {
/* … */
  }
+06072:         return df
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_df);
        __pyx_r = __pyx_v_df;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+06073:     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, 6073, __pyx_L1_error)
  if (__pyx_t_4) {
/* … */
  }
+06074:         return _polars_reinterpret_unsigned_geohash(df, schema_overrides)
    __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, 6074, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_3;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_3 = 0;
    goto __pyx_L0;
 06075:     # Checked by module before pyarrow is asked, so a frame of another
 06076:     # kind never makes this import pyarrow.
+06077:     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, 6077, __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, 6077, __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, 6077, __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) {
/* … */
  }
+06078:             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, 6078, __pyx_L1_error)
  if (__pyx_t_1) {

  } else {

    __pyx_t_4 = __pyx_t_1;

    goto __pyx_L8_bool_binop_done;
  }
+06079:             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, 6079, __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, 6079, __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:;
+06080:         return _pyarrow_reinterpret_unsigned_geohash(df, schema_overrides)
    __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, 6080, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_5;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_5 = 0;
    goto __pyx_L0;
+06081:     return df
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_v_df);
      __pyx_r = __pyx_v_df;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 06082: 
 06083: 
+06084: 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_9genexpr18__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_9genexpr18__pyx_v_chunk);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 06085:         object df, object schema_overrides):
 06086:     """`_dataframe_reinterpret_unsigned_geohash` for a pandas frame."""
 06087:     cdef object cols_meta, arrow_dtype, dtype, meta, bits, ty, col
 06088:     cdef object chunked, out
 06089:     cdef list convert
 06090:     cdef Py_ssize_t width
 06091:     cdef int slot
 06092:     cdef bint overridden
+06093:     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, 6093, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_cols_meta = __pyx_t_1;
  __pyx_t_1 = 0;
+06094:     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, 6094, __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, 6094, __pyx_L1_error)
  __pyx_t_3 = (!__pyx_t_4);



  __pyx_t_2 = __pyx_t_3;

  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+06095:         return df
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_df);
        __pyx_r = __pyx_v_df;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+06096:     _dataframe_may_import_deps()
  __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6096, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+06097:     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, 6097, __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;
+06098:     convert = []
  __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6098, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_v_convert = ((PyObject*)__pyx_t_5);
  __pyx_t_5 = 0;
 06099:     # Walked by position rather than by label: `dtypes[name]` on a frame
 06100:     # with duplicate column names hands back a Series, not a dtype.
+06101:     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, 6101, __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, 6101, __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, 6101, __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, 6101, __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, 6101, __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, 6101, __pyx_L1_error)
          #endif
          if (__pyx_t_10 >= __pyx_temp) break;
        }
        __pyx_t_1 = __Pyx_PyList_GET_ITEM_REF(__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, 6101, __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, 6101, __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, 6101, __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, 6101, __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_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6101, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_t_7);
        __pyx_t_6 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6101, __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, 6101, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_6 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6101, __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, 6101, __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, 6101, __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, 6101, __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, 6101, __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;
+06102:         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, 6102, __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, 6102, __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, 6102, __pyx_L1_error)

    __pyx_t_2 = __pyx_t_3;

    __pyx_L10_bool_binop_done:;
    __pyx_v_overridden = __pyx_t_2;
+06103:         if overridden:
    if (__pyx_v_overridden) {
/* … */
      goto __pyx_L12;
    }
+06104:             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, 6104, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_bits, __pyx_t_1);
      __pyx_t_1 = 0;
+06105:             if bits is None:
      __pyx_t_2 = (__pyx_v_bits == Py_None);
      if (__pyx_t_2) {
/* … */
      }
+06106:                 continue
        goto __pyx_L6_continue;
 06107:         else:
+06108:             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, 6108, __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, 6108, __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;
+06109:             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, 6109, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PyObject_CompareBoolNe_str_str(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_geohash_2, Py_NE); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6109, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (__pyx_t_2) {
/* … */
      }
+06110:                 continue
        goto __pyx_L6_continue;
+06111:             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, 6111, __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, 6111, __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, 6111, __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:;
+06112:         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, 6112, __pyx_L1_error)

    __pyx_t_2 = __pyx_t_3;

    __pyx_L18_bool_binop_done:;
    if (__pyx_t_2) {
/* … */
      goto __pyx_L17;
    }
+06113:             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, 6113, __pyx_L1_error)
      __pyx_t_3 = (!__pyx_t_2);


      if (__pyx_t_3) {
/* … */
      }
+06114:                 continue
        goto __pyx_L6_continue;
+06115:             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, 6115, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_ty, __pyx_t_1);
      __pyx_t_1 = 0;
+06116:             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, 6116, __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, 6116, __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, 6116, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_2 = (!__pyx_t_3);


      if (__pyx_t_2) {
/* … */
      }
+06117:                 continue
        goto __pyx_L6_continue;
+06118:             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, 6118, __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, 6118, __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, 6118, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_v_width = __pyx_t_14;
+06119:         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, 6119, __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, 6119, __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, 6119, __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, 6119, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = (__Pyx_PyObject_Equals_obj_ch117(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_u_2, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6119, __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;
    }
+06120:             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, 6120, __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, 6120, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_width = __pyx_t_14;
 06121:         else:
+06122:             continue
    /*else*/ {
      goto __pyx_L6_continue;
    }
    __pyx_L17:;
+06123:         slot = _geohash_slot_for_width(width)
    __pyx_v_slot = __pyx_f_7questdb_7_client__geohash_slot_for_width(__pyx_v_width);
+06124:         if slot == _GEOHASH_DTYPE_NONE:
    __pyx_t_2 = (__pyx_v_slot == __pyx_v_7questdb_7_client__GEOHASH_DTYPE_NONE);

    if (__pyx_t_2) {
/* … */
    }
+06125:             continue
      goto __pyx_L6_continue;
 06126:         # An override is taken at any precision, a claim only at one the
 06127:         # width can carry; see `_dataframe_reinterpret_unsigned_geohash`.
+06128:         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) {
/* … */
    }
+06129:                 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, 6129, __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;
    }
+06130:                 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, 6130, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_CompareBoolLe_int_int(__pyx_mstate_global->__pyx_int_1, __pyx_t_1, Py_LE); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 6130, __pyx_L1_error)
    if (__pyx_t_4) {
      __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_f_7questdb_7_client__geohash_dtype_max_bits(__pyx_v_slot)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6130, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_4 = __Pyx_PyObject_CompareBoolLe_int_int(__pyx_t_1, __pyx_t_7, Py_LE); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 6130, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = (!__pyx_t_4);



    __pyx_t_2 = __pyx_t_3;

    __pyx_L26_bool_binop_done:;
+06131:             continue
      goto __pyx_L6_continue;
+06132:         convert.append((pos, width))
    __pyx_t_1 = PyLong_FromSsize_t(__pyx_v_width); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6132, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6132, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_INCREF(__pyx_v_pos);
    __Pyx_GIVEREF(__pyx_v_pos);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_pos) != (0)) __PYX_ERR(0, 6132, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_1);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1) != (0)) __PYX_ERR(0, 6132, __pyx_L1_error);
    __pyx_t_1 = 0;
    __pyx_t_15 = __Pyx_PyList_Append(__pyx_v_convert, __pyx_t_7); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(0, 6132, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

+06133:     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, 6133, __pyx_L1_error)
    __pyx_t_2 = (__pyx_temp != 0);
  }

  __pyx_t_3 = (!__pyx_t_2);


  if (__pyx_t_3) {
/* … */
  }
+06134:         return df
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_df);
        __pyx_r = __pyx_v_df;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+06135:     out = df.copy(deep=False)
  __pyx_t_8 = __pyx_v_df;
  __Pyx_INCREF(__pyx_t_8);
  __pyx_t_9 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_8, Py_False};
    #if CYTHON_VECTORCALL
    __pyx_t_7 = __pyx_mstate_global->__pyx_tuple[2];
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6135, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_7);
    #else
    {
      PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_deep};
      __pyx_t_7 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
      if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6135, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
    }
    #endif
    __pyx_t_5 = __Pyx_Object_VectorcallMethodKwds((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_7);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  }
  __pyx_v_out = __pyx_t_5;
  __pyx_t_5 = 0;
+06136:     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, 6136, __pyx_L1_error)
      #endif
      if (__pyx_t_10 >= __pyx_temp) break;
    }
    __pyx_t_7 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_5, __pyx_t_10, __Pyx_ReferenceSharing_OwnStrongReference);
    ++__pyx_t_10;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6136, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if ((likely(PyTuple_CheckExact(__pyx_t_7))) || (PyList_CheckExact(__pyx_t_7))) {
      PyObject* sequence = __pyx_t_7;
      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, 6136, __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_1 = PyTuple_GET_ITEM(sequence, 1);
        __Pyx_INCREF(__pyx_t_1);
      } else {
        __pyx_t_8 = __Pyx_PyList_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6136, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_t_8);
        __pyx_t_1 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6136, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_t_1);
      }
      #else
      __pyx_t_8 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6136, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6136, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      #endif
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_6 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6136, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 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_1 = __pyx_t_13(__pyx_t_6); if (unlikely(!__pyx_t_1)) goto __pyx_L33_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_1);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_6), 2) < (0)) __PYX_ERR(0, 6136, __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, 6136, __pyx_L1_error)
      __pyx_L34_unpacking_done:;
    }
    __pyx_t_14 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_14 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 6136, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 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;
+06137:         col = df.iloc[:, pos]
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 6137, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_pos);
    __Pyx_GIVEREF(__pyx_v_pos);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_pos) != (0)) __PYX_ERR(0, 6137, __pyx_L1_error);
    __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF_SET(__pyx_v_col, __pyx_t_8);
    __pyx_t_8 = 0;
+06138:         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, 6138, __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, 6138, __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;
    }
+06139:             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, 6139, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_XDECREF_SET(__pyx_v_ty, __pyx_t_8);
      __pyx_t_8 = 0;
+06140:             chunked = col.array.__arrow_array__()
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_col, __pyx_mstate_global->__pyx_n_u_array); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6140, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_1 = __pyx_t_7;
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_9 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_1, 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_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6140, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
      }
      __Pyx_XDECREF_SET(__pyx_v_chunked, __pyx_t_8);
      __pyx_t_8 = 0;
+06141:             _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, 6141, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

 06142:                 out, df, pos,
+06143:                 _PANDAS.arrays.ArrowExtensionArray(_PYARROW.chunked_array(
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PANDAS, __pyx_mstate_global->__pyx_n_u_arrays); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6143, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = __pyx_t_1;
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_12 = __pyx_v_7questdb_7_client__PYARROW;
      __Pyx_INCREF(__pyx_t_12);
      { /* enter inner scope */
+06144:                     [chunk.view(ty) for chunk in chunked.chunks],
        __pyx_t_16 = PyList_New(0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 6144, __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, 6144, __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, 6144, __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, 6144, __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, 6144, __pyx_L40_error)
                #endif
                if (__pyx_t_14 >= __pyx_temp) break;
              }
              __pyx_t_17 = __Pyx_PyList_GET_ITEM_REF(__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, 6144, __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, 6144, __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, 6144, __pyx_L40_error)
                PyErr_Clear();
              }
              break;
            }
          }
          __Pyx_GOTREF(__pyx_t_17);
          __Pyx_XDECREF_SET(__pyx_9genexpr18__pyx_v_chunk, __pyx_t_17);
          __pyx_t_17 = 0;
          __pyx_t_19 = __pyx_9genexpr18__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, 6144, __pyx_L40_error)
            __Pyx_GOTREF(__pyx_t_17);
          }
          __Pyx_GIVEREF(__pyx_t_17);
          if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_t_16, __pyx_t_17))) __PYX_ERR(0, 6144, __pyx_L40_error)
          __pyx_t_17 = 0;
        }
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        __Pyx_XDECREF(__pyx_9genexpr18__pyx_v_chunk); __pyx_9genexpr18__pyx_v_chunk = 0;
        goto __pyx_L44_exit_scope;
        __pyx_L40_error:;
        __Pyx_XDECREF(__pyx_9genexpr18__pyx_v_chunk); __pyx_9genexpr18__pyx_v_chunk = 0;
        goto __pyx_L1_error;
        __pyx_L44_exit_scope:;
      } /* exit inner scope */
+06145:                     type=ty)))
      __pyx_t_9 = 0;
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_12, __pyx_t_16, __pyx_v_ty};
        #if CYTHON_VECTORCALL
        __pyx_t_18 = __pyx_mstate_global->__pyx_tuple[10];
        if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 6143, __pyx_L1_error)
        __Pyx_INCREF(__pyx_t_18);
        #else
        {
          PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_type};
          __pyx_t_18 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
          if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 6143, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
        }
        #endif
        __pyx_t_6 = __Pyx_Object_VectorcallMethodKwds((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, 6143, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
      }
      __pyx_t_9 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __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_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6143, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
      }
 06146:         else:
+06147:             _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, 6147, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

    }
    __pyx_L35:;
+06148:                 out, df, pos, col.to_numpy().view(f'int{width * 8}'))
      __pyx_t_7 = __pyx_v_col;
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_9 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, 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_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6148, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
      }
      __pyx_t_1 = __pyx_t_6;
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_7 = __Pyx_PyUnicode_From_Py_ssize_t((__pyx_v_width * 8), 0, ' ', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6148, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_18 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_n_u_int, __pyx_t_7); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 6148, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_9 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_1, __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_1); __pyx_t_1 = 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, 6148, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
      }
+06149:     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, 6149, __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, 6149, __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, 6149, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+06150:     return out
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_v_out);
      __pyx_r = __pyx_v_out;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 06151: 
 06152: 
+06153: 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_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_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_9genexpr19__pyx_v_chunk);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 06154:         object table, object schema_overrides):
 06155:     """`_dataframe_reinterpret_unsigned_geohash` for a pyarrow `Table`
 06156:     or `RecordBatch`.
 06157: 
 06158:     Each retyped field keeps its name, nullability and metadata, and
 06159:     the schema keeps its own metadata, so everything the importer reads
 06160:     from them arrives as it was.
 06161:     """
+06162:     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, 6162, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_schema = __pyx_t_1;
  __pyx_t_1 = 0;
+06163:     cdef object columns = None
  __Pyx_INCREF(Py_None);
  __pyx_v_columns = Py_None;
 06164:     cdef object field, ty, col
 06165:     cdef Py_ssize_t i, width
+06166:     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, 6166, __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;
+06167:         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, 6167, __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, 6167, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XDECREF_SET(__pyx_v_field, __pyx_t_1);
    __pyx_t_1 = 0;
+06168:         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, 6168, __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, 6168, __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) {
/* … */
    }
+06169:             continue
      goto __pyx_L3_continue;
+06170:         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, 6170, __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, 6170, __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, 6170, __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, 6170, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_10 = (!__pyx_t_8);


    if (__pyx_t_10) {
/* … */
    }
+06171:             continue
      goto __pyx_L3_continue;
+06172:         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, 6172, __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, 6172, __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, 6172, __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, 6172, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_v_width = __pyx_t_11;
+06173:         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) {
/* … */
    }
+06174:             continue
      goto __pyx_L3_continue;
+06175:         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, 6175, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_XDECREF_SET(__pyx_v_ty, __pyx_t_6);
    __pyx_t_6 = 0;
+06176:         if columns is None:
    __pyx_t_10 = (__pyx_v_columns == Py_None);
    if (__pyx_t_10) {
/* … */
    }
+06177:             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, 6177, __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, 6177, __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;
+06178:         col = columns[i]
    __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_columns, __pyx_v_i, Py_ssize_t, 1, PyLong_FromSsize_t, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6178, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XDECREF_SET(__pyx_v_col, __pyx_t_5);
    __pyx_t_5 = 0;
+06179:         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, 6179, __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, 6179, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__pyx_t_10) {
/* … */
      goto __pyx_L9;
    }
+06180:             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, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 6180, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+06181:                 [chunk.view(ty) for chunk in col.chunks], type=ty)
        __pyx_t_9 = PyList_New(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6181, __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, 6181, __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, 6181, __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, 6181, __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, 6181, __pyx_L12_error)
                #endif
                if (__pyx_t_11 >= __pyx_temp) break;
              }
              __pyx_t_1 = __Pyx_PyList_GET_ITEM_REF(__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, 6181, __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, 6181, __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, 6181, __pyx_L12_error)
                PyErr_Clear();
              }
              break;
            }
          }
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_XDECREF_SET(__pyx_9genexpr19__pyx_v_chunk, __pyx_t_1);
          __pyx_t_1 = 0;
          __pyx_t_14 = __pyx_9genexpr19__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, 6181, __pyx_L12_error)
            __Pyx_GOTREF(__pyx_t_1);
          }
          __Pyx_GIVEREF(__pyx_t_1);
          if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_t_9, __pyx_t_1))) __PYX_ERR(0, 6181, __pyx_L12_error)
          __pyx_t_1 = 0;
        }
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_XDECREF(__pyx_9genexpr19__pyx_v_chunk); __pyx_9genexpr19__pyx_v_chunk = 0;
        goto __pyx_L16_exit_scope;
        __pyx_L12_error:;
        __Pyx_XDECREF(__pyx_9genexpr19__pyx_v_chunk); __pyx_9genexpr19__pyx_v_chunk = 0;
        goto __pyx_L1_error;
        __pyx_L16_exit_scope:;
      } /* exit inner scope */
/* … */
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_9, __pyx_v_ty};
        #if CYTHON_VECTORCALL
        __pyx_t_12 = __pyx_mstate_global->__pyx_tuple[10];
        if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6180, __pyx_L1_error)
        __Pyx_INCREF(__pyx_t_12);
        #else
        {
          PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_type};
          __pyx_t_12 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
          if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6180, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
        }
        #endif
        __pyx_t_5 = __Pyx_Object_VectorcallMethodKwds((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, 6180, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
 06182:         else:
+06183:             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, 6183, __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, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 6183, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __pyx_L9:;
+06184:         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, 6184, __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, 6184, __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, 6184, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __Pyx_DECREF_SET(__pyx_v_schema, __pyx_t_5);
    __pyx_t_5 = 0;
    __pyx_L3_continue:;
  }


+06185:     if columns is None:
  __pyx_t_10 = (__pyx_v_columns == Py_None);
  if (__pyx_t_10) {
/* … */
  }
+06186:         return table
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_table);
        __pyx_r = __pyx_v_table;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+06187:     return type(table).from_arrays(columns, schema=schema)
  __pyx_t_6 = ((PyObject *)Py_TYPE(__pyx_v_table));
  __Pyx_INCREF(__pyx_t_6);
  __pyx_t_7 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_v_columns, __pyx_v_schema};
    #if CYTHON_VECTORCALL
    __pyx_t_9 = __pyx_mstate_global->__pyx_tuple[11];
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6187, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_9);
    #else
    {
      PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_schema};
      __pyx_t_9 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6187, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
    }
    #endif
    __pyx_t_5 = __Pyx_Object_VectorcallMethodKwds((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, 6187, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_5;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_5 = 0;
  goto __pyx_L0;
 06188: 
 06189: 
+06190: 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;
}
 06191:         object df, object schema_overrides):
 06192:     """`_dataframe_reinterpret_unsigned_geohash` for a polars
 06193:     `DataFrame` or `LazyFrame`; a `LazyFrame` stays lazy.
 06194: 
 06195:     Each column keeps its bits. `reinterpret(signed=True)` does this
 06196:     without copying, but polars older than 1.39 accepts it only on 32-
 06197:     and 64-bit integers. On such a polars an 8- or 16-bit column takes
 06198:     a wrapping cast to the signed type of its width instead: the cast
 06199:     reduces each value modulo 2**width, which for the same width is
 06200:     the same bit pattern, and it copies the column. Nulls stay null
 06201:     either way.
 06202:     """
 06203:     cdef object schema, name, dtype
 06204:     cdef tuple unsigned = (
+06205:         _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, 6205, __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, 6205, __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, 6205, __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, 6205, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6205, __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, 6205, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_2);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2) != (0)) __PYX_ERR(0, 6205, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_3);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3) != (0)) __PYX_ERR(0, 6205, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_4);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_4) != (0)) __PYX_ERR(0, 6205, __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;
+06206:     cdef dict narrow = {_POLARS.UInt8: _POLARS.Int8,
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6206, __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, 6206, __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, 6206, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_5, __pyx_t_4, __pyx_t_3) < (0)) __PYX_ERR(0, 6206, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06207:                         _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, 6207, __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, 6207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_5, __pyx_t_3, __pyx_t_4) < (0)) __PYX_ERR(0, 6206, __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;
+06208:     cdef list exprs = []
  __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_v_exprs = ((PyObject*)__pyx_t_5);
  __pyx_t_5 = 0;
+06209:     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, 6209, __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, 6209, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __pyx_t_5 = __pyx_t_4;
    __pyx_t_4 = 0;
  } else {
+06210:               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, 6210, __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;
+06211:     for name, dtype in schema.items():
  __pyx_t_8 = 0;
  if (unlikely(__pyx_v_schema == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
    __PYX_ERR(0, 6211, __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, 6211, __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, 6211, __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;
+06212:         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, 6212, __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;
+06213:                 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, 6213, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
+06214:                 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:;
+06215:             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, 6215, __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, 6215, __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;
      }
+06216:                 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, 6216, __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, 6216, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
  {
    PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_wrap_numerical};
    __pyx_mstate_global->__pyx_tuple[29] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[29])) __PYX_ERR(0, 6216, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[29]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[29]);
+06217:                     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, 6217, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
/* … */
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_1, Py_True};
          #if CYTHON_VECTORCALL
          __pyx_t_14 = __pyx_mstate_global->__pyx_tuple[29];
          if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 6216, __pyx_L1_error)
          __Pyx_INCREF(__pyx_t_14);
          #else
          {
            PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_wrap_numerical};
            __pyx_t_14 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
            if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 6216, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_14);
          }
          #endif
          __pyx_t_3 = __Pyx_Object_VectorcallMethodKwds((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, 6216, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
 06218:             else:
+06219:                 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, 6219, __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] = {__pyx_t_2, Py_True};
          #if CYTHON_VECTORCALL
          __pyx_t_1 = __pyx_mstate_global->__pyx_tuple[14];
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6219, __pyx_L1_error)
          __Pyx_INCREF(__pyx_t_1);
          #else
          {
            PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_signed};
            __pyx_t_1 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
            if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6219, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
          }
          #endif
          __pyx_t_3 = __Pyx_Object_VectorcallMethodKwds((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, 6219, __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, 6219, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

      }
      __pyx_L8:;
+06220:     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, 6220, __pyx_L1_error)
    __pyx_t_6 = (__pyx_temp != 0);
  }

  __pyx_t_13 = (!__pyx_t_6);


  if (__pyx_t_13) {
/* … */
  }
+06221:         return df
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_df);
        __pyx_r = __pyx_v_df;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+06222:     return df.with_columns(exprs)
  __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, 6222, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_5;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_5 = 0;
  goto __pyx_L0;
 06223: 
 06224: 
+06225: 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;
}
 06226:     """NumPy-dtype or object-dtype copies of the Arrow-backed columns
 06227:     whose round-trip claim the manual planner cannot honour in the
 06228:     shape they arrive in.
 06229: 
 06230:     A frame mixing Arrow-backed and NumPy columns routes whole to this
 06231:     planner, where an integer claim rides on the NumPy dtype named in
 06232:     the append call. Columns handed to the native Arrow importer have
 06233:     nowhere to put it, so their claim would be dropped and the column
 06234:     would land as its storage type — CHAR and GEOHASH as plain
 06235:     integers — auto-creating the destination table with the wrong
 06236:     column types. A UUID or LONG256 claim on a bare fixed-size binary
 06237:     column is read by the classifier instead, whose route sends the
 06238:     column's own buffer, and the planner refuses that route for a column
 06239:     in any layout but one zero-offset array.
 06240: 
 06241:     An integer claim copies to the NumPy width that carries it, which
 06242:     stays a raw buffer the whole way to the wire. An integer column
 06243:     holding a null copies to object dtype instead: that is the shape
 06244:     `_dataframe_apply_roundtrip_overrides` covers for every claimed
 06245:     kind, and what `dtype_backend='numpy_nullable'` hands these columns
 06246:     back as, so both backends write the same bytes again.
 06247: 
 06248:     UUID on a bare 16-byte column and LONG256 on a 32-byte one need no
 06249:     copy. The Arrow value buffer of such a column is already a packed
 06250:     run of 16- or 32-byte values, the layout `qwp_numpy_s16` and
 06251:     `qwp_numpy_s32` read, and its validity bitmap is the one the append
 06252:     call takes, nulls included. The classifier makes such a column
 06253:     `col_source_fsb_claimed_arrow`, and the append sends the buffer as
 06254:     it stands.
 06255: 
 06256:     TRADE-OFF, kept on purpose: that route needs the column to be one
 06257:     Arrow array starting at offset zero
 06258:     (`_arrow_col_is_one_zero_offset_buffer`). A column in several
 06259:     chunks -- a query result read in more than one batch, a
 06260:     `pd.concat` -- or one sliced away from its start (`df.iloc[n:]`
 06261:     with n > 0) copies to object dtype. That copy boxes one
 06262:     `bytes` per cell, roughly 4-5x the per-cell cost and about 73 MB
 06263:     of Python objects per million 32-byte cells, but it writes the
 06264:     column where the alternative is a refusal. This planner refuses an
 06265:     Arrow-backed column of any other type in several chunks, and one
 06266:     sliced away from its start too unless it goes to the native Arrow
 06267:     importer (variable-length binary, lists, millisecond timestamps):
 06268:     integer, float, boolean and string columns get "v1 requires one
 06269:     contiguous zero-offset buffer". So the fallback runs only on frames
 06270:     whose other Arrow-backed columns are all in one array, or are
 06271:     sliced and of those importer-bound types. Gathering the chunks into
 06272:     one fresh Arrow buffer would make the copy a memcpy, but it would be
 06273:     a third route for two kinds on layouts most kinds refuse, so the
 06274:     fallback stays on the object route the `numpy_nullable` backend
 06275:     already takes for the same columns.
 06276: 
 06277:     Only a frame that already fell back from the zero-copy Arrow path
 06278:     reaches here, and within it only the claimed columns that have no
 06279:     buffer-shaped route are copied, so the shapes that can carry their
 06280:     claim natively stay zero-copy.
 06281:     """
 06282:     cdef object cols_meta, arrow_dtype, types, dtype, raw_ty, ty, meta, out
 06283:     cdef object target_dtype
 06284:     cdef str kind
 06285:     cdef list convert
+06286:     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, 6286, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);


  if (__pyx_t_2) {
/* … */
  }
+06287:         return df
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_df);
        __pyx_r = __pyx_v_df;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+06288:     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, 6288, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_cols_meta = __pyx_t_3;
  __pyx_t_3 = 0;
+06289:     if not cols_meta:
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_cols_meta); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6289, __pyx_L1_error)
  __pyx_t_1 = (!__pyx_t_2);


  if (__pyx_t_1) {
/* … */
  }
+06290:         return df
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_df);
        __pyx_r = __pyx_v_df;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+06291:     _dataframe_may_import_deps()
  __pyx_t_3 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6291, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06292:     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, 6292, __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;
+06293:     if arrow_dtype is None:
  __pyx_t_1 = (__pyx_v_arrow_dtype == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+06294:         return df
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_df);
        __pyx_r = __pyx_v_df;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+06295:     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, 6295, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);


  if (__pyx_t_2) {
/* … */
  }
+06296:         return df
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_df);
        __pyx_r = __pyx_v_df;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+06297:     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, 6297, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_types = __pyx_t_4;
  __pyx_t_4 = 0;
+06298:     convert = []
  __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_convert = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
 06299:     # Walked by position rather than by label: `dtypes[name]` on a frame
 06300:     # with duplicate column names hands back a Series, not a dtype.
+06301:     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, 6301, __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, 6301, __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, 6301, __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, 6301, __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, 6301, __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, 6301, __pyx_L1_error)
          #endif
          if (__pyx_t_9 >= __pyx_temp) break;
        }
        __pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(__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, 6301, __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, 6301, __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, 6301, __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, 6301, __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_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6301, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_t_6);
        __pyx_t_5 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6301, __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, 6301, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_5 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6301, __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, 6301, __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, 6301, __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, 6301, __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, 6301, __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;
+06302:         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, 6302, __pyx_L1_error)
    __pyx_t_1 = (!__pyx_t_2);


    if (__pyx_t_1) {
/* … */
    }
+06303:             continue
      goto __pyx_L7_continue;
+06304:         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, 6304, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_XDECREF_SET(__pyx_v_meta, __pyx_t_3);
    __pyx_t_3 = 0;
+06305:         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, 6305, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF_SET(__pyx_v_kind, ((PyObject*)__pyx_t_3));
    __pyx_t_3 = 0;
+06306:         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, "\047NoneType\047 object is not iterable");
      __PYX_ERR(0, 6306, __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, 6306, __pyx_L1_error)

    __pyx_t_1 = __pyx_t_2;

    __pyx_L13_bool_binop_done:;
    if (__pyx_t_1) {
/* … */
    }
+06307:             continue
      goto __pyx_L7_continue;
+06308:         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, 6308, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF_SET(__pyx_v_raw_ty, __pyx_t_3);
    __pyx_t_3 = 0;
+06309:         ty = raw_ty
    __Pyx_INCREF(__pyx_v_raw_ty);
    __Pyx_XDECREF_SET(__pyx_v_ty, __pyx_v_raw_ty);
+06310:         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, 6310, __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, 6310, __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, 6310, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__pyx_t_1) {
/* … */
    }
+06311:             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, 6311, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF_SET(__pyx_v_ty, __pyx_t_5);
      __pyx_t_5 = 0;
 06312:         # A claim that no longer fits the column is dropped rather than
 06313:         # reshaped: refusing value by value later would answer a retyped
 06314:         # column with an error where the contract promises the write
 06315:         # goes ahead. It says which claim it dropped on the way past,
 06316:         # because a type that can never carry the kind is a mistake
 06317:         # rather than drift, and the two look the same from here.
+06318:         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, 6318, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_2 = (!__pyx_t_1);


    if (__pyx_t_2) {
/* … */
    }
+06319:                 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, 6319, __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, 6319, __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, 6319, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = __pyx_t_3;
    __pyx_t_3 = 0;
    __pyx_L17_bool_binop_done:;
+06320:             _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, 6320, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+06321:             continue
      goto __pyx_L7_continue;
+06322:         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, 6322, __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;
+06323:             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, 6323, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6323, __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, 6323, __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, 6323, __pyx_L1_error);
    __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6323, __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;
+06324:         if target_dtype is None:
    __pyx_t_2 = (__pyx_v_target_dtype == Py_None);
    if (__pyx_t_2) {
/* … */
    }
+06325:             continue
      goto __pyx_L7_continue;
+06326:         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, 6326, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_14 = PyTuple_New(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 6326, __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, 6326, __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, 6326, __pyx_L1_error);
    __pyx_t_15 = __Pyx_PyObject_GetItem(__pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 6326, __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, 6326, __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, 6326, __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, 6326, __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) {
/* … */
    }
 06327:             # A NumPy integer dtype has no null to copy a null into.
+06328:             target_dtype = object
      __Pyx_INCREF(__pyx_builtin_object);
      __Pyx_DECREF_SET(__pyx_v_target_dtype, __pyx_builtin_object);
+06329:         convert.append((pos, target_dtype))
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6329, __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, 6329, __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, 6329, __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, 6329, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

+06330:     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, 6330, __pyx_L1_error)
    __pyx_t_2 = (__pyx_temp != 0);
  }

  __pyx_t_1 = (!__pyx_t_2);


  if (__pyx_t_1) {
/* … */
  }
+06331:         return df
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_df);
        __pyx_r = __pyx_v_df;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+06332:     out = df.copy(deep=False)
  __pyx_t_7 = __pyx_v_df;
  __Pyx_INCREF(__pyx_t_7);
  __pyx_t_8 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, Py_False};
    #if CYTHON_VECTORCALL
    __pyx_t_3 = __pyx_mstate_global->__pyx_tuple[2];
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6332, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_3);
    #else
    {
      PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_deep};
      __pyx_t_3 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6332, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    #endif
    __pyx_t_4 = __Pyx_Object_VectorcallMethodKwds((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, 6332, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_v_out = __pyx_t_4;
  __pyx_t_4 = 0;
+06333:     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, 6333, __pyx_L1_error)
      #endif
      if (__pyx_t_9 >= __pyx_temp) break;
    }
    __pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_4, __pyx_t_9, __Pyx_ReferenceSharing_OwnStrongReference);
    ++__pyx_t_9;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6333, __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, 6333, __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_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6333, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_t_7);
        __pyx_t_5 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6333, __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, 6333, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_5 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6333, __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, 6333, __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, 6333, __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, 6333, __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;
+06334:         _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, 6334, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

+06335:             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, 6335, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6335, __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, 6335, __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, 6335, __pyx_L1_error);
    __pyx_t_15 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 6335, __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, 6335, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
+06336:     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, 6336, __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, 6336, __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, 6336, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+06337:     return out
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_v_out);
      __pyx_r = __pyx_v_out;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 06338: 
 06339: 
+06340: 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;
}
 06341:     """Arrow-backed copies of the millisecond datetime columns claimed
 06342:     as DATE.
 06343: 
 06344:     A DATE column is claimed by the column's own Arrow type, and the
 06345:     NumPy planner has no DATE target of any kind: it reaches DATE only
 06346:     through `col_target_column_arrow`, which needs the column to carry
 06347:     a `pa.timestamp('ms')`. Plain `to_pandas()` hands a DATE column back
 06348:     as a NumPy `datetime64[ms]`, which the planner widens to a
 06349:     microsecond TIMESTAMP -- so reading a table and writing the frame
 06350:     straight back created the destination table with a TIMESTAMP column
 06351:     where the source had DATE, and said nothing.
 06352: 
 06353:     The claim carries the missing half. `'date'` is not in
 06354:     `_ATTRS_OVERRIDE_KINDS` because there is no Arrow override to
 06355:     restore DATE with; what restores it is the column's type, so the
 06356:     claim reshapes the column and the type does the rest. Both Arrow
 06357:     backends already hand the column back as `pa.timestamp('ms')`, so
 06358:     this is what makes the three backends write the same column type.
 06359: 
 06360:     A tz-aware millisecond column is reshaped the same way. On its own
 06361:     the planner refuses that dtype outright, so a claimed one turns a
 06362:     hard rejection into the type the claim names.
 06363: 
 06364:     pyarrow is what carries a column to DATE, and without it the frame
 06365:     has no route there to be put back on -- the same early return the
 06366:     rest of the claim machinery takes.
 06367:     """
 06368:     cdef object cols_meta, arrow_dtype, dtype, meta, out, unit, tz
 06369:     cdef str kind
 06370:     cdef list convert
+06371:     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, 6371, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);


  if (__pyx_t_2) {
/* … */
  }
+06372:         return df
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_df);
        __pyx_r = __pyx_v_df;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+06373:     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, 6373, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_cols_meta = __pyx_t_3;
  __pyx_t_3 = 0;
+06374:     if not cols_meta:
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_cols_meta); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6374, __pyx_L1_error)
  __pyx_t_1 = (!__pyx_t_2);


  if (__pyx_t_1) {
/* … */
  }
+06375:         return df
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_df);
        __pyx_r = __pyx_v_df;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+06376:     _dataframe_may_import_deps()
  __pyx_t_3 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6376, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06377:     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, 6377, __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;
+06378:     if arrow_dtype is None:
  __pyx_t_1 = (__pyx_v_arrow_dtype == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+06379:         return df
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_df);
        __pyx_r = __pyx_v_df;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+06380:     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, 6380, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);


  if (__pyx_t_2) {
/* … */
  }
+06381:         return df
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_df);
        __pyx_r = __pyx_v_df;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+06382:     convert = []
  __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_convert = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
 06383:     # Walked by position rather than by label: `dtypes[name]` on a frame
 06384:     # with duplicate column names hands back a Series, not a dtype.
+06385:     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, 6385, __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, 6385, __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, 6385, __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, 6385, __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, 6385, __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, 6385, __pyx_L1_error)
          #endif
          if (__pyx_t_9 >= __pyx_temp) break;
        }
        __pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(__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, 6385, __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, 6385, __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, 6385, __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, 6385, __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_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6385, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_t_6);
        __pyx_t_5 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6385, __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, 6385, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_5 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6385, __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, 6385, __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, 6385, __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, 6385, __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, 6385, __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;
+06386:         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, 6386, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_XDECREF_SET(__pyx_v_meta, __pyx_t_3);
    __pyx_t_3 = 0;
+06387:         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, 6387, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF_SET(__pyx_v_kind, ((PyObject*)__pyx_t_3));
    __pyx_t_3 = 0;
+06388:         if kind != 'date':
    __pyx_t_2 = __Pyx_PyObject_CompareBoolNe_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_date, Py_NE); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6388, __pyx_L1_error)
    if (__pyx_t_2) {
/* … */
    }
+06389:             continue
      goto __pyx_L7_continue;
 06390:         # An Arrow-backed column already states the type itself.
+06391:         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, 6391, __pyx_L1_error)
    if (__pyx_t_2) {
/* … */
    }
+06392:             continue
      goto __pyx_L7_continue;
+06393:         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, 6393, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = (__Pyx_PyObject_Equals_obj_ch77(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_M, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6393, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_2) {
/* … */
    }
+06394:             continue
      goto __pyx_L7_continue;
+06395:         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, 6395, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF_SET(__pyx_v_tz, __pyx_t_3);
    __pyx_t_3 = 0;
+06396:         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, 6396, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF_SET(__pyx_v_unit, __pyx_t_3);
    __pyx_t_3 = 0;
+06397:         if unit is None:
    __pyx_t_2 = (__pyx_v_unit == Py_None);
    if (__pyx_t_2) {
/* … */
    }
+06398:             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, 6398, __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, 6398, __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, 6398, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      __pyx_t_11 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6398, __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;
 06399:         # Only a millisecond column holds what a DATE column held. A
 06400:         # column retyped to another unit since it was read is drift, and
 06401:         # drift is written as the column's own type implies.
+06402:         if unit != 'ms':
    __pyx_t_2 = __Pyx_PyObject_CompareBoolNe_object_str(__pyx_v_unit, __pyx_mstate_global->__pyx_n_u_ms, Py_NE); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6402, __pyx_L1_error)
    if (__pyx_t_2) {
/* … */
    }
+06403:             continue
      goto __pyx_L7_continue;
+06404:         convert.append((
    __pyx_t_16 = __Pyx_PyList_Append(__pyx_v_convert, __pyx_t_5); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 6404, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

+06405:             pos,
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6405, __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, 6405, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_11);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_11) != (0)) __PYX_ERR(0, 6405, __pyx_L1_error);
    __pyx_t_11 = 0;
+06406:             arrow_dtype(
    __pyx_t_3 = NULL;
    __Pyx_INCREF(__pyx_v_arrow_dtype);
    __pyx_t_5 = __pyx_v_arrow_dtype; 
+06407:                 _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, 6407, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_13);
      }
      __pyx_t_6 = __pyx_t_13;
      __pyx_t_13 = 0;
    } else {
+06408:                 if tz is None
    __pyx_t_2 = (__pyx_v_tz == Py_None);
    if (__pyx_t_2) {
+06409:                 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, 6409, __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, 6409, __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, 6406, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
    }
+06410:     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, 6410, __pyx_L1_error)
    __pyx_t_2 = (__pyx_temp != 0);
  }

  __pyx_t_1 = (!__pyx_t_2);


  if (__pyx_t_1) {
/* … */
  }
+06411:         return df
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_df);
        __pyx_r = __pyx_v_df;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+06412:     out = df.copy(deep=False)
  __pyx_t_7 = __pyx_v_df;
  __Pyx_INCREF(__pyx_t_7);
  __pyx_t_8 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, Py_False};
    #if CYTHON_VECTORCALL
    __pyx_t_5 = __pyx_mstate_global->__pyx_tuple[2];
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6412, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_5);
    #else
    {
      PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_deep};
      __pyx_t_5 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6412, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    #endif
    __pyx_t_4 = __Pyx_Object_VectorcallMethodKwds((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, 6412, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_v_out = __pyx_t_4;
  __pyx_t_4 = 0;
+06413:     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, 6413, __pyx_L1_error)
      #endif
      if (__pyx_t_9 >= __pyx_temp) break;
    }
    __pyx_t_5 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_4, __pyx_t_9, __Pyx_ReferenceSharing_OwnStrongReference);
    ++__pyx_t_9;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6413, __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, 6413, __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_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6413, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_t_7);
        __pyx_t_11 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6413, __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, 6413, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_11 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6413, __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, 6413, __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, 6413, __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, 6413, __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;
+06414:         _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, 6414, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

+06415:             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, 6415, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6415, __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, 6415, __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, 6415, __pyx_L1_error);
    __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6415, __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, 6415, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
+06416:     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, 6416, __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, 6416, __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, 6416, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+06417:     return out
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_v_out);
      __pyx_r = __pyx_v_out;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 06418: 
 06419: 
+06420: 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_AddTraceback("questdb._client._dataframe_claim_all_null_source", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 06421:         col_t* col, str kind, object bits) except -1:
 06422:     """Give an all-null claimed column the object-column shape its
 06423:     claim names.
 06424: 
 06425:     Every cell being null leaves the planner nothing to sniff a type
 06426:     from, so such a column is skipped and never reaches the wire. A
 06427:     round-trip claim states the type anyway, and a destination table
 06428:     auto-created without the column is the outcome the claim exists to
 06429:     prevent -- so the claim picks the source, and the object-column
 06430:     builder writes a column of nulls in the claimed width. This is the
 06431:     same source the shape would have taken with one non-null cell in
 06432:     it, and what the Arrow path emits for the same frame.
 06433: 
 06434:     A claim the column cannot carry -- a geohash precision outside
 06435:     1..=60 -- leaves the column skipped, and the tail of
 06436:     `_dataframe_apply_roundtrip_overrides` says so, as it does for any
 06437:     claim no source took.
 06438:     """
+06439:     if kind == 'uuid':
  __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_uuid, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6439, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+06440:         col.setup.source = col_source_t.col_source_bytes_pyobj
    __pyx_v_col->setup->source = __pyx_e_7questdb_7_client_col_source_bytes_pyobj;
+06441:         col.setup.target = col_target_t.col_target_column_binary
    __pyx_v_col->setup->target = __pyx_e_7questdb_7_client_col_target_column_binary;
+06442:     elif kind in ('ipv4', 'char', 'long256', 'geohash'):
  __Pyx_INCREF(__pyx_v_kind);
  __pyx_t_2 = __pyx_v_kind;
  __pyx_t_3 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ipv4, Py_EQ); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6442, __pyx_L1_error)
  if (!__pyx_t_3) {

  } else {

    __pyx_t_1 = __pyx_t_3;

    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_char_2, Py_EQ); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6442, __pyx_L1_error)
  if (!__pyx_t_3) {

  } else {

    __pyx_t_1 = __pyx_t_3;

    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_long256, Py_EQ); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6442, __pyx_L1_error)
  if (!__pyx_t_3) {

  } else {

    __pyx_t_1 = __pyx_t_3;

    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_geohash_2, Py_EQ); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6442, __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;
  }
+06443:         if kind == 'geohash' and not (
    __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_geohash_2, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6443, __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) {
/* … */
    }
+06444:                 _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, 6444, __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, 6444, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = __Pyx_PyObject_CompareBoolLe_int_int(__pyx_mstate_global->__pyx_int_1, __pyx_t_5, Py_LE); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 6444, __pyx_L1_error)
    if (__pyx_t_4) {
      __pyx_t_4 = __Pyx_PyObject_CompareBoolLe_int_int(__pyx_t_5, __pyx_mstate_global->__pyx_int_60, Py_LE); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 6444, __pyx_L1_error)
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

    __pyx_t_1 = __pyx_t_4;

    __pyx_L11_bool_binop_done:;
+06445:             return 0
      {

        __pyx_r = 0;
      }
      goto __pyx_L0;
+06446:         col.setup.source = col_source_t.col_source_int_pyobj
    __pyx_v_col->setup->source = __pyx_e_7questdb_7_client_col_source_int_pyobj;
+06447:         col.setup.target = col_target_t.col_target_column_i64
    __pyx_v_col->setup->target = __pyx_e_7questdb_7_client_col_target_column_i64;
 06448:     else:
+06449:         return 0
  /*else*/ {
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
  }
  __pyx_L3:;
+06450:     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)));
 06451:         <int>col.setup.source + <int>col.setup.target)
+06452:     return 0
  {

    __pyx_r = 0;
  }
  goto __pyx_L0;
 06453: 
 06454: 
+06455: 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;
}
 06456:     """Say that a column's ``df.attrs['questdb']`` claim was not applied.
 06457: 
 06458:     A claim that no longer matches its column is not an error. The frame
 06459:     may have been retyped since it was read, and the write goes ahead as
 06460:     the column's own type implies -- rejecting it would answer ordinary
 06461:     schema drift with a failure.
 06462: 
 06463:     A claim quietly doing nothing is also how a column reaches the
 06464:     database as the wrong type, though, and the two are indistinguishable
 06465:     from the outside. Drift is the case the silence is for; a type that
 06466:     can never carry the kind -- a float under ``geohash``, say, or a
 06467:     16-bit integer claimed at 20 bits -- is a mistake the caller wants
 06468:     to hear about. Naming the claim and the type
 06469:     that turned it away tells them apart without failing either.
 06470: 
 06471:     This leniency covers ``df.attrs`` claims alone. The same claim in
 06472:     Arrow field metadata (``questdb.column_type``) is refused when the
 06473:     field's type cannot carry it, deliberately; `_capsule_consume_stream`
 06474:     says why the two routes differ.
 06475:     """
 06476:     # A stale claim does not invalidate the frame. Unlike the naive-datetime
 06477:     # and reconnect warnings, it is not a migration/performance pattern the
 06478:     # caller should be able to promote to an error with `-W error`.
+06479:     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, 6479, __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, 6479, __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, 6479, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_t_2 = __pyx_t_3;
  __Pyx_INCREF(__pyx_t_2);
 06480:         'questdb: column %r carries a df.attrs[\'questdb\'] claim of '
 06481:         'kind %r, which a column of type %s cannot carry. The claim is '
 06482:         'ignored, and the column goes out as its own type decides -- '
 06483:         'which for some shapes means it is left out of the write, or '
 06484:         'refused by it. Cast the column to a type the kind fits, state '
 06485:         'the type outright with schema_overrides, or drop the claim to '
 06486:         'silence this.',
 06487:         name,
 06488:         kind,
+06489:         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, 6479, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 06490: 
 06491: 
+06492: 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;
}
 06493:         str kind, const col_t* col) noexcept:
 06494:     """Whether the column carries the claimed kind without an override.
 06495: 
 06496:     An object column of `uuid.UUID` or `ipaddress.IPv4Address` is
 06497:     already written as UUID or IPV4 by the source alone -- which is the
 06498:     shape plain `to_pandas()` hands back -- so no override is set for
 06499:     it and none is missing. Without this, the claim such a frame comes
 06500:     back with would be reported as dropped on every write, on the one
 06501:     path the claim exists to serve.
 06502: 
 06503:     `col_source_fsb_claimed_arrow` is the classifier acting on the
 06504:     claim itself: it takes that source only for a `uuid` claim on a
 06505:     16-byte column or a `long256` claim on a 32-byte one, so the width
 06506:     already names the kind.
 06507:     """
+06508:     if kind == 'uuid':
  __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_uuid, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6508, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+06509:         return (col.setup.source == col_source_t.col_source_uuid_pyobj
      case __pyx_e_7questdb_7_client_col_source_fsb_claimed_arrow:
+06510:                 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;
 06511:                     == col_source_t.col_source_fsb_claimed_arrow)
+06512:     if kind == 'long256':
  __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_long256, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6512, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
 06513:         return (col.setup.source
+06514:                 == 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;
+06515:     if kind == 'ipv4':
  __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_ipv4, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6515, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+06516:         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;
+06517:     return False
  {

    __pyx_r = 0;
  }
  goto __pyx_L0;
 06518: 
 06519: 
+06520: 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;
}
 06521:         object df, dataframe_plan_t* plan) except -1:
 06522:     cdef size_t col_index
 06523:     cdef col_t* col
 06524:     cdef int gh
 06525:     cdef object arrow_dtype, dtype
+06526:     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;
+06527:         plan.cols.d[col_index].setup.has_override = False
    (__pyx_v_plan->cols.d[__pyx_v_col_index]).setup->has_override = 0;
  }

+06528:     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, 6528, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_cols_meta = __pyx_t_4;
  __pyx_t_4 = 0;
+06529:     if not cols_meta:
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_cols_meta); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 6529, __pyx_L1_error)
  __pyx_t_6 = (!__pyx_t_5);


  if (__pyx_t_6) {
/* … */
  }
+06530:         return 0
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+06531:     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, 6531, __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, 6531, __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;
+06532:     _dataframe_may_import_deps()
  __pyx_t_7 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6532, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+06533:     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, 6533, __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;
+06534:     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;
+06535:         col = &plan.cols.d[col_index]
    __pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_col_index]));
+06536:         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, 6536, __pyx_L1_error)
    __pyx_t_6 = (__pyx_v_col->setup->orig_index >= ((size_t)__pyx_t_8));


    if (__pyx_t_6) {
/* … */
    }
+06537:             continue
      goto __pyx_L6_continue;
+06538:         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, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6538, __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, 6538, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XDECREF_SET(__pyx_v_meta, __pyx_t_4);
    __pyx_t_4 = 0;
+06539:         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, 6539, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_XDECREF_SET(__pyx_v_kind, ((PyObject*)__pyx_t_4));
    __pyx_t_4 = 0;
+06540:         if kind is None:
    __pyx_t_6 = (__pyx_v_kind == ((PyObject*)Py_None));
    if (__pyx_t_6) {
/* … */
    }
+06541:             continue
      goto __pyx_L6_continue;
+06542:         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) {
/* … */
    }
+06543:             _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, 6543, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

+06544:                 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, 6544, __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, 6544, __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, 6544, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_4 = __pyx_t_9;
      __pyx_t_9 = 0;
      __pyx_L11_bool_binop_done:;
 06545:         # `col_source_int_pyobj` is what a pandas masked dtype turns
 06546:         # into: `to_pandas(dtype_backend='numpy_nullable')` returns
 06547:         # IPV4 / CHAR / GEOHASH as UInt32 / UInt16 / Int* extension
 06548:         # columns, and `_dataframe_normalize_nullable` converts every
 06549:         # masked column to object-dtype Python ints before planning.
 06550:         # `col_source_bytes_pyobj` is the same story for the two binary
 06551:         # kinds, which that backend hands back as object-dtype `bytes`.
 06552:         # `col_source_u32_arrow` is an Arrow uint32 column, which
 06553:         # resolves to `col_target_column_i64` and so reaches the wire as
 06554:         # a raw buffer with the append call naming its dtype — the same
 06555:         # place the claim lands for the NumPy and object shapes.
+06556:         if (kind == 'ipv4'
    __pyx_t_5 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_ipv4, Py_EQ); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 6556, __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;
    }
+06557:                 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:;
+06558:                     col_source_t.col_source_u32_numpy,
      case __pyx_e_7questdb_7_client_col_source_u32_arrow:
+06559:                     col_source_t.col_source_u32_arrow,
      case __pyx_e_7questdb_7_client_col_source_int_pyobj:
 06560:                     col_source_t.col_source_int_pyobj)):
+06561:             col.setup.has_override = True
      __pyx_v_col->setup->has_override = 1;
+06562:             col.setup.override_dtype = \
      __pyx_v_col->setup->override_dtype = qwp_numpy_u32_ipv4;
 06563:                 qwp_numpy_dtype.qwp_numpy_u32_ipv4
+06564:         elif (kind == 'char'
    __pyx_t_12 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_char_2, Py_EQ); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 6564, __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;
    }
+06565:                 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:;
+06566:                     col_source_t.col_source_u16_numpy,
      case __pyx_e_7questdb_7_client_col_source_int_pyobj:
 06567:                     col_source_t.col_source_int_pyobj)):
+06568:             col.setup.has_override = True
      __pyx_v_col->setup->has_override = 1;
+06569:             col.setup.override_dtype = \
      __pyx_v_col->setup->override_dtype = qwp_numpy_u16_char;
 06570:                 qwp_numpy_dtype.qwp_numpy_u16_char
+06571:         elif (kind == 'uuid'
    __pyx_t_5 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_uuid, Py_EQ); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 6571, __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;
    }
+06572:                 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:;
+06573:             col.setup.has_override = True
      __pyx_v_col->setup->has_override = 1;
+06574:             col.setup.override_dtype = qwp_numpy_dtype.qwp_numpy_s16
      __pyx_v_col->setup->override_dtype = qwp_numpy_s16;
+06575:         elif (kind == 'long256'
    __pyx_t_5 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_long256, Py_EQ); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 6575, __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;
    }
+06576:                 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:;
+06577:                     col_source_t.col_source_int_pyobj,
      case __pyx_e_7questdb_7_client_col_source_bytes_pyobj:
 06578:                     col_source_t.col_source_bytes_pyobj)):
 06579:             # Plain `to_pandas()` hands a LONG256 column back as Python
 06580:             # ints — the only shape wide enough to hold one without
 06581:             # pyarrow — and `numpy_nullable` as raw 32-byte `bytes`.
 06582:             # Either way the claim is what tells the 32-byte encoder
 06583:             # from the LONG or BINARY column the shape alone implies.
+06584:             col.setup.has_override = True
      __pyx_v_col->setup->has_override = 1;
+06585:             col.setup.override_dtype = qwp_numpy_dtype.qwp_numpy_s32
      __pyx_v_col->setup->override_dtype = qwp_numpy_s32;
+06586:         elif kind == 'geohash':
    __pyx_t_6 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_geohash_2, Py_EQ); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 6586, __pyx_L1_error)
    if (__pyx_t_6) {
/* … */
    }
    __pyx_L13:;
+06587:             gh = _geohash_override_dtype(col.setup.source)
      __pyx_v_gh = __pyx_f_7questdb_7_client__geohash_override_dtype(__pyx_v_col->setup->source);
+06588:             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, 6588, __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, 6588, __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, 6588, __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;
+06589:             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, 6589, __pyx_L1_error)
      if (__pyx_t_6) {
        __pyx_t_9 = __Pyx_PyNumber_Int(__pyx_v_bits); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6589, __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;
 06590:             # The precision is held to the column's own width, not just
 06591:             # to 1..=60. A claim wider than the slot carrying it is one
 06592:             # the column cannot express, so it is dropped rather than
 06593:             # left for the native writer to refuse mid-flush, with the
 06594:             # connection already open and a message naming neither the
 06595:             # column nor the claim.
+06596:             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) {
/* … */
      }
+06597:                     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;
      }
+06598:                     and 1 <= bits <= _geohash_dtype_max_bits(gh)):
      __pyx_t_12 = __Pyx_PyObject_CompareBoolLe_int_object(__pyx_mstate_global->__pyx_int_1, __pyx_v_bits, Py_LE); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 6598, __pyx_L1_error)
      if (__pyx_t_12) {
        __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_f_7questdb_7_client__geohash_dtype_max_bits(__pyx_v_gh)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6598, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_12 = __Pyx_PyObject_CompareBoolLe_object_int(__pyx_v_bits, __pyx_t_4, Py_LE); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 6598, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      }

      __pyx_t_6 = __pyx_t_12;

      __pyx_L25_bool_binop_done:;
+06599:                 col.setup.has_override = True
        __pyx_v_col->setup->has_override = 1;
+06600:                 col.setup.override_dtype = <qwp_numpy_dtype>gh
        __pyx_v_col->setup->override_dtype = ((enum qwp_numpy_dtype)__pyx_v_gh);
+06601:                 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, 6601, __pyx_L1_error)
        __pyx_v_col->setup->override_geohash_bits = ((uint8_t)__pyx_t_13);

+06602:         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:;
  }

+06603:                 and kind in _ATTRS_OVERRIDE_KINDS
    if (unlikely(__pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not iterable");
      __PYX_ERR(0, 6603, __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, 6603, __pyx_L1_error)
    if (__pyx_t_12) {

    } else {

      __pyx_t_6 = __pyx_t_12;

      goto __pyx_L29_bool_binop_done;
    }
+06604:                 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:;
 06605:             # The claim names a kind this column cannot carry -- a
 06606:             # width that cannot hold the precision, an unsigned column,
 06607:             # or a type with no route to the kind at all. That is a
 06608:             # mistake rather than drift, so it is said out loud, and
 06609:             # saying it here rather than per kind is what makes all
 06610:             # five answer the way the Arrow path already answers them.
 06611:             # The write still goes ahead as the column's own type
 06612:             # implies.
 06613:             #
 06614:             # An Arrow-backed column has already been through
 06615:             # `_dataframe_normalize_claimed_arrow`, which says the same
 06616:             # thing against the Arrow type and is the one that knows
 06617:             # whether the claim could be reshaped. Saying it twice for
 06618:             # one claim would be worse than either.
+06619:             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, 6619, __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, 6619, __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, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6619, __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;
+06620:             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, 6620, __pyx_L1_error)
      __pyx_t_5 = (!__pyx_t_12);



      __pyx_t_6 = __pyx_t_5;

      __pyx_L33_bool_binop_done:;
      if (__pyx_t_6) {
/* … */
      }
+06621:                 _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, 6621, __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;
+06622:                     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, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6622, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
+06623:     return 0
  {

    __pyx_r = 0;
  }
  goto __pyx_L0;
 06624: 
 06625: 
+06626: 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;
}
 06627:         dataframe_plan_t* plan,
 06628:         qwp_chunk* chunk,
 06629:         size_t row_offset,
 06630:         size_t row_count) except -1:
 06631:     cdef size_t col_index
 06632:     cdef col_t* col
+06633:     cdef col_t* at_col = NULL
  __pyx_v_at_col = NULL;
+06634:     cdef size_t at_col_index = 0
  __pyx_v_at_col_index = 0;
+06635:     cdef size_t field_count = 0
  __pyx_v_field_count = 0;
+06636:     cdef pyobj_built_t* prebuilt = NULL
  __pyx_v_prebuilt = NULL;
+06637:     cdef pyobj_built_t* at_prebuilt = NULL
  __pyx_v_at_prebuilt = NULL;
+06638:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 06639: 
+06640:     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;
+06641:         col = &plan.cols.d[col_index]
    __pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_col_index]));
+06642:         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;
    }
+06643:             at_col = col
      __pyx_v_at_col = __pyx_v_col;
+06644:             at_col_index = col_index
      __pyx_v_at_col_index = __pyx_v_col_index;
+06645:         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;
    }
+06646:                 col_target_t.col_target_column_bool,
      case __pyx_e_7questdb_7_client_col_target_column_i64:
+06647:                 col_target_t.col_target_column_i64,
      case __pyx_e_7questdb_7_client_col_target_column_f64:
+06648:                 col_target_t.col_target_column_f64,
      case __pyx_e_7questdb_7_client_col_target_column_ts:
+06649:                 col_target_t.col_target_column_ts,
      case __pyx_e_7questdb_7_client_col_target_column_str:
+06650:                 col_target_t.col_target_column_str,
      case __pyx_e_7questdb_7_client_col_target_symbol:
+06651:                 col_target_t.col_target_symbol,
      case __pyx_e_7questdb_7_client_col_target_column_i8:
+06652:                 col_target_t.col_target_column_i8,
      case __pyx_e_7questdb_7_client_col_target_column_i16:
+06653:                 col_target_t.col_target_column_i16,
      case __pyx_e_7questdb_7_client_col_target_column_i32:
+06654:                 col_target_t.col_target_column_i32,
      case __pyx_e_7questdb_7_client_col_target_column_f32:
+06655:                 col_target_t.col_target_column_f32,
      case __pyx_e_7questdb_7_client_col_target_column_uuid:
+06656:                 col_target_t.col_target_column_uuid,
      case __pyx_e_7questdb_7_client_col_target_column_ipv4:
+06657:                 col_target_t.col_target_column_ipv4,
      case __pyx_e_7questdb_7_client_col_target_column_binary:
+06658:                 col_target_t.col_target_column_binary,
      case __pyx_e_7questdb_7_client_col_target_column_arrow:
+06659:                 col_target_t.col_target_column_arrow,
      case __pyx_e_7questdb_7_client_col_target_column_decimal:
 06660:                 col_target_t.col_target_column_decimal):
+06661:             if plan.pyobj_built != NULL:
      __pyx_t_5 = (__pyx_v_plan->pyobj_built != NULL);

      if (__pyx_t_5) {
/* … */
        goto __pyx_L6;
      }
+06662:                 prebuilt = plan.pyobj_built[col_index]
        __pyx_v_prebuilt = (__pyx_v_plan->pyobj_built[__pyx_v_col_index]);
 06663:             else:
+06664:                 prebuilt = NULL
      /*else*/ {
        __pyx_v_prebuilt = NULL;
      }
      __pyx_L6:;
+06665:             _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, 6665, __pyx_L1_error)

 06666:                 chunk, col, prebuilt, row_offset, row_count)
+06667:             field_count += 1
      __pyx_v_field_count = (__pyx_v_field_count + 1);
+06668:         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:;
  }

+06669:             raise RuntimeError(
      __pyx_t_8 = NULL;
 06670:                 'Unsupported columnar field target: %d.'
+06671:                 % <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, 6671, __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, 6671, __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, 6669, __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, 6669, __pyx_L1_error)
 06672: 
+06673:     if field_count == 0:
  __pyx_t_5 = (__pyx_v_field_count == 0);

  if (unlikely(__pyx_t_5)) {
/* … */
  }
+06674:         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, 6674, __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, 6674, __pyx_L1_error)
 06675:             'Validated columnar plan has no non-timestamp data columns.')
+06676:     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) {
/* … */
  }
 06677:         # Explicit `at=ServerTimestamp` opt-in: the frame carries no
 06678:         # designated timestamp column; the server stamps rows on arrival.
+06679:         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)) {
/* … */
    }
+06680:             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, 6680, __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, 6680, __pyx_L1_error)
+06681:         return 0
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+06682:     if plan.at_value >= 0:
  __pyx_t_5 = (__pyx_v_plan->at_value >= 0);

  if (__pyx_t_5) {
/* … */
  }
 06683:         # Fixed scalar designated timestamp shared by every row.
+06684:         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)) {
/* … */
    }
 06685:                 chunk, plan.at_value, &err):
+06686:             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, 6686, __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, 6686, __pyx_L1_error)
+06687:         return 0
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+06688:     if at_col == NULL:
  __pyx_t_5 = (__pyx_v_at_col == NULL);

  if (unlikely(__pyx_t_5)) {
/* … */
  }
+06689:         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, 6689, __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, 6689, __pyx_L1_error)
+06690:     if plan.pyobj_built != NULL:
  __pyx_t_5 = (__pyx_v_plan->pyobj_built != NULL);

  if (__pyx_t_5) {
/* … */
  }
+06691:         at_prebuilt = plan.pyobj_built[at_col_index]
    __pyx_v_at_prebuilt = (__pyx_v_plan->pyobj_built[__pyx_v_at_col_index]);
+06692:     _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, 6692, __pyx_L1_error)

 06693:         chunk, at_col, at_prebuilt, row_offset, row_count)
 06694: 
 06695: 
+06696: 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;
}
+06697:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+06698:     cdef bint ok = False
  __pyx_v_ok = 0;
+06699:     cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+06700:     cdef uint64_t start_ns = 0
  __pyx_v_start_ns = 0;
 06701:     global _dataframe_columnar_sync_calls
 06702:     global _dataframe_columnar_sync_ns
+06703:     if _dataframe_columnar_count_io_stats:
  if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
  }
+06704:         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, 6704, __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, 6704, __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, 6704, __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, 6704, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_start_ns = __pyx_t_6;
+06705:     _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+06706:     ok = qwp_direct_sender_commit(
  __pyx_v_ok = qwp_direct_sender_commit(__pyx_v_conn, qwpws_ack_level_ok, (&__pyx_v_err));
 06707:         conn,
 06708:         qwpws_ack_level.qwpws_ack_level_ok,
 06709:         &err)
+06710:     _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+06711:     if _dataframe_columnar_count_io_stats:
  if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
  }
+06712:         _dataframe_columnar_sync_calls += 1
    __pyx_v_7questdb_7_client__dataframe_columnar_sync_calls = (__pyx_v_7questdb_7_client__dataframe_columnar_sync_calls + 1);
+06713:         _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, 6713, __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, 6713, __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, 6713, __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, 6713, __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, 6713, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_2 = __Pyx_PyNumber_Subtract_object_int(__pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6713, __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 = __Pyx_PyNumber_InPlaceAdd_int_object(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6713, __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, 6713, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_v_7questdb_7_client__dataframe_columnar_sync_ns = __pyx_t_6;
+06714:     if not ok:
  __pyx_t_8 = (!__pyx_v_ok);

  if (unlikely(__pyx_t_8)) {
/* … */
  }
+06715:         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, 6715, __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, 6715, __pyx_L1_error)
 06716: 
 06717: 
+06718: 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;
}
 06719:         qwp_direct_sender* conn,
 06720:         bint flushed) noexcept:
 06721:     # A failed call keeps the frames it pipelined after its last commit out
 06722:     # of the table. Batches up to its last commit -- the first flush on a
 06723:     # fresh connection commits on its own, and so does each checkpoint --
 06724:     # may already be in the table, and the caller hears so through
 06725:     # `in_doubt`. The direct pool's return path best-effort-commits
 06726:     # pipelined frames, so a connection that saw any flush is dropped
 06727:     # (discarding the uncommitted frames) instead of returned. When no
 06728:     # flush succeeded there is nothing pipelined and the connection can be
 06729:     # returned normally: the FFI return path itself closes (rather than
 06730:     # recycles) a conn that recorded a terminal transport or protocol
 06731:     # error.
+06732:     if conn == NULL:
  __pyx_t_1 = (__pyx_v_conn == NULL);

  if (__pyx_t_1) {
/* … */
  }
+06733:         return False
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+06734:     return flushed
  {

    __pyx_r = __pyx_v_flushed;
  }
  goto __pyx_L0;
 06735: 
 06736: 
+06737: 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;
}
 06738:         line_sender_error* err) noexcept:
+06739:     cdef size_t msg_len = 0
  __pyx_v_msg_len = 0;
+06740:     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));
+06741:     if msg_len < 47:
  __pyx_t_1 = (__pyx_v_msg_len < 47);

  if (__pyx_t_1) {
/* … */
  }
+06742:         return False
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+06743:     return strncmp(
  {

    __pyx_r = (strncmp(__pyx_v_msg, __pyx_k_column_sender_deferred_flush_cap, 47) == 0);
  }
  goto __pyx_L0;
 06744:         msg,
 06745:         "column sender deferred flush capacity exhausted",
 06746:         47) == 0
 06747: 
 06748: 
+06749: 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;
}
 06750:         qwp_direct_sender* conn,
 06751:         qwp_chunk* chunk,
 06752:         bint retry_after_sync,
 06753:         bint* may_have_committed_prefix) except -1:
+06754:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 06755:     cdef line_sender_error_code err_code
+06756:     cdef bint ok = False
  __pyx_v_ok = 0;
+06757:     cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+06758:     cdef uint64_t start_ns = 0
  __pyx_v_start_ns = 0;
 06759:     global _dataframe_columnar_flush_calls
 06760:     global _dataframe_columnar_flush_ns
 06761:     global _dataframe_columnar_flush_retry_syncs
 06762: 
+06763:     if _dataframe_columnar_count_io_stats:
  if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
  }
+06764:         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, 6764, __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, 6764, __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, 6764, __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, 6764, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_start_ns = __pyx_t_6;
+06765:     _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+06766:     ok = qwp_direct_sender_flush(conn, chunk, &err)
  __pyx_v_ok = qwp_direct_sender_flush(__pyx_v_conn, __pyx_v_chunk, (&__pyx_v_err));
+06767:     _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+06768:     if _dataframe_columnar_count_io_stats:
  if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
  }
+06769:         _dataframe_columnar_flush_calls += 1
    __pyx_v_7questdb_7_client__dataframe_columnar_flush_calls = (__pyx_v_7questdb_7_client__dataframe_columnar_flush_calls + 1);
+06770:         _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, 6770, __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, 6770, __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, 6770, __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, 6770, __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, 6770, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_2 = __Pyx_PyNumber_Subtract_object_int(__pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6770, __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 = __Pyx_PyNumber_InPlaceAdd_int_object(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6770, __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, 6770, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_v_7questdb_7_client__dataframe_columnar_flush_ns = __pyx_t_6;
+06771:     if ok:
  if (__pyx_v_ok) {
/* … */
  }
+06772:         may_have_committed_prefix[0] = True
    (__pyx_v_may_have_committed_prefix[0]) = 1;
+06773:         return 0
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
 06774: 
+06775:     err_code = line_sender_error_get_code(err)
  __pyx_v_err_code = line_sender_error_get_code(__pyx_v_err);
+06776:     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) {
/* … */
  }
+06777:             _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:;
+06778:         if _dataframe_columnar_count_io_stats:
    if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
    }
+06779:             _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);
+06780:         line_sender_error_free(err)
    line_sender_error_free(__pyx_v_err);
+06781:         err = NULL
    __pyx_v_err = NULL;
+06782:         _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, 6782, __pyx_L1_error)

+06783:         may_have_committed_prefix[0] = True
    (__pyx_v_may_have_committed_prefix[0]) = 1;
+06784:         if _dataframe_columnar_count_io_stats:
    if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
    }
+06785:             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, 6785, __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, 6785, __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, 6785, __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, 6785, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_v_start_ns = __pyx_t_6;
+06786:         _ensure_doesnt_have_gil(&gs)
    (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+06787:         ok = qwp_direct_sender_flush(conn, chunk, &err)
    __pyx_v_ok = qwp_direct_sender_flush(__pyx_v_conn, __pyx_v_chunk, (&__pyx_v_err));
+06788:         _ensure_has_gil(&gs)
    __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+06789:         if _dataframe_columnar_count_io_stats:
    if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
    }
+06790:             _dataframe_columnar_flush_calls += 1
      __pyx_v_7questdb_7_client__dataframe_columnar_flush_calls = (__pyx_v_7questdb_7_client__dataframe_columnar_flush_calls + 1);
+06791:             _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, 6791, __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, 6791, __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, 6791, __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, 6791, __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, 6791, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = __Pyx_PyNumber_Subtract_object_int(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6791, __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 = __Pyx_PyNumber_InPlaceAdd_int_object(__pyx_t_7, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6791, __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, 6791, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_v_7questdb_7_client__dataframe_columnar_flush_ns = __pyx_t_6;
+06792:         if ok:
    if (__pyx_v_ok) {
/* … */
    }
+06793:             may_have_committed_prefix[0] = True
      (__pyx_v_may_have_committed_prefix[0]) = 1;
+06794:             return 0
      {

        __pyx_r = 0;
      }
      goto __pyx_L0;
 06795: 
+06796:     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, 6796, __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, 6796, __pyx_L1_error)
 06797: 
 06798: 
+06799: 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;
}
 06800:         qwp_direct_sender* conn,
 06801:         line_sender_table_name table,
 06802:         ArrowArray* array,
 06803:         ArrowSchema* schema,
 06804:         line_sender_column_name* ts_column,
 06805:         bint at_scalar_set,
 06806:         int64_t at_scalar_nanos,
 06807:         const qwp_arrow_override* overrides,
 06808:         size_t overrides_len,
 06809:         line_sender_error** err) except -1:
+06810:     cdef bint ok = False
  __pyx_v_ok = 0;
+06811:     cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+06812:     cdef uint64_t start_ns = 0
  __pyx_v_start_ns = 0;
 06813:     global _dataframe_columnar_flush_calls
 06814:     global _dataframe_columnar_flush_ns
 06815: 
+06816:     if _dataframe_columnar_count_io_stats:
  if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
  }
+06817:         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, 6817, __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, 6817, __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, 6817, __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, 6817, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_start_ns = __pyx_t_6;
+06818:     _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+06819:     if ts_column != NULL:
  __pyx_t_7 = (__pyx_v_ts_column != NULL);

  if (__pyx_t_7) {
/* … */
    goto __pyx_L4;
  }
+06820:         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);
 06821:             conn, table, array, schema, ts_column[0],
 06822:             overrides, overrides_len, err)
+06823:     elif at_scalar_set:
  if (__pyx_v_at_scalar_set) {
/* … */
    goto __pyx_L4;
  }
+06824:         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);
 06825:             conn, table, array, schema, at_scalar_nanos,
 06826:             overrides, overrides_len, err)
 06827:     else:
+06828:         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:;
 06829:             conn, table, array, schema,
 06830:             overrides, overrides_len, err)
+06831:     _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+06832:     if _dataframe_columnar_count_io_stats:
  if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
  }
+06833:         _dataframe_columnar_flush_calls += 1
    __pyx_v_7questdb_7_client__dataframe_columnar_flush_calls = (__pyx_v_7questdb_7_client__dataframe_columnar_flush_calls + 1);
+06834:         _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, 6834, __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, 6834, __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, 6834, __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, 6834, __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, 6834, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_2 = __Pyx_PyNumber_Subtract_object_int(__pyx_t_4, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6834, __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 = __Pyx_PyNumber_InPlaceAdd_int_object(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6834, __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, 6834, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_v_7questdb_7_client__dataframe_columnar_flush_ns = __pyx_t_6;
+06835:     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;
 06836: 
 06837: 
+06838: 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;
}
 06839:         qwp_direct_sender* conn,
 06840:         line_sender_table_name table,
 06841:         ArrowArray* array,
 06842:         ArrowSchema* schema,
 06843:         line_sender_column_name* ts_column,
 06844:         bint at_scalar_set,
 06845:         int64_t at_scalar_nanos,
 06846:         const qwp_arrow_override* overrides,
 06847:         size_t overrides_len,
 06848:         bint retry_after_sync,
 06849:         bint* may_have_committed_prefix,
 06850:         size_t* deferred_since_sync) except -1:
+06851:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 06852:     global _dataframe_columnar_flush_retry_syncs
 06853: 
+06854:     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, 6854, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 != 0);


  if (__pyx_t_2) {
/* … */
  }
 06855:             conn, table, array, schema, ts_column,
 06856:             at_scalar_set, at_scalar_nanos,
 06857:             overrides, overrides_len, &err):
+06858:         may_have_committed_prefix[0] = True
    (__pyx_v_may_have_committed_prefix[0]) = 1;
+06859:         return 0
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
 06860: 
 06861:     # A batch larger than the server per-batch cap is split into several
 06862:     # deferred frames, so the caller's batch counter can undercount the
 06863:     # 127-slot in-flight window; commit to drain it and retry once. The
 06864:     # failed frame itself never hit the wire (`array` was re-exported;
 06865:     # `release` must still be set for the retry to be safe). The native split
 06866:     # path never exposes a retryable error after committing an internal prefix;
 06867:     # this explicit sync nevertheless makes the higher-level source prefix
 06868:     # sticky before the failed batch is retried.
+06869:     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) {
/* … */
  }
+06870:             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;
  }
 06871:                 line_sender_error_invalid_api_call
+06872:             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;
  }
+06873:             and array.release != NULL):
  __pyx_t_3 = (__pyx_v_array->release != NULL);


  __pyx_t_2 = __pyx_t_3;

  __pyx_L5_bool_binop_done:;
+06874:         if _dataframe_columnar_count_io_stats:
    if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
    }
+06875:             _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);
+06876:         line_sender_error_free(err)
    line_sender_error_free(__pyx_v_err);
+06877:         err = NULL
    __pyx_v_err = NULL;
+06878:         _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, 6878, __pyx_L1_error)

+06879:         may_have_committed_prefix[0] = True
    (__pyx_v_may_have_committed_prefix[0]) = 1;
+06880:         deferred_since_sync[0] = 0
    (__pyx_v_deferred_since_sync[0]) = 0;
+06881:         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, 6881, __pyx_L1_error)
    __pyx_t_2 = (__pyx_t_1 != 0);


    if (__pyx_t_2) {
/* … */
    }
 06882:                 conn, table, array, schema, ts_column,
 06883:                 at_scalar_set, at_scalar_nanos,
 06884:                 overrides, overrides_len, &err):
+06885:             may_have_committed_prefix[0] = True
      (__pyx_v_may_have_committed_prefix[0]) = 1;
+06886:             return 0
      {

        __pyx_r = 0;
      }
      goto __pyx_L0;
 06887: 
+06888:     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, 6888, __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, 6888, __pyx_L1_error)
 06889: 
 06890: 
+06891: def _debug_dataframe_columnar_io_stats(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_24_debug_dataframe_columnar_io_stats(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_23_debug_dataframe_columnar_io_stats, "\n    Internal benchmark hook for columnar flush/sync timing.\n    ");
static PyMethodDef __pyx_mdef_7questdb_7_client_24_debug_dataframe_columnar_io_stats = {"_debug_dataframe_columnar_io_stats", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_24_debug_dataframe_columnar_io_stats, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_23_debug_dataframe_columnar_io_stats};
static PyObject *__pyx_pw_7questdb_7_client_24_debug_dataframe_columnar_io_stats(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 6891, __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, 6891, __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, 6891, __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, 6891, __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_23_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;
}
/* … */
  {
    PyObject* __pyx_temp[2] = {Py_None, __pyx_t_17};
    __pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 6891, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_20);
  }
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_24_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[115])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 6891, __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_t_20);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_dataframe_columnar_io_sta, __pyx_t_17) < (0)) __PYX_ERR(0, 6891, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+06892:         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, 6891, __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, 6891, __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, 6893, __pyx_L3_error)
    } else {
+06893:         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, 6891, __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_23_debug_dataframe_columnar_io_stats(__pyx_self, __pyx_v_enabled, __pyx_v_reset);
/* … */
  __pyx_t_17 = __Pyx_PyBool_FromLong(((int)0)); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 6893, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
 06894:     """
 06895:     Internal benchmark hook for columnar flush/sync timing.
 06896:     """
 06897:     global _dataframe_columnar_count_io_stats
 06898:     global _dataframe_columnar_flush_calls
 06899:     global _dataframe_columnar_flush_ns
 06900:     global _dataframe_columnar_sync_calls
 06901:     global _dataframe_columnar_sync_ns
 06902:     global _dataframe_columnar_flush_retry_syncs
 06903: 
+06904:     if reset:
  if (__pyx_v_reset) {
/* … */
  }
+06905:         _dataframe_columnar_flush_calls = 0
    __pyx_v_7questdb_7_client__dataframe_columnar_flush_calls = 0;
+06906:         _dataframe_columnar_flush_ns = 0
    __pyx_v_7questdb_7_client__dataframe_columnar_flush_ns = 0;
+06907:         _dataframe_columnar_sync_calls = 0
    __pyx_v_7questdb_7_client__dataframe_columnar_sync_calls = 0;
+06908:         _dataframe_columnar_sync_ns = 0
    __pyx_v_7questdb_7_client__dataframe_columnar_sync_ns = 0;
+06909:         _dataframe_columnar_flush_retry_syncs = 0
    __pyx_v_7questdb_7_client__dataframe_columnar_flush_retry_syncs = 0;
+06910:     if enabled is not None:
  __pyx_t_1 = (__pyx_v_enabled != Py_None);
  if (__pyx_t_1) {
/* … */
  }
+06911:         _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, 6911, __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, 6911, __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;
 06912:     return {
+06913:         'enabled': _dataframe_columnar_count_io_stats,
  __pyx_t_2 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6913, __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, 6913, __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, 6913, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06914:         '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, 6914, __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, 6913, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06915:         '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, 6915, __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, 6913, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06916:         '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, 6916, __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, 6913, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06917:         '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, 6917, __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, 6913, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06918:         '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, 6918, __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, 6913, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_2;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_2 = 0;
  goto __pyx_L0;
 06919:     }
 06920: 
 06921: 
+06922: def _debug_dataframe_columnar_plan(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_26_debug_dataframe_columnar_plan(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_26_debug_dataframe_columnar_plan = {"_debug_dataframe_columnar_plan", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_26_debug_dataframe_columnar_plan, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_26_debug_dataframe_columnar_plan(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 6922, __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, 6922, __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, 6922, __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_25_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_17 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 6922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
/* … */
  __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_26_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[116])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 6922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20);
  #endif
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_20, __pyx_t_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_plan, __pyx_t_20) < (0)) __PYX_ERR(0, 6922, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 06923:         object df,
 06924:         *,
+06925:         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, 6922, __pyx_L1_error)
+06926:         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_17, __pyx_mstate_global->__pyx_n_u_table_name_col, Py_None) < (0)) __PYX_ERR(0, 6922, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_symbols, ((PyObject*)__pyx_mstate_global->__pyx_n_u_auto)) < (0)) __PYX_ERR(0, 6922, __pyx_L1_error)
 06927:         object symbols='auto',
+06928:         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, 6922, __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, 6922, __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, 6922, __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_25_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_17, __pyx_mstate_global->__pyx_n_u_at, Py_None) < (0)) __PYX_ERR(0, 6922, __pyx_L1_error)
+06929:     cdef qdb_pystr_buf* b = qdb_pystr_buf_new()
  __pyx_v_b = qdb_pystr_buf_new();
+06930:     cdef dataframe_plan_t plan = dataframe_plan_blank()
  __pyx_v_plan = __pyx_f_7questdb_7_client_dataframe_plan_blank();
 06931:     cdef object failures
+06932:     try:
  /*try:*/ {
+06933:         _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, 6933, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

 06934:             b,
 06935:             df,
 06936:             table_name,
 06937:             table_name_col,
 06938:             symbols,
 06939:             at,
 06940:             &plan,
+06941:             _FIELD_TARGETS_QWP)
    __pyx_t_1 = __pyx_v_7questdb_7_client__FIELD_TARGETS_QWP;
    __Pyx_INCREF(__pyx_t_1);
+06942:         _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, 6942, __pyx_L4_error)

+06943:         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, 6943, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_failures = __pyx_t_1;
    __pyx_t_1 = 0;
 06944:         return {
+06945:             'supported': not bool(failures),
    __pyx_t_1 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6945, __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, 6945, __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, 6945, __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, 6945, __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, 6945, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06946:             'failures': failures,
    if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_failures, __pyx_v_failures) < (0)) __PYX_ERR(0, 6945, __pyx_L4_error)
+06947:             '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, 6947, __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, 6945, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_1;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L3_return;
  }
 06948:                 df,
 06949:                 &plan),
 06950:         }
 06951:     finally:
+06952:         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));
+06953:         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;
    }
  }
 06954: 
 06955: 
+06956: def _bench_dataframe_flush_arrow_batch(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_28_bench_dataframe_flush_arrow_batch(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_27_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_28_bench_dataframe_flush_arrow_batch = {"_bench_dataframe_flush_arrow_batch", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_28_bench_dataframe_flush_arrow_batch, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_27_bench_dataframe_flush_arrow_batch};
static PyObject *__pyx_pw_7questdb_7_client_28_bench_dataframe_flush_arrow_batch(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 6956, __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, 6956, __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, 6956, __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_27_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_20 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 6956, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_28_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[117])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 6956, __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_20);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_bench_dataframe_flush_arrow_bat_2, __pyx_t_17) < (0)) __PYX_ERR(0, 6956, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 06957:         object arrow_source,
 06958:         *,
+06959:         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_20, __pyx_mstate_global->__pyx_n_u_table_name, Py_None) < (0)) __PYX_ERR(0, 6956, __pyx_L1_error)
+06960:         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_20, __pyx_mstate_global->__pyx_n_u_at, Py_None) < (0)) __PYX_ERR(0, 6956, __pyx_L1_error)
+06961:         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, 6956, __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, 6956, __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, 6962, __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, 6956, __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_27_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_20, __pyx_mstate_global->__pyx_n_u_conf, Py_None) < (0)) __PYX_ERR(0, 6956, __pyx_L1_error)
+06962:         size_t iterations=1):
  __pyx_t_17 = __Pyx_PyLong_FromSize_t(((size_t)1)); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 6962, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_iterations, __pyx_t_17) < (0)) __PYX_ERR(0, 6956, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 06963:     """
 06964:     Internal benchmark hook for `qwp_direct_sender_flush_arrow_batch_at_now`
 06965:     FFI.
 06966: 
 06967:     `arrow_source` must expose the Arrow PyCapsule Interface
 06968:     (`__arrow_c_stream__`) — pa.RecordBatch, pa.Table, pa.RecordBatchReader,
 06969:     pl.DataFrame, or any other Arrow-native container. Pandas frames are
 06970:     not accepted here on purpose: this hook benches the Arrow FFI itself,
 06971:     not pandas→Arrow conversion. Use `_bench_dataframe_plan_and_populate_
 06972:     column_chunks` for the pandas chunk-based path. Intentionally kept out
 06973:     of `__all__`.
 06974:     """
 06975:     cdef size_t iteration
+06976:     cdef size_t row_count = 0
  __pyx_v_row_count = 0;
+06977:     cdef size_t col_count = 0
  __pyx_v_col_count = 0;
+06978:     cdef size_t completed = 0
  __pyx_v_completed = 0;
+06979:     cdef questdb_db* db = NULL
  __pyx_v_db = NULL;
+06980:     cdef qwp_direct_sender* conn = NULL
  __pyx_v_conn = NULL;
+06981:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+06982:     cdef qdb_pystr_buf* b = NULL
  __pyx_v_b = NULL;
+06983:     cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
 06984:     cdef bytes conf_bytes
+06985:     cdef bint any_flushed = False
  __pyx_v_any_flushed = 0;
+06986:     cdef bint may_have_committed_prefix = False
  __pyx_v_may_have_committed_prefix = 0;
+06987:     cdef size_t deferred_since_sync = 0
  __pyx_v_deferred_since_sync = 0;
 06988:     cdef line_sender_table_name c_table_name
 06989:     cdef line_sender_column_name c_ts_column
+06990:     cdef line_sender_column_name* c_ts_column_ptr = NULL
  __pyx_v_c_ts_column_ptr = NULL;
 06991:     cdef ArrowSchema c_schema
+06992:     cdef bint at_is_column = False
  __pyx_v_at_is_column = 0;
 06993: 
+06994:     if iterations == 0:
  __pyx_t_1 = (__pyx_v_iterations == 0);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+06995:         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, 6995, __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, 6995, __pyx_L1_error)
+06996:     if conf is None:
  __pyx_t_1 = (__pyx_v_conf == Py_None);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+06997:         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, 6997, __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, 6997, __pyx_L1_error)
+06998:     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, 6998, __pyx_L1_error)
  __pyx_t_5 = (!__pyx_t_1);


  if (unlikely(__pyx_t_5)) {
/* … */
  }
+06999:         raise TypeError(
    __pyx_t_3 = NULL;
+07000:             '_bench_dataframe_flush_arrow_batch requires an Arrow-native '
    __pyx_t_9 = 164;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8[1]);
    #endif
    __pyx_t_10 = 0;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_10 |= __Pyx_PyUnicode_KIND_04(__pyx_t_8[1]);
    #endif
    __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, __pyx_t_9, __pyx_t_10);
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7000, __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, 6999, __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, 6999, __pyx_L1_error)
 07001:             'source exposing __arrow_c_stream__ '
 07002:             '(pa.RecordBatch / pa.Table / pl.DataFrame / RecordBatchReader). '
+07003:             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, 7003, __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, 7003, __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__3;
+07004:     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)) {
/* … */
  }
+07005:         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, 7005, __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, 7005, __pyx_L1_error)
 07006:             'table_name must be str for Arrow-native DataFrame input.')
+07007:     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, 7007, __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, 7007, __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;
  }
+07008:         at_is_column = False
    __pyx_v_at_is_column = 0;
+07009:     elif isinstance(at, str):
  __pyx_t_1 = PyUnicode_Check(__pyx_v_at); 
  if (likely(__pyx_t_1)) {
/* … */
    goto __pyx_L7;
  }
+07010:         at_is_column = True
    __pyx_v_at_is_column = 1;
 07011:     else:
+07012:         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, 7012, __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, 7012, __pyx_L1_error)
  }
  __pyx_L7:;
 07013:             'at must be a column name str, ServerTimestamp, or None '
 07014:             'for Arrow-native DataFrame input.')
 07015: 
+07016:     row_count = int(
  __pyx_t_6 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7016, __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, 7016, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_row_count = __pyx_t_4;
+07017:         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, 7017, __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, 7017, __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;
  }
+07018:         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, 7018, __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, 7018, __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;
  }
+07019:         or 0)
  __pyx_t_6 = __Pyx_PyLong_From_long(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7019, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_2 = __pyx_t_6;
  __pyx_t_6 = 0;
  __pyx_L10_bool_binop_done:;
+07020:     col_count = int(
  __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7020, __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, 7020, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_col_count = __pyx_t_4;
+07021:         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, 7021, __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, 7021, __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;
  }
+07022:         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, 7022, __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, 7022, __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;
  }
+07023:         or 0)
  __pyx_t_2 = __Pyx_PyLong_From_long(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7023, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_L13_bool_binop_done:;
 07024: 
+07025:     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, 7025, __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, 7025, __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, 7025, __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;
+07026:     _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+07027:     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, 7027, __pyx_L1_error)
  }
  __pyx_t_11 = __Pyx_PyBytes_AsString(__pyx_v_conf_bytes); if (unlikely((!__pyx_t_11) && PyErr_Occurred())) __PYX_ERR(0, 7027, __pyx_L1_error)
  if (unlikely(__pyx_v_conf_bytes == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type \047NoneType\047 has no len()");
    __PYX_ERR(0, 7027, __pyx_L1_error)
  }
  __pyx_t_9 = __Pyx_PyBytes_GET_SIZE(__pyx_v_conf_bytes); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 7027, __pyx_L1_error)
  __pyx_v_db = questdb_db_connect(__pyx_t_11, __pyx_t_9, (&__pyx_v_err));


+07028:     _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+07029:     if db == NULL:
  __pyx_t_1 = (__pyx_v_db == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+07030:         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, 7030, __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, 7030, __pyx_L1_error)
+07031:     b = qdb_pystr_buf_new()
  __pyx_v_b = qdb_pystr_buf_new();
+07032:     memset(&c_schema, 0, sizeof(ArrowSchema))
  (void)(memset((&__pyx_v_c_schema), 0, (sizeof(struct ArrowSchema))));
+07033:     try:
  /*try:*/ {
+07034:         str_to_table_name(b, <PyObject*>table_name, &c_table_name)
    __pyx_t_12 = __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_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7034, __pyx_L18_error)

+07035:         if at_is_column:
    if (__pyx_v_at_is_column) {
/* … */
    }
+07036:             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, 7036, __pyx_L18_error)
      __pyx_t_12 = __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_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7036, __pyx_L18_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

+07037:             c_ts_column_ptr = &c_ts_column
      __pyx_v_c_ts_column_ptr = (&__pyx_v_c_ts_column);
 07038: 
+07039:         _ensure_doesnt_have_gil(&gs)
    (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+07040:         conn = questdb_db_borrow_direct_sender(db, &err)
    __pyx_v_conn = questdb_db_borrow_direct_sender(__pyx_v_db, (&__pyx_v_err));
+07041:         _ensure_has_gil(&gs)
    __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+07042:         if conn == NULL:
    __pyx_t_1 = (__pyx_v_conn == NULL);

    if (unlikely(__pyx_t_1)) {
/* … */
    }
+07043:             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, 7043, __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, 7043, __pyx_L18_error)
+07044:         try:
    /*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_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_13);
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_XGIVEREF(__pyx_t_15);
        __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15);
        goto __pyx_L23_error;
        __pyx_L30_try_end:;
      }
    }
+07045:             for iteration in range(iterations):
          __pyx_t_4 = __pyx_v_iterations;
          __pyx_t_16 = __pyx_t_4;

          for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
            __pyx_v_iteration = __pyx_t_17;
+07046:                 _capsule_consume_stream(
            __pyx_t_12 = __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_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7046, __pyx_L25_error)

          }

 07047:                     conn, arrow_source, c_table_name, c_ts_column_ptr,
 07048:                     False, 0, &c_schema, NULL, 0, &any_flushed,
 07049:                     &deferred_since_sync, &may_have_committed_prefix,
 07050:                     None, None)
+07051:             if any_flushed:
          if (__pyx_v_any_flushed) {
/* … */
          }
+07052:                 _dataframe_columnar_sync(conn)
            __pyx_t_12 = __pyx_f_7questdb_7_client__dataframe_columnar_sync(__pyx_v_conn); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7052, __pyx_L25_error)

+07053:             completed = iterations
          __pyx_v_completed = __pyx_v_iterations;
+07054:         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, 7054, __pyx_L27_except_error)
          __Pyx_XGOTREF(__pyx_t_2);
          __Pyx_XGOTREF(__pyx_t_6);
          __Pyx_XGOTREF(__pyx_t_3);
+07055:             questdb_db_drop_direct_sender(db, conn)
          questdb_db_drop_direct_sender(__pyx_v_db, __pyx_v_conn);
+07056:             conn = NULL
          __pyx_v_conn = NULL;
+07057:             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, 7057, __pyx_L27_except_error)
        }
 07058:         finally:
+07059:             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_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 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_15, &__pyx_t_14, &__pyx_t_13) < 0)) __Pyx_ErrFetch(&__pyx_t_15, &__pyx_t_14, &__pyx_t_13);
        __Pyx_XGOTREF(__pyx_t_15);
        __Pyx_XGOTREF(__pyx_t_14);
        __Pyx_XGOTREF(__pyx_t_13);
        __Pyx_XGOTREF(__pyx_t_20);
        __Pyx_XGOTREF(__pyx_t_21);
        __Pyx_XGOTREF(__pyx_t_22);
        __pyx_t_10 = __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_15);
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_ErrRestore(__pyx_t_15, __pyx_t_14, __pyx_t_13);
        __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0;
        __pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19;
        goto __pyx_L18_error;
      }
      __pyx_L24:;
    }
  }
+07060:                 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);
 07061:     finally:
+07062:         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) {
/* … */
        }
+07063:             c_schema.release(&c_schema)
        __pyx_v_c_schema.release((&__pyx_v_c_schema));
/* … */
          __pyx_v_c_schema.release((&__pyx_v_c_schema));
+07064:         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) {
/* … */
        }
+07065:             qdb_pystr_buf_free(b)
        qdb_pystr_buf_free(__pyx_v_b);
/* … */
          qdb_pystr_buf_free(__pyx_v_b);
+07066:         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_13 = 0; __pyx_t_14 = 0; __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_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
      if ( unlikely(__Pyx_GetException(&__pyx_t_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_13);
      __Pyx_XGOTREF(__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_15);
      __pyx_t_18 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_19 = __pyx_filename;
      {
/* … */
        __pyx_t_1 = (__pyx_v_db != NULL);

        if (__pyx_t_1) {
/* … */
        }
      }
      __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_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_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0;
      __pyx_lineno = __pyx_t_18; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_19;
      goto __pyx_L1_error;
    }
    __pyx_L19:;
  }
+07067:             questdb_db_close(db)
        questdb_db_close(__pyx_v_db);
/* … */
          questdb_db_close(__pyx_v_db);
 07068: 
 07069:     return {
+07070:         'iterations': iterations,
  __pyx_t_3 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7070, __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, 7070, __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, 7070, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+07071:         'row_count': row_count,
  __pyx_t_6 = __Pyx_PyLong_FromSize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7071, __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, 7070, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+07072:         'col_count': col_count,
  __pyx_t_6 = __Pyx_PyLong_FromSize_t(__pyx_v_col_count); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7072, __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, 7070, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+07073:         '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, 7073, __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, 7070, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+07074:         'completed': completed,
  __pyx_t_6 = __Pyx_PyLong_FromSize_t(__pyx_v_completed); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7074, __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, 7070, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_3;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_3 = 0;
  goto __pyx_L0;
 07075:     }
 07076: 
 07077: 
+07078: def _bench_dataframe_plan_and_populate_column_chunks(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_30_bench_dataframe_plan_and_populate_column_chunks(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_29_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_30_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_30_bench_dataframe_plan_and_populate_column_chunks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_29_bench_dataframe_plan_and_populate_column_chunks};
static PyObject *__pyx_pw_7questdb_7_client_30_bench_dataframe_plan_and_populate_column_chunks(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 7078, __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, 7078, __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, 7078, __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_29_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_17 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 7078, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
/* … */
  __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_30_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[118])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 7078, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20);
  #endif
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_20, __pyx_t_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_plan_and_popula, __pyx_t_20) < (0)) __PYX_ERR(0, 7078, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 07079:         object df,
 07080:         *,
+07081:         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, 7078, __pyx_L1_error)
+07082:         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_17, __pyx_mstate_global->__pyx_n_u_table_name_col, Py_None) < (0)) __PYX_ERR(0, 7078, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_symbols, ((PyObject*)__pyx_mstate_global->__pyx_n_u_auto)) < (0)) __PYX_ERR(0, 7078, __pyx_L1_error)
 07083:         object symbols='auto',
+07084:         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, 7078, __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, 7078, __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, 7085, __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, 7086, __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, 7078, __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_29_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_17, __pyx_mstate_global->__pyx_n_u_at, Py_None) < (0)) __PYX_ERR(0, 7078, __pyx_L1_error)
+07085:         size_t iterations=1,
  __pyx_t_20 = __Pyx_PyLong_FromSize_t(((size_t)1)); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 7085, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_iterations, __pyx_t_20) < (0)) __PYX_ERR(0, 7078, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+07086:         size_t max_rows_per_chunk=16384):
  __pyx_t_20 = __Pyx_PyLong_FromSize_t(((size_t)0x4000)); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 7086, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_max_rows_per_chunk, __pyx_t_20) < (0)) __PYX_ERR(0, 7078, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 07087:     """
 07088:     Internal benchmark hook for Layer 1 pandas columnar work.
 07089: 
 07090:     This builds the shared dataframe plan and populates #148 chunks, but it
 07091:     never flushes to a sender. It is intentionally kept out of ``__all__``.
 07092:     """
 07093:     cdef size_t iteration
+07094:     cdef qdb_pystr_buf* b = NULL
  __pyx_v_b = NULL;
 07095:     cdef dataframe_plan_t plan
+07096:     cdef qwp_chunk* chunk = NULL
  __pyx_v_chunk = NULL;
+07097:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 07098:     cdef uint64_t start_row_path_emissions
 07099:     cdef uint64_t end_row_path_emissions
+07100:     cdef size_t row_count = 0
  __pyx_v_row_count = 0;
+07101:     cdef size_t col_count = 0
  __pyx_v_col_count = 0;
+07102:     cdef size_t populated_rows = 0
  __pyx_v_populated_rows = 0;
+07103:     cdef size_t populated_rows_total = 0
  __pyx_v_populated_rows_total = 0;
+07104:     cdef size_t populated_chunks = 0
  __pyx_v_populated_chunks = 0;
+07105:     cdef size_t rows_per_chunk = 0
  __pyx_v_rows_per_chunk = 0;
 07106:     cdef size_t row_offset
 07107:     cdef size_t chunk_rows
 07108:     global _dataframe_count_row_path_emissions
 07109:     global _dataframe_row_path_emissions
 07110: 
+07111:     if iterations == 0:
  __pyx_t_1 = (__pyx_v_iterations == 0);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+07112:         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, 7112, __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, 7112, __pyx_L1_error)
 07113: 
+07114:     start_row_path_emissions = _dataframe_row_path_emissions
  __pyx_v_start_row_path_emissions = __pyx_v_7questdb_7_client__dataframe_row_path_emissions;
+07115:     _dataframe_count_row_path_emissions = True
  __pyx_v_7questdb_7_client__dataframe_count_row_path_emissions = 1;
+07116:     try:
  /*try:*/ {
+07117:         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;
+07118:             b = qdb_pystr_buf_new()
      __pyx_v_b = qdb_pystr_buf_new();
+07119:             plan = dataframe_plan_blank()
      __pyx_v_plan = __pyx_f_7questdb_7_client_dataframe_plan_blank();
+07120:             try:
      /*try:*/ {
+07121:                 _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, 7121, __pyx_L12_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

 07122:                     b,
 07123:                     df,
 07124:                     table_name,
 07125:                     table_name_col,
 07126:                     symbols,
 07127:                     at,
 07128:                     &plan,
+07129:                     _FIELD_TARGETS_QWP)
        __pyx_t_2 = __pyx_v_7questdb_7_client__FIELD_TARGETS_QWP;
        __Pyx_INCREF(__pyx_t_2);
+07130:                 row_count = plan.row_count
        __pyx_t_8 = __pyx_v_plan.row_count;

        __pyx_v_row_count = __pyx_t_8;
+07131:                 col_count = plan.col_count
        __pyx_t_8 = __pyx_v_plan.col_count;

        __pyx_v_col_count = __pyx_t_8;
+07132:                 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) {
/* … */
        }
+07133:                     continue
          goto __pyx_L9_continue;
 07134: 
+07135:                 _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, 7135, __pyx_L12_error)

+07136:                 _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, 7136, __pyx_L12_error)

+07137:                 _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, 7137, __pyx_L12_error)

+07138:                 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);
 07139:                     &plan,
 07140:                     max_rows_per_chunk)
+07141:                 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));
 07142:                     plan.c_table_name.buf,
 07143:                     plan.c_table_name.len,
 07144:                     &err)
+07145:                 if chunk == NULL:
        __pyx_t_1 = (__pyx_v_chunk == NULL);

        if (unlikely(__pyx_t_1)) {
/* … */
        }
+07146:                     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, 7146, __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, 7146, __pyx_L12_error)
+07147:                 row_offset = 0
        __pyx_v_row_offset = 0;
+07148:                 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;
+07149:                     if not qwp_chunk_clear(chunk, &err):
          __pyx_t_1 = (!qwp_chunk_clear(__pyx_v_chunk, (&__pyx_v_err)));

          if (unlikely(__pyx_t_1)) {
/* … */
          }
+07150:                         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, 7150, __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, 7150, __pyx_L12_error)
+07151:                     chunk_rows = rows_per_chunk
          __pyx_v_chunk_rows = __pyx_v_rows_per_chunk;
+07152:                     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) {
/* … */
          }
+07153:                         chunk_rows = plan.row_count - row_offset
            __pyx_v_chunk_rows = (__pyx_v_plan.row_count - __pyx_v_row_offset);
+07154:                     _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, 7154, __pyx_L12_error)

 07155:                         &plan,
 07156:                         chunk,
 07157:                         row_offset,
 07158:                         chunk_rows)
+07159:                     populated_rows = qwp_chunk_row_count(chunk, &err)
          __pyx_v_populated_rows = qwp_chunk_row_count(__pyx_v_chunk, (&__pyx_v_err));
+07160:                     if populated_rows == <size_t>-1:
          __pyx_t_1 = (__pyx_v_populated_rows == ((size_t)-1L));

          if (unlikely(__pyx_t_1)) {
/* … */
          }
+07161:                         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, 7161, __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, 7161, __pyx_L12_error)
+07162:                     if populated_rows != 0:
          __pyx_t_1 = (__pyx_v_populated_rows != 0);

          if (__pyx_t_1) {
/* … */
          }
+07163:                         populated_chunks += 1
            __pyx_v_populated_chunks = (__pyx_v_populated_chunks + 1);
+07164:                         populated_rows_total += populated_rows
            __pyx_v_populated_rows_total = (__pyx_v_populated_rows_total + __pyx_v_populated_rows);
+07165:                     row_offset += chunk_rows
          __pyx_v_row_offset = (__pyx_v_row_offset + __pyx_v_chunk_rows);
        }
      }
 07166:             finally:
+07167:                 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) {
/* … */
          }
+07168:                     qwp_chunk_free(chunk)
            qwp_chunk_free(__pyx_v_chunk);
/* … */
              qwp_chunk_free(__pyx_v_chunk);
/* … */
            qwp_chunk_free(__pyx_v_chunk);
+07169:                     chunk = NULL
            __pyx_v_chunk = NULL;
/* … */
              __pyx_v_chunk = NULL;
/* … */
            __pyx_v_chunk = NULL;
+07170:                 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));
+07171:                 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:;
    }

  }
+07172:                     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);
+07173:                     b = NULL
            __pyx_v_b = NULL;
/* … */
              __pyx_v_b = NULL;
/* … */
            __pyx_v_b = NULL;
 07174:     finally:
+07175:         _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_12 = __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_12;
      goto __pyx_L1_error;
    }
    __pyx_L6:;
  }
 07176: 
+07177:     end_row_path_emissions = _dataframe_row_path_emissions
  __pyx_v_end_row_path_emissions = __pyx_v_7questdb_7_client__dataframe_row_path_emissions;
 07178:     return {
+07179:         'iterations': iterations,
  __pyx_t_2 = __Pyx_PyDict_NewPresized(9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7179, __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, 7179, __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, 7179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07180:         'row_count': row_count,
  __pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7180, __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, 7179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07181:         'col_count': col_count,
  __pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_col_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7181, __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, 7179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07182:         '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, 7182, __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, 7179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07183:         '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, 7183, __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, 7179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07184:         'populated_chunks': populated_chunks,
  __pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_populated_chunks); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7184, __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, 7179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07185:         '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, 7185, __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, 7179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07186:         'last_populated_rows': populated_rows,
  __pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_populated_rows); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7186, __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, 7179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 07187:         'row_path_cell_emissions': (
+07188:             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, 7188, __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, 7179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_2;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_2 = 0;
  goto __pyx_L0;
 07189:     }
 07190: 
 07191: 
+07192: 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);
+07193: 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);
+07194: 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);
+07195: 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);
 07196: 
 07197: # Whether this polars reinterprets 8- and 16-bit integers (1.39+).
 07198: # None until first asked. A plain module global, so tests can set it.
+07199: _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, 7199, __pyx_L1_error)
 07200: 
 07201: 
+07202: 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;
}
 07203:     """Whether `reinterpret` works on an 8- or 16-bit polars column.
 07204: 
 07205:     Probed once, by trying it, rather than read off the version string.
 07206:     A `LazyFrame` raises only when collected, so the call that builds
 07207:     the expression cannot tell. Any failure means "no": the exception
 07208:     class differs across polars versions. Two threads that both find
 07209:     the answer missing both probe and store the same value. Called only
 07210:     after `_try_import_polars()` has set `_POLARS`.
 07211:     """
 07212:     global _POLARS_NARROW_REINTERPRET
+07213:     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, 7213, __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) {
/* … */
  }
+07214:         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:;
    }
+07215:             _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, 7215, __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, 7215, __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, 7215, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_11 = 0;
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_9, __pyx_t_10};
          #if CYTHON_VECTORCALL
          __pyx_t_12 = __pyx_mstate_global->__pyx_tuple[4];
          if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7215, __pyx_L4_error)
          __Pyx_INCREF(__pyx_t_12);
          #else
          {
            PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_dtype};
            __pyx_t_12 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
            if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7215, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_12);
          }
          #endif
          __pyx_t_7 = __Pyx_Object_VectorcallMethodKwds((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, 7215, __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] = {__pyx_t_6, Py_True};
          #if CYTHON_VECTORCALL
          __pyx_t_12 = __pyx_mstate_global->__pyx_tuple[14];
          if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7215, __pyx_L4_error)
          __Pyx_INCREF(__pyx_t_12);
          #else
          {
            PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_signed};
            __pyx_t_12 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
            if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7215, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_12);
          }
          #endif
          __pyx_t_1 = __Pyx_Object_VectorcallMethodKwds((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, 7215, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+07216:             _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, 7216, __pyx_L4_error)
+07217:         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, 7217, __pyx_L6_except_error)
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_12);
+07218:             _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, 7218, __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;
+07219:     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, 7219, __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, 7219, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  {
    __pyx_r = __pyx_t_2;
  }
  goto __pyx_L0;
 07220: 
 07221: 
+07222: 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;
}
 07223:     global _POLARS, _POLARS_DATAFRAME_T, _POLARS_LAZYFRAME_T
 07224:     global _POLARS_SERIES_T
+07225:     if _POLARS is not None:
  __pyx_t_1 = (__pyx_v_7questdb_7_client__POLARS != Py_None);
  if (__pyx_t_1) {
/* … */
  }
+07226:         return True
    {

      __pyx_r = 1;
    }
    goto __pyx_L0;
+07227:     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:;
  }
+07228:         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, 7228, __pyx_L4_error)
      __pyx_t_5 = __pyx_t_6;
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_v_polars = __pyx_t_5;
      __pyx_t_5 = 0;
+07229:     except ImportError:
    __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_ImportError))));
    if (__pyx_t_7) {
      __Pyx_ErrRestore(0,0,0);
+07230:         return False
      {

        __pyx_r = 0;
      }
      goto __pyx_L7_except_return;
    }
    goto __pyx_L6_except_error;
+07231:     _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, 7231, __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;
+07232:     _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, 7232, __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;
+07233:     _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, 7233, __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;
+07234:     _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);
+07235:     return True
  {

    __pyx_r = 1;
  }
  goto __pyx_L0;
 07236: 
 07237: 
+07238: 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;
}
+07239:     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, 7239, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);


  if (__pyx_t_2) {
/* … */
  }
+07240:         return False
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+07241:     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;
 07242: 
 07243: 
+07244: 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;
}
 07245:     """`(name, dtype)` for each column a polars DataFrame or Series
 07246:     exports, in order; None for any other object. A Series exports as a
 07247:     single column named after it. Call only after `_try_import_polars()`
 07248:     has returned True."""
+07249:     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, 7249, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+07250:         return list(frame.schema.items())
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7250, __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, 7250, __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, 7250, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_4;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_4 = 0;
    goto __pyx_L0;
+07251:     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, 7251, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__pyx_t_2) {
/* … */
  }
+07252:         return [(frame.name, frame.dtype)]
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7252, __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, 7252, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7252, __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, 7252, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_1);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1) != (0)) __PYX_ERR(0, 7252, __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, 7252, __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, 7252, __pyx_L1_error);
    __pyx_t_3 = 0;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_1;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L0;
+07253:     return None
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 07254: 
 07255: 
+07256: 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_15);
  __Pyx_XDECREF(__pyx_t_16);
  __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;
}
 07257:     """polars exports an ``Object`` column as ``fixed_size_binary(8)``
 07258:     holding in-process handles, which the server would store as BINARY
 07259:     blobs of raw memory addresses. Reject such a column of a polars
 07260:     DataFrame or Series before the Arrow export, mirroring the Rust
 07261:     polars API. The code is `ArrowUnsupportedColumnKind`, the one 5.0
 07262:     raises for these inputs. The same column reaching the client in any
 07263:     other shape is refused by its width, in `_refuse_fsb8_columns`."""
 07264:     cdef object object_dtype
 07265:     cdef object columns
 07266:     cdef object name
 07267:     cdef object dtype
+07268:     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, 7268, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);


  if (__pyx_t_2) {
/* … */
  }
+07269:         return 0
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+07270:     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, 7270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_columns = __pyx_t_3;
  __pyx_t_3 = 0;
+07271:     if columns is None:
  __pyx_t_2 = (__pyx_v_columns == Py_None);
  if (__pyx_t_2) {
/* … */
  }
+07272:         return 0
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+07273:     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, 7273, __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;
+07274:     if object_dtype is None:
  __pyx_t_2 = (__pyx_v_object_dtype == Py_None);
  if (__pyx_t_2) {
/* … */
  }
+07275:         return 0
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+07276:     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, 7276, __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, 7276, __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, 7276, __pyx_L1_error)
          #endif
          if (__pyx_t_5 >= __pyx_temp) break;
        }
        __pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(__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, 7276, __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, 7276, __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, 7276, __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, 7276, __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_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7276, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_t_7);
        __pyx_t_8 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7276, __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, 7276, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7276, __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, 7276, __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, 7276, __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, 7276, __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;
+07277:         if dtype == object_dtype:
    __pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_v_dtype, __pyx_v_object_dtype, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7277, __pyx_L1_error)
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+07278:             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, 7278, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
+07279:                 QuestDBErrorCode.ArrowUnsupportedColumnKind,
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7279, __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, 7279, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+07280:                 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, 7280, __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 = 121;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12[1]);
      #endif
      __pyx_t_14 = 0;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_14 |= __Pyx_PyUnicode_KIND_04(__pyx_t_12[1]);
      #endif
      __pyx_t_15 = __Pyx_PyUnicode_Join(__pyx_t_12, 3, __pyx_t_13, __pyx_t_14);
      if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7280, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 07281:                 f'supported; it exports as handles to objects in this '
 07282:                 f'process rather than as data. '
+07283:                 + _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, 7283, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_16 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_t_15, __pyx_t_9); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 7283, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_16);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_17 = 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_17 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_11, __pyx_t_16};
        __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_17, (3-__pyx_t_17) | (__pyx_t_17*__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_16); __pyx_t_16 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7278, __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, 7278, __pyx_L1_error)
+07284:     return 0
  {

    __pyx_r = 0;
  }
  goto __pyx_L0;
 07285: 
 07286: 
+07287: 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;
}
 07288:     """The names `frame`'s Arrow export gives its columns, as the Python
 07289:     objects they come from: a pandas DataFrame's column labels, plus the
 07290:     level names of an index other than a RangeIndex; a polars
 07291:     DataFrame's columns; a polars Series' own name; the schema names of a
 07292:     pyarrow Table, RecordBatch or RecordBatchReader. None for any other
 07293:     type."""
 07294:     cdef list names
+07295:     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, 7295, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+07296:         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, 7296, __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, 7296, __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, 7296, __pyx_L1_error)
    __pyx_v_names = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
 07297:         # pyarrow's pandas conversion writes each level of an index
 07298:         # other than a RangeIndex as a column. The level's own name is
 07299:         # what the NUL-name check needs; `_pandas_export_dtypes` gives
 07300:         # the same levels the names the export writes them under.
+07301:         _dataframe_may_import_deps()
    __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7301, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+07302:         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, 7302, __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, 7302, __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, 7302, __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) {
/* … */
    }
+07303:             names.extend(frame.index.names)
      if (unlikely(__pyx_v_names == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "extend");
        __PYX_ERR(0, 7303, __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, 7303, __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, 7303, __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, 7303, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

+07304:         return names
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_names);
        __pyx_r = __pyx_v_names;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+07305:     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, 7305, __pyx_L1_error)
  if (__pyx_t_6) {
/* … */
  }
+07306:         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, 7306, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_6) {
/* … */
    }
+07307:             return frame.columns
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7307, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __pyx_r = __pyx_t_2;
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      __pyx_t_2 = 0;
      goto __pyx_L0;
+07308:         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, 7308, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_6) {
/* … */
    }
+07309:             return [frame.name]
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7309, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7309, __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, 7309, __pyx_L1_error);
      __pyx_t_2 = 0;
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __pyx_r = __pyx_t_4;
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      __pyx_t_4 = 0;
      goto __pyx_L0;
+07310:     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, 7310, __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, 7310, __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, 7310, __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) {
/* … */
  }
 07311:         # A pyarrow object exists only once pyarrow is imported.
+07312:         return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+07313:     _dataframe_require_pyarrow()
  __pyx_t_4 = __pyx_f_7questdb_7_client__dataframe_require_pyarrow(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7313, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+07314:     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, 7314, __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, 7314, __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) {
/* … */
  }
+07315:                           _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, 7315, __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;
+07316:         return frame.schema.names
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7316, __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, 7316, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_8;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_8 = 0;
    goto __pyx_L0;
+07317:     return None
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 07318: 
 07319: 
+07320: 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_9genexpr20__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_13);
  __Pyx_XDECREF(__pyx_t_15);
  __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_9genexpr20__pyx_v_label);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 07321:     """`dtypes`, the frame's `df.dtypes`, extended with the dtype of each
 07322:     index level the frame's Arrow export writes as a column.
 07323: 
 07324:     pyarrow's pandas conversion writes every level of an index other
 07325:     than a RangeIndex as a column. It names the column after the level,
 07326:     converted to a string, unless the level has no name or its name is
 07327:     already taken; then it takes the first free `__index_level_{j}__`,
 07328:     counting from the level's position. A check that judges exported
 07329:     columns by their pandas dtype needs those columns too, or an index
 07330:     level escapes it. None when `dtypes` is None.
 07331: 
 07332:     The rule is the one current pyarrow applies. Older pyarrow does not
 07333:     skip a `__index_level_{j}__` that a data column already holds, so the
 07334:     two disagree only on a frame with a data column of that name: the
 07335:     level is then refused under another name, or its claim is not
 07336:     found. `_arrow_source_column_names` lists the same levels under
 07337:     their own names, which is what the NUL-name check reads."""
 07338:     cdef object index
 07339:     cdef object name
 07340:     cdef list taken
+07341:     cdef list names = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7341, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_names = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 07342:     cdef list level_dtypes
 07343:     cdef Py_ssize_t i
 07344:     cdef Py_ssize_t j
+07345:     if dtypes is None:
  __pyx_t_2 = (__pyx_v_dtypes == Py_None);
  if (__pyx_t_2) {
/* … */
  }
+07346:         return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+07347:     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, 7347, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_index = __pyx_t_1;
  __pyx_t_1 = 0;
+07348:     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, 7348, __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, 7348, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+07349:         return dtypes
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_dtypes);
        __pyx_r = __pyx_v_dtypes;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
 07350:     # Each level's dtype, read from the index's metadata rather than
 07351:     # from its materialized values.
+07352:     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, 7352, __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, 7352, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L5;
  }
+07353:         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, 7353, __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, 7353, __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;
 07354:     else:
+07355:         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, 7355, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7355, __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, 7355, __pyx_L1_error);
    __pyx_t_3 = 0;
    __pyx_v_level_dtypes = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
  }
  __pyx_L5:;
+07356:     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, 7356, __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, 7356, __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, 7356, __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, 7356, __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, 7356, __pyx_L8_error)
            #endif
            if (__pyx_t_5 >= __pyx_temp) break;
          }
          __pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(__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, 7356, __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, 7356, __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, 7356, __pyx_L8_error)
            PyErr_Clear();
          }
          break;
        }
      }
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_XDECREF_SET(__pyx_9genexpr20__pyx_v_label, __pyx_t_3);
      __pyx_t_3 = 0;
      __pyx_t_3 = __pyx_f_7questdb_7_client__arrow_export_name(__pyx_9genexpr20__pyx_v_label); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7356, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_3);
      if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_t_1, __pyx_t_3))) __PYX_ERR(0, 7356, __pyx_L8_error)
      __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_9genexpr20__pyx_v_label); __pyx_9genexpr20__pyx_v_label = 0;
    goto __pyx_L12_exit_scope;
    __pyx_L8_error:;
    __Pyx_XDECREF(__pyx_9genexpr20__pyx_v_label); __pyx_9genexpr20__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;
+07357:     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, 7357, __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, 7357, __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, 7357, __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, 7357, __pyx_L1_error)
          #endif
          if (__pyx_t_7 >= __pyx_temp) break;
        }
        __pyx_t_1 = __Pyx_PyList_GET_ITEM_REF(__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, 7357, __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, 7357, __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, 7357, __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;
 07358:         # pyarrow compares the level's own name with the converted
 07359:         # names, as here.
+07360:         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, 7360, __pyx_L1_error)

    __pyx_t_2 = __pyx_t_8;

    __pyx_L16_bool_binop_done:;
    if (__pyx_t_2) {
/* … */
      goto __pyx_L15;
    }
+07361:             j = i
      __pyx_v_j = __pyx_v_i;
+07362:             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, 7362, __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__31;
        __pyx_t_10 = 16;
        #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
        __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9[1]);
        #endif
        __pyx_t_11 = 0;
        __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_9, 3, __pyx_t_10, __pyx_t_11);
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7362, __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, 7362, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

        if (!__pyx_t_2) break;
+07363:                 j += 1
        __pyx_v_j = (__pyx_v_j + 1);
      }
+07364:             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, 7364, __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__31;
      __pyx_t_10 = 16;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9[1]);
      #endif
      __pyx_t_11 = 0;
      __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_9, 3, __pyx_t_10, __pyx_t_11);
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7364, __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;
 07365:         else:
+07366:             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, 7366, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
      __pyx_t_1 = 0;
    }
    __pyx_L15:;
+07367:         taken.append(name)
    __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_taken, __pyx_v_name); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 7367, __pyx_L1_error)

+07368:         names.append(name)
    __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_names, __pyx_v_name); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 7368, __pyx_L1_error)

+07369:     return _PANDAS.concat([
  __pyx_t_1 = __pyx_v_7questdb_7_client__PANDAS;
  __Pyx_INCREF(__pyx_t_1);
/* … */
  __pyx_t_15 = PyList_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7369, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_INCREF(__pyx_v_dtypes);
  __Pyx_GIVEREF(__pyx_v_dtypes);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_15, 0, __pyx_v_dtypes) != (0)) __PYX_ERR(0, 7369, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_3);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_15, 1, __pyx_t_3) != (0)) __PYX_ERR(0, 7369, __pyx_L1_error);
  __pyx_t_3 = 0;
  __pyx_t_14 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_15};
    __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_concat, __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7369, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_4;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_4 = 0;
  goto __pyx_L0;
+07370:         dtypes, _PANDAS.Series(level_dtypes, index=names, dtype=object)])
  __pyx_t_13 = __pyx_v_7questdb_7_client__PANDAS;
  __Pyx_INCREF(__pyx_t_13);
  __pyx_t_14 = 0;
  {
    PyObject *__pyx_callargs[4] = {__pyx_t_13, __pyx_v_level_dtypes, __pyx_v_names, __pyx_builtin_object};
    #if CYTHON_VECTORCALL
    __pyx_t_15 = __pyx_mstate_global->__pyx_tuple[30];
    if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7370, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_15);
    #else
    {
      PyObject *__pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_index, __pyx_mstate_global->__pyx_n_u_dtype};
      __pyx_t_15 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 2);
      if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7370, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
    }
    #endif
    __pyx_t_3 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_Series, __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_15);
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7370, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
/* … */
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_index, __pyx_mstate_global->__pyx_n_u_dtype};
    __pyx_mstate_global->__pyx_tuple[30] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[30])) __PYX_ERR(0, 7370, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[30]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[30]);
 07371: 
 07372: 
+07373: 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;
}
 07374:     """The column name pyarrow's pandas conversion gives `label`.
 07375: 
 07376:     `str()` matches pyarrow for every label but a tuple with parts that
 07377:     are not strings. A tuple's name holds parentheses and quotes, which
 07378:     no QuestDB column name may, so such a frame is refused whatever name
 07379:     this returns."""
+07380:     if isinstance(label, str):
  __pyx_t_1 = PyUnicode_Check(__pyx_v_label); 
  if (__pyx_t_1) {
/* … */
  }
+07381:         return label
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_label);
        __pyx_r = __pyx_v_label;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+07382:     if isinstance(label, bytes):
  __pyx_t_1 = PyBytes_Check(__pyx_v_label); 
  if (__pyx_t_1) {
/* … */
  }
+07383:         return label.decode('utf-8')
    __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, 7383, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+07384:     return str(label)
  __pyx_t_2 = __Pyx_PyObject_Unicode(__pyx_v_label); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7384, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_2;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_2 = 0;
  goto __pyx_L0;
 07385: 
 07386: 
+07387: 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;
}
 07388:     """The first struct field name inside polars `dtype`, at any depth,
 07389:     that holds a NUL; None when there is none."""
 07390:     cdef object field
 07391:     cdef object found
+07392:     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, 7392, __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, 7392, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+07393:         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, 7393, __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, 7393, __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, 7393, __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, 7393, __pyx_L1_error)
            #endif
            if (__pyx_t_4 >= __pyx_temp) break;
          }
          __pyx_t_1 = __Pyx_PyList_GET_ITEM_REF(__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, 7393, __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, 7393, __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, 7393, __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;
+07394:             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, 7394, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_mstate_global->__pyx_kp_u__32, __pyx_t_1, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7394, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (__pyx_t_2) {
/* … */
      }
+07395:                 return 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, 7395, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        {
          PyObject *__pyx_temp;
          {
            __pyx_temp = __pyx_r;
            __pyx_r = __pyx_t_1;
          }
          __Pyx_XDECREF(__pyx_temp);
        }
        __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        goto __pyx_L0;
+07396:             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, 7396, __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, 7396, __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;
+07397:             if found is not None:
      __pyx_t_2 = (__pyx_v_found != Py_None);
      if (__pyx_t_2) {
/* … */
      }
+07398:                 return found
        {
          PyObject *__pyx_temp;
          {
            __pyx_temp = __pyx_r;
            __Pyx_INCREF(__pyx_v_found);
            __pyx_r = __pyx_v_found;
          }
          __Pyx_XDECREF(__pyx_temp);
        }
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        goto __pyx_L0;
+07399:     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, 7399, __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, 7399, __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:;
+07400:         return _polars_struct_field_with_nul(dtype.inner)
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_inner); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7400, __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, 7400, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_6;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_6 = 0;
    goto __pyx_L0;
+07401:     return None
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 07402: 
 07403: 
+07404: 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_27);
  __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;
}
 07405:     """The Arrow C Data Interface carries each name as a NUL-terminated
 07406:     string. pyarrow, and pandas through it, cut a name holding a NUL at
 07407:     the NUL on export, so its column would land under the shorter name.
 07408:     polars panics on such a name, struct field names included, and the
 07409:     process aborts, whether the name belongs to a DataFrame column or to
 07410:     a Series. The names are checked here, before the export: a column
 07411:     name is refused with the error `row()` raises for it, and a polars
 07412:     struct field name with a BadDataFrame error."""
+07413:     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, 7413, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_names = __pyx_t_1;
  __pyx_t_1 = 0;
 07414:     cdef object name
 07415:     cdef object dtype
 07416:     cdef object dtypes
 07417:     cdef object field
 07418:     cdef Py_ssize_t i
 07419:     cdef qdb_pystr_buf* b
 07420:     cdef line_sender_column_name c_name
+07421:     if names is None:
  __pyx_t_2 = (__pyx_v_names == Py_None);
  if (__pyx_t_2) {
/* … */
  }
+07422:         return 0
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+07423:     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, 7423, __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, 7423, __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, 7423, __pyx_L1_error)
          #endif
          if (__pyx_t_3 >= __pyx_temp) break;
        }
        __pyx_t_5 = __Pyx_PyList_GET_ITEM_REF(__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, 7423, __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, 7423, __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, 7423, __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;
+07424:         if isinstance(name, bytes):
    __pyx_t_2 = PyBytes_Check(__pyx_v_name); 
    if (__pyx_t_2) {
/* … */
    }
 07425:             # pyarrow writes a bytes label decoded as UTF-8.
+07426:             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, 7426, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_mstate_global->__pyx_tuple[5], NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7426, __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;
+07427:         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__32, __pyx_v_name, Py_EQ)); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 7427, __pyx_L1_error)

    __pyx_t_2 = __pyx_t_7;

    __pyx_L8_bool_binop_done:;
    if (__pyx_t_2) {
/* … */
    }
+07428:             b = qdb_pystr_buf_new()
      __pyx_v_b = qdb_pystr_buf_new();
+07429:             try:
      /*try:*/ {
 07430:                 # Raises: a column name can't contain '\0'.
+07431:                 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, 7431, __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, 7431, __pyx_L13_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

      }
 07432:             finally:
+07433:                 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:;
      }
+07434:     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) {
/* … */
  }
+07435:             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:;
 07436:         # `dtypes` is cheap to read, and `is_nested()` leaves the walk
 07437:         # to the rare nested column. `names` is in the same order:
 07438:         # `frame.columns` for a DataFrame, the Series' own name for a
 07439:         # Series.
+07440:         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, 7440, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_2) {
/* … */
      goto __pyx_L25;
    }
+07441:             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, 7441, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_v_dtypes = __pyx_t_1;
      __pyx_t_1 = 0;
 07442:         else:
+07443:             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, 7443, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = PyList_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7443, __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, 7443, __pyx_L1_error);
      __pyx_t_1 = 0;
      __pyx_v_dtypes = __pyx_t_6;
      __pyx_t_6 = 0;
    }
    __pyx_L25:;
+07444:         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, 7444, __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, 7444, __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, 7444, __pyx_L1_error)
            #endif
            if (__pyx_t_19 >= __pyx_temp) break;
          }
          __pyx_t_1 = __Pyx_PyList_GET_ITEM_REF(__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, 7444, __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, 7444, __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, 7444, __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;
+07445:             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, 7445, __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, 7445, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_7 = (!__pyx_t_2);


      if (__pyx_t_7) {
/* … */
      }
+07446:                 continue
        goto __pyx_L26_continue;
+07447:             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, 7447, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_field, __pyx_t_1);
      __pyx_t_1 = 0;
+07448:             if field is not None:
      __pyx_t_7 = (__pyx_v_field != Py_None);
      if (unlikely(__pyx_t_7)) {
/* … */
      }
+07449:                 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, 7449, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_21);
+07450:                     QuestDBErrorCode.BadDataFrame,
        __Pyx_GetModuleGlobalName(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 7450, __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, 7450, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_23);
        __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
+07451:                     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, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 7451, __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, 7451, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_24);
        __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
/* … */
        __pyx_t_26 = 92;
        #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
        __pyx_t_26 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_25[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_25[3]);
        #endif
        __pyx_t_10 = 0;
        #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
        __pyx_t_10 |= __Pyx_PyUnicode_KIND_04(__pyx_t_25[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_25[3]);
        #endif
        __pyx_t_27 = __Pyx_PyUnicode_Join(__pyx_t_25, 5, __pyx_t_26, __pyx_t_10);
        if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 7451, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_27);
        __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_27};
          __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_27); __pyx_t_27 = 0;
          __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7449, __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, 7449, __pyx_L1_error)
+07452:                     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, 7452, __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;
 07453:                     f'polars cannot export.')
+07454:     return 0
  {

    __pyx_r = 0;
  }
  goto __pyx_L0;
 07455: 
 07456: 
 07457: 
 07458: 
+07459: 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;
}
 07460:         qwp_direct_sender* conn,
 07461:         object stream_owner,
 07462:         line_sender_table_name c_table_name,
 07463:         line_sender_column_name* c_ts_column_ptr,
 07464:         bint at_scalar_set,
 07465:         int64_t at_scalar_nanos,
 07466:         ArrowSchema* c_schema,
 07467:         const qwp_arrow_override* c_overrides,
 07468:         size_t c_overrides_len,
 07469:         bint* any_flushed,
 07470:         size_t* deferred_since_sync,
 07471:         bint* may_have_committed_prefix,
 07472:         object binary_names,
 07473:         object unlabelled) except -1:
 07474:     # `c_schema` is in/out and owned by the caller: zero-init on first
 07475:     # call (this function populates it via get_schema), reused as-is on
 07476:     # subsequent calls (Arrow C Data Interface guarantees slices of the
 07477:     # same source share schema), and released by the caller.
+07478:     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, 7478, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_stream_capsule = __pyx_t_1;
  __pyx_t_1 = 0;
+07479:     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)) {
/* … */
  }
+07480:         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, 7480, __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, 7480, __pyx_L1_error)
 07481:             '__arrow_c_stream__ did not return a valid arrow_array_stream '
 07482:             'PyCapsule.')
+07483:     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, 7483, __pyx_L1_error)
  __pyx_v_stream = ((struct ArrowArrayStream *)__pyx_t_5);

 07484:         stream_capsule, b'arrow_array_stream')
 07485:     cdef ArrowArray batch
 07486:     cdef int rc
 07487:     cdef const char* stream_err
 07488: 
+07489:     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)) {
/* … */
  }
+07490:             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:;
+07491:         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, 7491, __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, 7491, __pyx_L1_error)
 07492:             '__arrow_c_stream__ returned a malformed arrow_array_stream '
 07493:             'PyCapsule with NULL callbacks.')
 07494: 
+07495:     if c_schema.release == NULL:
  __pyx_t_4 = (__pyx_v_c_schema->release == NULL);

  if (__pyx_t_4) {
/* … */
  }
+07496:         rc = stream.get_schema(stream, c_schema)
    __pyx_v_rc = __pyx_v_stream->get_schema(__pyx_v_stream, __pyx_v_c_schema);
+07497:         if rc != 0:
    __pyx_t_4 = (__pyx_v_rc != 0);

    if (unlikely(__pyx_t_4)) {
/* … */
    }
+07498:             stream_err = stream.get_last_error(stream)
      __pyx_v_stream_err = __pyx_v_stream->get_last_error(__pyx_v_stream);
+07499:             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, 7499, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
+07500:                 QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7500, __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, 7500, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+07501:                 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, 7501, __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, 7499, __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, 7499, __pyx_L1_error)
+07502:                 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, 7502, __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[3] = {__pyx_t_11, __pyx_mstate_global->__pyx_kp_u_utf_8, __pyx_mstate_global->__pyx_n_u_replace};
          #if CYTHON_VECTORCALL
          __pyx_t_13 = __pyx_mstate_global->__pyx_tuple[31];
          if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7502, __pyx_L1_error)
          __Pyx_INCREF(__pyx_t_13);
          #else
          {
            PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_errors};
            __pyx_t_13 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
            if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7502, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_13);
          }
          #endif
          __pyx_t_10 = __Pyx_Object_VectorcallMethodKwds((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, 7502, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
        }
        if (!(likely(PyUnicode_CheckExact(__pyx_t_10))||((__pyx_t_10) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_10))) __PYX_ERR(0, 7502, __pyx_L1_error)
        __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, 7502, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
  {
    PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_errors};
    __pyx_mstate_global->__pyx_tuple[31] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[31])) __PYX_ERR(0, 7502, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[31]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[31]);
 07503:         # Before the first batch is read: every Arrow source reaches the
 07504:         # client through this one schema, so a polars `Object` column is
 07505:         # caught here however it was exported. The caller releases
 07506:         # `c_schema`.
+07507:         _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, 7507, __pyx_L1_error)

 07508:         # Once per call, since `c_schema` is fetched once and reused for
 07509:         # every slice. It only collects the unlabelled columns: the
 07510:         # caller reports them once the write is done
 07511:         # (`_log_unlabelled_fsb_columns`).
+07512:         _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, 7512, __pyx_L1_error)

 07513:             c_schema, c_overrides, c_overrides_len,
 07514:             binary_names, unlabelled)
 07515:         # Field metadata goes on to the native client unchanged, by
 07516:         # design. A `questdb.column_type` claim the field's Arrow type
 07517:         # cannot carry -- 'short' on int32, 'ipv4' on int64 -- makes the
 07518:         # native Arrow ingest refuse the write with ArrowIngest before
 07519:         # anything is sent. That refusal is the intended contract for
 07520:         # this route, and the client neither strips such a claim nor
 07521:         # turns the refusal into a log record.
 07522:         #
 07523:         # A `df.attrs['questdb']` claim that no longer fits is logged and
 07524:         # dropped instead (`_log_roundtrip_claim_dropped`), and the two
 07525:         # routes differ on purpose. Field metadata is the input contract
 07526:         # of the native Arrow ingest, which refuses such a field for
 07527:         # every language that uses it (c-questdb-client #186). A field
 07528:         # claim also goes stale only when the caller carries the old
 07529:         # field onto a new type -- `field.with_type(...)`, or a
 07530:         # permissive `pa.concat_tables` with the claimed table first --
 07531:         # whereas `df.attrs` belongs to the whole frame and survives
 07532:         # `astype` and arithmetic, so a stale claim there is the normal
 07533:         # case.
 07534:         #
 07535:         # `test_stale_arrow_field_claim_is_refused` pins this. Changing
 07536:         # it changes the public contract (`QuestDB.dataframe`,
 07537:         # docs/sender.rst, CHANGELOG); it is not a local fix.
 07538: 
+07539:     while True:
  while (1) {
+07540:         memset(&batch, 0, sizeof(ArrowArray))
    (void)(memset((&__pyx_v_batch), 0, (sizeof(struct ArrowArray))));
+07541:         rc = stream.get_next(stream, &batch)
    __pyx_v_rc = __pyx_v_stream->get_next(__pyx_v_stream, (&__pyx_v_batch));
+07542:         if rc != 0:
    __pyx_t_4 = (__pyx_v_rc != 0);

    if (unlikely(__pyx_t_4)) {
/* … */
    }
+07543:             stream_err = stream.get_last_error(stream)
      __pyx_v_stream_err = __pyx_v_stream->get_last_error(__pyx_v_stream);
+07544:             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, 7544, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
+07545:                 QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7545, __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, 7545, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+07546:                 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, 7546, __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, 7544, __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, 7544, __pyx_L1_error)
+07547:                 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, 7547, __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[3] = {__pyx_t_12, __pyx_mstate_global->__pyx_kp_u_utf_8, __pyx_mstate_global->__pyx_n_u_replace};
          #if CYTHON_VECTORCALL
          __pyx_t_11 = __pyx_mstate_global->__pyx_tuple[31];
          if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7547, __pyx_L1_error)
          __Pyx_INCREF(__pyx_t_11);
          #else
          {
            PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_errors};
            __pyx_t_11 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
            if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7547, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_11);
          }
          #endif
          __pyx_t_10 = __Pyx_Object_VectorcallMethodKwds((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, 7547, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
        }
        if (!(likely(PyUnicode_CheckExact(__pyx_t_10))||((__pyx_t_10) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_10))) __PYX_ERR(0, 7547, __pyx_L1_error)
        __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, 7547, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+07548:         if batch.release == NULL:
    __pyx_t_4 = (__pyx_v_batch.release == NULL);

    if (__pyx_t_4) {
/* … */
    }
+07549:             break
      goto __pyx_L12_break;
+07550:         try:
    /*try:*/ {
+07551:             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) {
/* … */
      }
+07552:                 _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, 7552, __pyx_L18_error)

+07553:                 may_have_committed_prefix[0] = True
        (__pyx_v_may_have_committed_prefix[0]) = 1;
+07554:                 deferred_since_sync[0] = 0
        (__pyx_v_deferred_since_sync[0]) = 0;
+07555:             _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, 7555, __pyx_L18_error)

 07556:                 conn, c_table_name, &batch, c_schema, c_ts_column_ptr,
 07557:                 at_scalar_set, at_scalar_nanos,
 07558:                 c_overrides, c_overrides_len,
 07559:                 True, may_have_committed_prefix,
 07560:                 deferred_since_sync)
+07561:             any_flushed[0] = True
      (__pyx_v_any_flushed[0]) = 1;
+07562:             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);
    }
 07563:         finally:
+07564:             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:;
+07565:                 batch.release(&batch)
          __pyx_v_batch.release((&__pyx_v_batch));
/* … */
            __pyx_v_batch.release((&__pyx_v_batch));
 07566: 
 07567: 
 07568: # `schema_overrides` kind `'binary'`. The native Arrow ingest has no such
 07569: # override: an unlabelled fixed-size binary column already lands as
 07570: # BINARY. The kind is a label for this client alone -- it keeps a pandas
 07571: # frame's 16- or 32-byte column from being refused, and a native one from
 07572: # being warned about -- so the capsule path takes it out of the list
 07573: # before building the native overrides array, and checks what the
 07574: # native side would otherwise have checked (`_check_fsb_columns`).
+07575: cdef int _SCHEMA_OVERRIDE_BINARY = -1
  __pyx_v_7questdb_7_client__SCHEMA_OVERRIDE_BINARY = -1;
 07576: 
 07577: 
+07578: 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;
}
 07579:     """Convert the public schema_overrides dict into a list of
 07580:     (name_bytes, kind_int, arg_int) tuples. Returns None if empty.
 07581: 
 07582:     Keeping `name_bytes` alive on the Python side lets the C overrides
 07583:     array borrow the underlying char* without an extra copy. A
 07584:     `'binary'` entry carries `_SCHEMA_OVERRIDE_BINARY`, which is not a
 07585:     native kind.
 07586:     """
+07587:     if not schema_overrides:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_schema_overrides); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 7587, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);


  if (__pyx_t_2) {
/* … */
  }
+07588:         return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+07589:     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)) {
/* … */
  }
+07590:         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, 7590, __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, 7590, __pyx_L1_error)
 07591:             'schema_overrides must be a dict mapping column name to '
 07592:             "one of: 'symbol', 'ipv4', 'char', 'uuid', 'long256', "
 07593:             "'binary', or ('geohash', bits).")
+07594:     cdef list out = []
  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7594, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_out = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
 07595:     cdef object name, override, kind, value, bits
 07596:     cdef int kind_int
 07597:     cdef int arg_int
+07598:     for name, override in schema_overrides.items():
  __pyx_t_6 = 0;
  if (unlikely(__pyx_v_schema_overrides == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
    __PYX_ERR(0, 7598, __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, 7598, __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, 7598, __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;
+07599:         if not isinstance(name, str):
    __pyx_t_1 = PyUnicode_Check(__pyx_v_name); 
    __pyx_t_2 = (!__pyx_t_1);


    if (unlikely(__pyx_t_2)) {
/* … */
    }
+07600:             raise TypeError(
      __pyx_t_4 = NULL;
+07601:                 f'schema_overrides key must be str, got '
      __pyx_t_14 = 39;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13[1]);
      #endif
      __pyx_t_10 = 0;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_10 |= __Pyx_PyUnicode_KIND_04(__pyx_t_13[1]);
      #endif
      __pyx_t_11 = __Pyx_PyUnicode_Join(__pyx_t_13, 3, __pyx_t_14, __pyx_t_10);
      if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7601, __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, 7600, __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, 7600, __pyx_L1_error)
+07602:                 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, 7602, __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, 7602, __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__3;
+07603:         if isinstance(override, str):
    __pyx_t_2 = PyUnicode_Check(__pyx_v_override); 
    if (__pyx_t_2) {
/* … */
      goto __pyx_L8;
    }
+07604:             kind = override
      __Pyx_INCREF(__pyx_v_override);
      __Pyx_XDECREF_SET(__pyx_v_kind, __pyx_v_override);
+07605:             value = None
      __Pyx_INCREF(Py_None);
      __Pyx_XDECREF_SET(__pyx_v_value, Py_None);
+07606:         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, 7606, __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;
    }
+07607:             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, 7607, __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_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7607, __pyx_L1_error)
          __Pyx_XGOTREF(__pyx_t_9);
          __pyx_t_11 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
          if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7607, __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, 7607, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_11 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7607, __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, 7607, __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, 7607, __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, 7607, __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;
 07608:         else:
+07609:             raise TypeError(
    /*else*/ {
      __pyx_t_9 = NULL;
+07610:                 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, 7610, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
/* … */
      __pyx_t_14 = 75;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16[3]);
      #endif
      __pyx_t_10 = 0;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_10 |= __Pyx_PyUnicode_KIND_04(__pyx_t_16[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_16[3]);
      #endif
      __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_16, 5, __pyx_t_14, __pyx_t_10);
      if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 7610, __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, 7609, __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, 7609, __pyx_L1_error)
    }
    __pyx_L8:;
+07611:                 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, 7611, __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;
+07612:         arg_int = 0
    __pyx_v_arg_int = 0;
+07613:         if kind == 'symbol':
    __pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_symbol, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7613, __pyx_L1_error)
    if (__pyx_t_2) {
/* … */
      goto __pyx_L13;
    }
+07614:             kind_int = <int>qwp_arrow_override_symbol
      __pyx_v_kind_int = ((int)qwp_arrow_override_symbol);
+07615:         elif kind == 'ipv4':
    __pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_ipv4, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7615, __pyx_L1_error)
    if (__pyx_t_2) {
/* … */
      goto __pyx_L13;
    }
+07616:             kind_int = <int>qwp_arrow_override_ipv4
      __pyx_v_kind_int = ((int)qwp_arrow_override_ipv4);
+07617:         elif kind == 'char':
    __pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_char_2, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7617, __pyx_L1_error)
    if (__pyx_t_2) {
/* … */
      goto __pyx_L13;
    }
+07618:             kind_int = <int>qwp_arrow_override_char
      __pyx_v_kind_int = ((int)qwp_arrow_override_char);
+07619:         elif kind == 'uuid':
    __pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_uuid, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7619, __pyx_L1_error)
    if (__pyx_t_2) {
/* … */
      goto __pyx_L13;
    }
+07620:             kind_int = <int>qwp_arrow_override_uuid
      __pyx_v_kind_int = ((int)qwp_arrow_override_uuid);
+07621:         elif kind == 'long256':
    __pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_long256, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7621, __pyx_L1_error)
    if (__pyx_t_2) {
/* … */
      goto __pyx_L13;
    }
+07622:             kind_int = <int>qwp_arrow_override_long256
      __pyx_v_kind_int = ((int)qwp_arrow_override_long256);
+07623:         elif kind == 'binary':
    __pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_binary, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7623, __pyx_L1_error)
    if (__pyx_t_2) {
/* … */
      goto __pyx_L13;
    }
+07624:             kind_int = _SCHEMA_OVERRIDE_BINARY
      __pyx_v_kind_int = __pyx_v_7questdb_7_client__SCHEMA_OVERRIDE_BINARY;
+07625:         elif kind == 'geohash':
    __pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_geohash_2, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7625, __pyx_L1_error)
    if (likely(__pyx_t_2)) {
/* … */
      goto __pyx_L13;
    }
 07626:             # Held to the range as a Python object, so a number too
 07627:             # wide for the C field is refused rather than overflowing
 07628:             # on the way into it.
+07629:             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, 7629, __pyx_L1_error)
      if (__pyx_t_2) {
        __pyx_t_17 = __Pyx_PyNumber_Int(__pyx_v_value); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 7629, __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;
+07630:             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_1 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_bits, __pyx_mstate_global->__pyx_int_1, Py_LT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 7630, __pyx_L1_error)
      if (!__pyx_t_1) {

      } else {

        __pyx_t_2 = __pyx_t_1;

        goto __pyx_L15_bool_binop_done;
      }
      __pyx_t_1 = __Pyx_PyObject_CompareBoolGt_object_int(__pyx_v_bits, __pyx_mstate_global->__pyx_int_60, Py_GT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 7630, __pyx_L1_error)

      __pyx_t_2 = __pyx_t_1;

      __pyx_L15_bool_binop_done:;
      if (unlikely(__pyx_t_2)) {
/* … */
      }
+07631:                 raise ValueError(
        __pyx_t_17 = NULL;
+07632:                     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, 7632, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
/* … */
        __pyx_t_14 = 71;
        #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
        __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16[3]);
        #endif
        __pyx_t_10 = 0;
        #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
        __pyx_t_10 |= __Pyx_PyUnicode_KIND_04(__pyx_t_16[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_16[3]);
        #endif
        __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_16, 5, __pyx_t_14, __pyx_t_10);
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7632, __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, 7631, __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, 7631, __pyx_L1_error)
+07633:                     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, 7633, __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__3;
+07634:             kind_int = <int>qwp_arrow_override_geohash
      __pyx_v_kind_int = ((int)qwp_arrow_override_geohash);
+07635:             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, 7635, __pyx_L1_error)
      __pyx_v_arg_int = __pyx_t_10;
 07636:         else:
+07637:             raise ValueError(
    /*else*/ {
      __pyx_t_4 = NULL;
+07638:                 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, 7638, __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, 7638, __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_14 = 99;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16[3]);
      #endif
      __pyx_t_10 = 0;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_10 |= __Pyx_PyUnicode_KIND_04(__pyx_t_16[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_16[3]);
      #endif
      __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_16, 5, __pyx_t_14, __pyx_t_10);
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7638, __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, 7637, __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, 7637, __pyx_L1_error)
    }
    __pyx_L13:;
 07639:                 "in {'symbol', 'ipv4', 'char', 'uuid', 'long256', "
 07640:                 "'binary', 'geohash'}.")
+07641:         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, 7641, __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, 7641, __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, 7641, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7641, __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, 7641, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_9);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_9) != (0)) __PYX_ERR(0, 7641, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_4);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_t_4) != (0)) __PYX_ERR(0, 7641, __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, 7641, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;

  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07642:     return out
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_v_out);
      __pyx_r = __pyx_v_out;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 07643: 
 07644: 
+07645: 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;
}
 07646:     """Return list of str column names from polars / pyarrow input,
 07647:     or None if the input doesn't expose a uniform name list."""
 07648:     cdef object names
+07649:     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, 7649, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_names = __pyx_t_1;
  __pyx_t_1 = 0;
+07650:     if names is not None:
  __pyx_t_2 = (__pyx_v_names != Py_None);
  if (__pyx_t_2) {
/* … */
  }
+07651:         return list(names)
    __pyx_t_1 = PySequence_List(__pyx_v_names); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7651, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_1;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L0;
+07652:     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, 7652, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_names, __pyx_t_1);
  __pyx_t_1 = 0;
+07653:     if names is not None:
  __pyx_t_2 = (__pyx_v_names != Py_None);
  if (__pyx_t_2) {
/* … */
  }
+07654:         return list(names)
    __pyx_t_1 = PySequence_List(__pyx_v_names); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7654, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_1;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L0;
+07655:     return None
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 07656: 
 07657: 
+07658: 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_10);
  __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;
}
 07659:     """Resolve an integer `at` column index (negative allowed) to its name,
 07660:     mirroring the numpy path's `_bind_col_index`."""
+07661:     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, 7661, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_names = __pyx_t_1;
  __pyx_t_1 = 0;
+07662:     cdef int orig = idx
  __pyx_v_orig = __pyx_v_idx;
 07663:     cdef int n
+07664:     if names is None:
  __pyx_t_2 = (__pyx_v_names == Py_None);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+07665:         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, 7665, __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, 7665, __pyx_L1_error)
 07666:             'Cannot resolve an integer `at` index for this Arrow-native '
 07667:             'input; pass the designated timestamp column name as a str.')
+07668:     n = <int>len(names)
  __pyx_t_5 = PyObject_Length(__pyx_v_names); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 7668, __pyx_L1_error)
  __pyx_v_n = ((int)__pyx_t_5);

+07669:     if idx < 0:
  __pyx_t_2 = (__pyx_v_idx < 0);

  if (__pyx_t_2) {
/* … */
  }
+07670:         idx += n
    __pyx_v_idx = (__pyx_v_idx + __pyx_v_n);
+07671:     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)) {
/* … */
  }
+07672:         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, 7672, __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_5 = 38;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8[1]);
    #endif
    __pyx_t_9 = 0;
    __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, __pyx_t_5, __pyx_t_9);
    if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 7672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_10};
      __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_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7672, __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, 7672, __pyx_L1_error)
+07673:     return names[idx]
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_names, __pyx_v_idx, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7673, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 07674: 
 07675: 
+07676: 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;
}
 07677:     """polars: Utf8 / String / Categorical / Enum count as string-like."""
+07678:     if _POLARS is None:
  __pyx_t_1 = (__pyx_v_7questdb_7_client__POLARS == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+07679:         return False
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+07680:     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, 7680, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_v_dtype, __pyx_t_2, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 7680, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_1) {
/* … */
  }
+07681:         return True
    {

      __pyx_r = 1;
    }
    goto __pyx_L0;
+07682:     if isinstance(dtype, _POLARS.Categorical):
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_Categorical); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_2); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 7682, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_1) {
/* … */
  }
+07683:         return True
    {

      __pyx_r = 1;
    }
    goto __pyx_L0;
+07684:     cdef object enum_t = getattr(_POLARS, 'Enum', None)
  __pyx_t_2 = __pyx_v_7questdb_7_client__POLARS;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_GetAttr3(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_Enum, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7684, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_enum_t = __pyx_t_3;
  __pyx_t_3 = 0;
+07685:     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, 7685, __pyx_L1_error)

  __pyx_t_1 = __pyx_t_4;

  __pyx_L7_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+07686:         return True
    {

      __pyx_r = 1;
    }
    goto __pyx_L0;
+07687:     return False
  {

    __pyx_r = 0;
  }
  goto __pyx_L0;
 07688: 
 07689: 
+07690: 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;
}
+07691:     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, 7691, __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;
+07692:         _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, 7692, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
+07693:     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, 7693, __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, 7693, __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, 7693, __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;
  }
+07694:             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, 7694, __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, 7694, __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, 7694, __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;
  }
+07695:             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, 7695, __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, 7695, __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;
 07696: 
 07697: 
+07698: 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;
}
 07699:     """pyarrow: utf8 / large_utf8 / utf8_view, plus Dictionary whose
 07700:     value type is one of those."""
+07701:     if _PYARROW is None:
  __pyx_t_1 = (__pyx_v_7questdb_7_client__PYARROW == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+07702:         return False
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+07703:     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, 7703, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+07704:         return True
    {

      __pyx_r = 1;
    }
    goto __pyx_L0;
+07705:     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, 7705, __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, 7705, __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, 7705, __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;
  }
+07706:             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, 7706, __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, 7706, __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;
 07707: 
 07708: 
+07709: 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;
}
 07710:     """Arrow schema of a pyarrow Table / RecordBatch when resolving
 07711:     `symbols` needs one, else None. Pandas input takes its schema from its
 07712:     first exported batch instead."""
+07713:     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_PyObject_CompareBoolEq_object_str(__pyx_v_symbols, __pyx_mstate_global->__pyx_n_u_auto, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7713, __pyx_L1_error)
  if (!__pyx_t_2) {

  } else {

    __pyx_t_1 = __pyx_t_2;

    goto __pyx_L4_bool_binop_done;
  }
/* … */
  if (__pyx_t_1) {
/* … */
  }
+07714:             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, 7714, __pyx_L1_error)

  __pyx_t_1 = __pyx_t_2;

  __pyx_L4_bool_binop_done:;
+07715:         return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+07716:     if _PYARROW is None:
  __pyx_t_1 = (__pyx_v_7questdb_7_client__PYARROW == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+07717:         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:;
    }
+07718:             _dataframe_require_pyarrow()
        __pyx_t_6 = __pyx_f_7questdb_7_client__dataframe_require_pyarrow(); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7718, __pyx_L8_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+07719:         except ImportError:
      __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_ImportError))));
      if (__pyx_t_7) {
        __Pyx_ErrRestore(0,0,0);
+07720:             return None
        {
          PyObject *__pyx_temp;
          {
            __pyx_temp = __pyx_r;
            __pyx_r = Py_None; __Pyx_INCREF(Py_None);
          }
          __Pyx_XDECREF(__pyx_temp);
        }
        goto __pyx_L11_except_return;
      }
      goto __pyx_L10_except_error;
+07721:     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, 7721, __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, 7721, __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) {
/* … */
  }
+07722:         return sliceable.schema
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7722, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_6;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_6 = 0;
    goto __pyx_L0;
+07723:     return None
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 07724: 
 07725: 
+07726: 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;
}
 07727:         object sliceable, object schema):
 07728:     """Return names of all string-like columns (utf8 / large_utf8 /
 07729:     dict-of-utf8). Returns None if schema introspection is not
 07730:     available on the input."""
 07731:     cdef object out
 07732:     cdef object name
 07733:     cdef object dtype
 07734:     cdef object field
+07735:     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, 7735, __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) {
/* … */
  }
+07736:         out = []
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7736, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_out = __pyx_t_3;
    __pyx_t_3 = 0;
+07737:         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, 7737, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (unlikely(__pyx_t_7 == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
      __PYX_ERR(0, 7737, __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, 7737, __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, 7737, __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;
+07738:             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, 7738, __pyx_L1_error)
      if (__pyx_t_1) {
/* … */
      }
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07739:                 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, 7739, __pyx_L1_error)

+07740:         return out
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_out);
        __pyx_r = __pyx_v_out;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+07741:     if schema is None:
  __pyx_t_1 = (__pyx_v_schema == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+07742:         return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+07743:     out = []
  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7743, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_out = __pyx_t_3;
  __pyx_t_3 = 0;
+07744:     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, 7744, __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, 7744, __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, 7744, __pyx_L1_error)
          #endif
          if (__pyx_t_5 >= __pyx_temp) break;
        }
        __pyx_t_7 = __Pyx_PyList_GET_ITEM_REF(__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, 7744, __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, 7744, __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, 7744, __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;
+07745:         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, 7745, __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, 7745, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (__pyx_t_1) {
/* … */
    }
+07746:             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, 7746, __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, 7746, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

+07747:     return out
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_v_out);
      __pyx_r = __pyx_v_out;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 07748: 
 07749: 
+07750: 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_15);
  __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;
}
 07751:         object sliceable, object schema, str name):
 07752:     """Returns True iff `name` is a string-like column on `sliceable`,
 07753:     False iff it is some other type, or None if schema introspection
 07754:     is not available on the input."""
 07755:     cdef object dtype
 07756:     cdef object field_type
+07757:     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, 7757, __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) {
/* … */
  }
+07758:         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:;
    }
+07759:             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, 7759, __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, 7759, __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;
+07760:         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, 7760, __pyx_L8_except_error)
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_3);
        __Pyx_XGOTREF(__pyx_t_9);
+07761:             raise KeyError(
        __pyx_t_11 = NULL;
+07762:                 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, 7762, __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 = 43;
        #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
        __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13[1]);
        #endif
        __pyx_t_8 = 0;
        #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
        __pyx_t_8 |= __Pyx_PyUnicode_KIND_04(__pyx_t_13[1]);
        #endif
        __pyx_t_15 = __Pyx_PyUnicode_Join(__pyx_t_13, 3, __pyx_t_14, __pyx_t_8);
        if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7762, __pyx_L8_except_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __pyx_t_16 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_15};
          __pyx_t_10 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_KeyError)), __pyx_callargs+__pyx_t_16, (2-__pyx_t_16) | (__pyx_t_16*__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_10)) __PYX_ERR(0, 7761, __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, 7761, __pyx_L8_except_error)
      }
      goto __pyx_L8_except_error;
+07763:         return _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, 7763, __pyx_L1_error)
    __pyx_t_9 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7763, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);

    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_9;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_9 = 0;
    goto __pyx_L0;
+07764:     if schema is None:
  __pyx_t_1 = (__pyx_v_schema == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+07765:         return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+07766:     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_15); __pyx_t_15 = 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:;
  }
+07767:         field_type = schema.field(name).type
      __pyx_t_3 = __pyx_v_schema;
      __Pyx_INCREF(__pyx_t_3);
      __pyx_t_16 = 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_16, (2-__pyx_t_16) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7767, __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, 7767, __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;
+07768:     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, 7768, __pyx_L17_except_error)
      __Pyx_XGOTREF(__pyx_t_3);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_7);
+07769:         raise KeyError(
      __pyx_t_15 = NULL;
+07770:             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, 7770, __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_14 = 43;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13[1]);
      #endif
      __pyx_t_8 = 0;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_8 |= __Pyx_PyUnicode_KIND_04(__pyx_t_13[1]);
      #endif
      __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_13, 3, __pyx_t_14, __pyx_t_8);
      if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7770, __pyx_L17_except_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_16 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_t_12};
        __pyx_t_10 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_KeyError)), __pyx_callargs+__pyx_t_16, (2-__pyx_t_16) | (__pyx_t_16*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 7769, __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, 7769, __pyx_L17_except_error)
    }
    goto __pyx_L17_except_error;
+07771:     return _capsule_pyarrow_type_is_string_like(field_type)
  __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, 7771, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7771, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);

  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_7;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_7 = 0;
  goto __pyx_L0;
 07772: 
 07773: 
+07774: 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;
}
 07775:         object sliceable, object schema):
 07776:     """Return names of dict-encoded string-like columns (polars
 07777:     Categorical / Enum or pyarrow Dictionary(*, utf8/large_utf8/utf8_view)).
 07778:     Returns None if schema introspection is not available."""
 07779:     cdef object out
 07780:     cdef object name
 07781:     cdef object dtype
 07782:     cdef object field
 07783:     cdef object enum_t
+07784:     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, 7784, __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) {
/* … */
  }
+07785:         out = []
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7785, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_out = __pyx_t_3;
    __pyx_t_3 = 0;
+07786:         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, 7786, __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;
+07787:         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, 7787, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (unlikely(__pyx_t_3 == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
      __PYX_ERR(0, 7787, __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, 7787, __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, 7787, __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;
+07788:             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, 7788, __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, 7788, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (__pyx_t_1) {
/* … */
        goto __pyx_L8;
      }
+07789:                 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, 7789, __pyx_L1_error)

+07790:             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, 7790, __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;
+07791:                 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, 7791, __pyx_L1_error)

+07792:         return out
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_out);
        __pyx_r = __pyx_v_out;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+07793:     if schema is None:
  __pyx_t_1 = (__pyx_v_schema == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+07794:         return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+07795:     out = []
  __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7795, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_out = __pyx_t_4;
  __pyx_t_4 = 0;
+07796:     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, 7796, __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, 7796, __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, 7796, __pyx_L1_error)
          #endif
          if (__pyx_t_6 >= __pyx_temp) break;
        }
        __pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(__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, 7796, __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, 7796, __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, 7796, __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;
+07797:         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, 7797, __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, 7797, __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, 7797, __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, 7797, __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) {
/* … */
    }
+07798:                 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, 7798, __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, 7798, __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, 7798, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;

    __pyx_t_1 = __pyx_t_2;

    __pyx_L15_bool_binop_done:;
+07799:             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, 7799, __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, 7799, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;

+07800:     return out
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_v_out);
      __pyx_r = __pyx_v_out;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 07801: 
 07802: 
+07803: 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;
}
 07804:         object sliceable, object schema, object symbols):
 07805:     """Translate `symbols` into a list of
 07806:     (name_bytes, kind, arg) tuples matching the shape returned by
 07807:     _validate_schema_overrides. `kind` is `qwp_arrow_override_symbol`
 07808:     to mark a column as SYMBOL or `qwp_arrow_override_not_symbol`
 07809:     to force a dict-encoded column to VARCHAR; `arg` is unused (0) for both.
 07810:     Returns:
 07811: 
 07812:     - []   for None / 'auto' (no overrides, Rust default applies —
 07813:            Dictionary columns auto-classify as SymbolDict).
 07814:     - list for True (auto-detect str cols) / False (force NotSymbol
 07815:            on every dict-encoded str col) / List[str] / List[int].
 07816:     - None if resolution requires introspection not available on the
 07817:            input; caller falls back to Manual plan.
 07818: 
 07819:     Raises QuestDBError(BadDataFrame) when an explicitly-named symbols
 07820:     entry targets a non-string column (matches Manual plan semantics).
 07821:     """
 07822:     cdef list out
+07823:     cdef int symbol_kind = <int>qwp_arrow_override_symbol
  __pyx_v_symbol_kind = ((int)qwp_arrow_override_symbol);
+07824:     cdef int not_symbol_kind = <int>qwp_arrow_override_not_symbol
  __pyx_v_not_symbol_kind = ((int)qwp_arrow_override_not_symbol);
 07825:     cdef object col_names
 07826:     cdef object entry
 07827:     cdef object name
 07828:     cdef object is_str
 07829:     cdef int idx
 07830:     cdef set listed
 07831:     cdef object dict_names
 07832: 
+07833:     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_PyObject_CompareBoolEq_object_str(__pyx_v_symbols, __pyx_mstate_global->__pyx_n_u_auto, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7833, __pyx_L1_error)

  __pyx_t_1 = __pyx_t_2;

  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+07834:         return []
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7834, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_3;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_3 = 0;
    goto __pyx_L0;
 07835: 
+07836:     if symbols is False:
  __pyx_t_1 = (__pyx_v_symbols == Py_False);
  if (__pyx_t_1) {
/* … */
  }
+07837:         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, 7837, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_col_names = __pyx_t_3;
    __pyx_t_3 = 0;
+07838:         if col_names is None:
    __pyx_t_1 = (__pyx_v_col_names == Py_None);
    if (__pyx_t_1) {
/* … */
    }
+07839:             return None
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __pyx_r = Py_None; __Pyx_INCREF(Py_None);
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      goto __pyx_L0;
+07840:         out = []
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7840, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_out = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
+07841:         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, 7841, __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, 7841, __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, 7841, __pyx_L1_error)
            #endif
            if (__pyx_t_4 >= __pyx_temp) break;
          }
          __pyx_t_6 = __Pyx_PyList_GET_ITEM_REF(__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, 7841, __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, 7841, __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, 7841, __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;
+07842:             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, 7842, __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, 7842, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7842, __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, 7842, __pyx_L1_error);
      __Pyx_GIVEREF(__pyx_t_7);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_7) != (0)) __PYX_ERR(0, 7842, __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, 7842, __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, 7842, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

+07843:         return out
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_out);
        __pyx_r = __pyx_v_out;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
 07844: 
+07845:     if symbols is True:
  __pyx_t_1 = (__pyx_v_symbols == Py_True);
  if (__pyx_t_1) {
/* … */
  }
+07846:         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, 7846, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_col_names = __pyx_t_3;
    __pyx_t_3 = 0;
+07847:         if col_names is None:
    __pyx_t_1 = (__pyx_v_col_names == Py_None);
    if (__pyx_t_1) {
/* … */
    }
+07848:             return None
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __pyx_r = Py_None; __Pyx_INCREF(Py_None);
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      goto __pyx_L0;
+07849:         out = []
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7849, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_out = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
+07850:         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, 7850, __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, 7850, __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, 7850, __pyx_L1_error)
            #endif
            if (__pyx_t_4 >= __pyx_temp) break;
          }
          __pyx_t_9 = __Pyx_PyList_GET_ITEM_REF(__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, 7850, __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, 7850, __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, 7850, __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;
+07851:             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, 7851, __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, 7851, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7851, __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, 7851, __pyx_L1_error);
      __Pyx_GIVEREF(__pyx_t_7);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_7) != (0)) __PYX_ERR(0, 7851, __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, 7851, __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, 7851, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

+07852:         return out
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_out);
        __pyx_r = __pyx_v_out;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
 07853: 
+07854:     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) {
/* … */
  }
+07855:         return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
 07856: 
+07857:     out = []
  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7857, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_out = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+07858:     col_names = None
  __Pyx_INCREF(Py_None);
  __pyx_v_col_names = Py_None;
+07859:     listed = set()
  __pyx_t_3 = PySet_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7859, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_listed = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+07860:     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, 7860, __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, 7860, __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, 7860, __pyx_L1_error)
          #endif
          if (__pyx_t_4 >= __pyx_temp) break;
        }
        __pyx_t_6 = __Pyx_PyList_GET_ITEM_REF(__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, 7860, __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, 7860, __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, 7860, __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;
+07861:         if isinstance(entry, str):
    __pyx_t_2 = PyUnicode_Check(__pyx_v_entry); 
    if (__pyx_t_2) {
/* … */
      goto __pyx_L21;
    }
+07862:             name = entry
      __Pyx_INCREF(__pyx_v_entry);
      __Pyx_XDECREF_SET(__pyx_v_name, __pyx_v_entry);
+07863:         elif isinstance(entry, int):
    __pyx_t_2 = PyLong_Check(__pyx_v_entry); 
    if (likely(__pyx_t_2)) {
/* … */
      goto __pyx_L21;
    }
+07864:             if col_names is None:
      __pyx_t_2 = (__pyx_v_col_names == Py_None);
      if (__pyx_t_2) {
/* … */
      }
+07865:                 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, 7865, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF_SET(__pyx_v_col_names, __pyx_t_6);
        __pyx_t_6 = 0;
+07866:                 if col_names is None:
        __pyx_t_2 = (__pyx_v_col_names == Py_None);
        if (__pyx_t_2) {
/* … */
        }
+07867:                     return None
          {
            PyObject *__pyx_temp;
            {
              __pyx_temp = __pyx_r;
              __pyx_r = Py_None; __Pyx_INCREF(Py_None);
            }
            __Pyx_XDECREF(__pyx_temp);
          }
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          goto __pyx_L0;
+07868:             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, 7868, __pyx_L1_error)
      __pyx_v_idx = ((int)__pyx_t_11);

+07869:             if idx < 0:
      __pyx_t_2 = (__pyx_v_idx < 0);

      if (__pyx_t_2) {
/* … */
      }
+07870:                 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, 7870, __pyx_L1_error)
        __pyx_v_idx = (__pyx_v_idx + __pyx_t_12);

+07871:             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, 7871, __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)) {
/* … */
      }
+07872:                 raise ValueError(
        __pyx_t_7 = NULL;
+07873:                     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, 7873, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
/* … */
        __pyx_t_12 = 44;
        #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
        __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14[3]);
        #endif
        __pyx_t_11 = 0;
        #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
        __pyx_t_11 |= __Pyx_PyUnicode_KIND_04(__pyx_t_14[1]);
        #endif
        __pyx_t_15 = __Pyx_PyUnicode_Join(__pyx_t_14, 5, __pyx_t_12, __pyx_t_11);
        if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7873, __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, 7872, __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, 7872, __pyx_L1_error)
+07874:                     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, 7874, __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, 7874, __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;
+07875:             name = col_names[idx]
      __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_col_names, __pyx_v_idx, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7875, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_6);
      __pyx_t_6 = 0;
 07876:         else:
+07877:             raise TypeError(
    /*else*/ {
      __pyx_t_15 = NULL;
+07878:                 f'symbols entry must be str or int, got '
      __pyx_t_12 = 39;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16[1]);
      #endif
      __pyx_t_11 = 0;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_11 |= __Pyx_PyUnicode_KIND_04(__pyx_t_16[1]);
      #endif
      __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_16, 3, __pyx_t_12, __pyx_t_11);
      if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7878, __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, 7877, __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, 7877, __pyx_L1_error)
    }
    __pyx_L21:;
+07879:                 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, 7879, __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, 7879, __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__3;
+07880:         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, 7880, __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, 7880, __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;
+07881:         if is_str is None:
    __pyx_t_2 = (__pyx_v_is_str == Py_None);
    if (__pyx_t_2) {
/* … */
    }
+07882:             return None
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __pyx_r = Py_None; __Pyx_INCREF(Py_None);
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      goto __pyx_L0;
+07883:         if not is_str:
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_is_str); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7883, __pyx_L1_error)
    __pyx_t_1 = (!__pyx_t_2);


    if (unlikely(__pyx_t_1)) {
/* … */
    }
+07884:             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, 7884, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
+07885:                 QuestDBErrorCode.BadDataFrame,
      __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7885, __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, 7885, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+07886:                 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, 7886, __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_12 = 56;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16[1]);
      #endif
      __pyx_t_11 = 0;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_11 |= __Pyx_PyUnicode_KIND_04(__pyx_t_16[1]);
      #endif
      __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_16, 3, __pyx_t_12, __pyx_t_11);
      if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 7886, __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, 7884, __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, 7884, __pyx_L1_error)
 07887:                 f'strings column.')
+07888:         listed.add(name)
    __pyx_t_10 = PySet_Add(__pyx_v_listed, __pyx_v_name); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 7888, __pyx_L1_error)

+07889:         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, 7889, __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, 7889, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_17 = PyTuple_New(3); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 7889, __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, 7889, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_15);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_17, 1, __pyx_t_15) != (0)) __PYX_ERR(0, 7889, __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, 7889, __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, 7889, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;

 07890: 
 07891:     # Match the row/numpy planner: an explicit symbols list marks only the
 07892:     # listed columns as symbols; every other dict-encoded (categorical)
 07893:     # column is forced to a plain VARCHAR field rather than auto-symbolized.
+07894:     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, 7894, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_dict_names = __pyx_t_3;
  __pyx_t_3 = 0;
+07895:     if dict_names is None:
  __pyx_t_1 = (__pyx_v_dict_names == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+07896:         return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+07897:     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, 7897, __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, 7897, __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, 7897, __pyx_L1_error)
          #endif
          if (__pyx_t_4 >= __pyx_temp) break;
        }
        __pyx_t_17 = __Pyx_PyList_GET_ITEM_REF(__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, 7897, __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, 7897, __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, 7897, __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;
+07898:         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, 7898, __pyx_L1_error)
    if (__pyx_t_1) {
/* … */
    }
+07899:             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, 7899, __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, 7899, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7899, __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, 7899, __pyx_L1_error);
      __Pyx_GIVEREF(__pyx_t_15);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_15) != (0)) __PYX_ERR(0, 7899, __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, 7899, __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, 7899, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

+07900:     return out
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_v_out);
      __pyx_r = __pyx_v_out;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 07901: 
 07902: 
+07903: 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_9genexpr21__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_9genexpr21__pyx_v_entry);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 07904:         object weaker, object stronger):
 07905:     """Merge two override lists, `stronger` winning on name collision.
 07906: 
 07907:     The three sources rank: `schema_overrides` states a type outright,
 07908:     `symbols` states one for string columns, and `df.attrs['questdb']`
 07909:     only recalls what a column held when it was read back out of
 07910:     QuestDB.
 07911:     """
 07912:     cdef set stronger_names
 07913:     cdef list merged
 07914:     cdef object entry
+07915:     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, 7915, __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) {
/* … */
  }
+07916:         return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+07917:     if not weaker:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_weaker); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 7917, __pyx_L1_error)
  __pyx_t_3 = (!__pyx_t_1);


  if (__pyx_t_3) {
/* … */
  }
+07918:         return stronger
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_stronger);
        __pyx_r = __pyx_v_stronger;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+07919:     if stronger is None:
  __pyx_t_3 = (__pyx_v_stronger == Py_None);
  if (__pyx_t_3) {
/* … */
  }
+07920:         return weaker
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_weaker);
        __pyx_r = __pyx_v_weaker;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+07921:     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, 7921, __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, 7921, __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, 7921, __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, 7921, __pyx_L10_error)
            #endif
            if (__pyx_t_6 >= __pyx_temp) break;
          }
          __pyx_t_8 = __Pyx_PyList_GET_ITEM_REF(__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, 7921, __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, 7921, __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, 7921, __pyx_L10_error)
            PyErr_Clear();
          }
          break;
        }
      }
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_XDECREF_SET(__pyx_9genexpr21__pyx_v_entry, __pyx_t_8);
      __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_GetItemInt(__pyx_9genexpr21__pyx_v_entry, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7921, __pyx_L10_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (unlikely(PySet_Add(__pyx_t_4, __pyx_t_8))) __PYX_ERR(0, 7921, __pyx_L10_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_9genexpr21__pyx_v_entry); __pyx_9genexpr21__pyx_v_entry = 0;
    goto __pyx_L14_exit_scope;
    __pyx_L10_error:;
    __Pyx_XDECREF(__pyx_9genexpr21__pyx_v_entry); __pyx_9genexpr21__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;
+07922:     merged = list(stronger)
  __pyx_t_4 = PySequence_List(__pyx_v_stronger); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_merged = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
+07923:     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, 7923, __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, 7923, __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, 7923, __pyx_L1_error)
          #endif
          if (__pyx_t_6 >= __pyx_temp) break;
        }
        __pyx_t_5 = __Pyx_PyList_GET_ITEM_REF(__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, 7923, __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, 7923, __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, 7923, __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;
+07924:         if entry[0] not in stronger_names:
    __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_entry, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7924, __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, 7924, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__pyx_t_3) {
/* … */
    }
+07925:             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, 7925, __pyx_L1_error)

+07926:     return merged
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_v_merged);
      __pyx_r = __pyx_v_merged;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 07927: 
 07928: 
 07929: # `df.attrs['questdb']` column kinds that an Arrow override can restore.
 07930: # The other kinds either survive on their storage type alone (VARCHAR,
 07931: # SYMBOL, TIMESTAMP, ...) or have no override to restore them with
 07932: # (BYTE / SHORT / INT, which the Arrow classifier widens). DATE is the
 07933: # one kind restored by reshaping the column rather than by an override,
 07934: # in `_dataframe_normalize_claimed_date`: no Arrow override names it,
 07935: # and the Arrow type it needs is the whole claim.
 07936: #: How long `QuestDB.close()` with no `timeout` waits while a lease is
 07937: #: outstanding before it stops waiting and raises. Generous, because a
 07938: #: lease held by another thread may be part-way through a large load
 07939: #: and that wait is the correct one; finite, because a lease held by
 07940: #: the calling thread, or by one that has since finished, is never
 07941: #: coming back and an unbounded wait there is a hang with no way out.
 07942: #: Hitting the bound leaves the handle closing; a later `close()`
 07943: #: resumes the wait. A `close()` with no `timeout` puts no bound on
 07944: #: calls in progress: a caller whose calls may never finish passes one.
+07945: cdef double _CLOSE_LEASE_WAIT_LIMIT_S = 60.0
  __pyx_v_7questdb_7_client__CLOSE_LEASE_WAIT_LIMIT_S = 60.0;
 07946: 
 07947: 
+07948: class _CloseTimeoutDefault:
  __pyx_t_20 = __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_20)) __PYX_ERR(0, 7948, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
/* … */
  __pyx_t_17 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_mstate_global->__pyx_n_u_CloseTimeoutDefault, __pyx_mstate_global->__pyx_empty_tuple, __pyx_t_20, NULL, 0, 0); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 7948, __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_CloseTimeoutDefault, __pyx_t_17) < (0)) __PYX_ERR(0, 7948, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 07949:     """What `QuestDB.close()` gets when no `timeout` is passed.
 07950: 
 07951:     `None` already means "no limit", so the default -- the lease bound
 07952:     above and no bound on calls -- needs a value of its own.
 07953:     """
+07954:     __slots__ = ()
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_slots, __pyx_mstate_global->__pyx_empty_tuple) < (0)) __PYX_ERR(0, 7954, __pyx_L1_error)
 07955: 
+07956:     def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_20_CloseTimeoutDefault_1__repr__(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 7956, __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, 7956, __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, 7956, __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, 7956, __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, 7956, __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, 7956, __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_17 = __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[119])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 7956, __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_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_repr, __pyx_t_17) < (0)) __PYX_ERR(0, 7956, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+07957:         return '<default>'
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_default);
      __pyx_r = __pyx_mstate_global->__pyx_kp_u_default;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 07958: 
 07959: 
+07960: _CLOSE_TIMEOUT_DEFAULT = _CloseTimeoutDefault()
  __pyx_t_17 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_CloseTimeoutDefault); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 7960, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_17, NULL};
    __pyx_t_20 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_19, __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;
    __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
    if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 7960, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_20);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_CLOSE_TIMEOUT_DEFAULT, __pyx_t_20) < (0)) __PYX_ERR(0, 7960, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 07961: 
 07962: 
+07963: 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;
}
 07964:     """`QuestDB.close()`'s `timeout` as seconds, refused unless it is a
 07965:     number of seconds, 0 or more."""
 07966:     cdef double seconds
+07967:     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, 7967, __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, 7967, __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, 7967, __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)) {
/* … */
  }
+07968:         raise TypeError(
    __pyx_t_3 = NULL;
+07969:             'close() timeout must be None or a number of seconds, not '
    __pyx_t_9 = 58;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8[1]);
    #endif
    __pyx_t_10 = 0;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_10 |= __Pyx_PyUnicode_KIND_04(__pyx_t_8[1]);
    #endif
    __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, __pyx_t_9, __pyx_t_10);
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7969, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_11 = 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_11, (2-__pyx_t_11) | (__pyx_t_11*__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, 7968, __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, 7968, __pyx_L1_error)
+07970:             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, 7970, __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, 7970, __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__3;
+07971:     seconds = float(timeout)
  __pyx_t_12 = __Pyx_PyObject_AsDouble(__pyx_v_timeout); if (unlikely(__PYX_CHECK_FLOAT_EXCEPTION(__pyx_t_12, ((double)((double)-1))) && PyErr_Occurred())) __PYX_ERR(0, 7971, __pyx_L1_error)
  __pyx_v_seconds = __pyx_t_12;
 07972:     # Written so that NaN, which compares false either way, is refused.
+07973:     if not seconds >= 0.0:
  __pyx_t_1 = (!(__pyx_v_seconds >= 0.0));

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+07974:         raise ValueError(
    __pyx_t_6 = NULL;
+07975:             'close() timeout must be a number of seconds, 0 or more, '
    __pyx_t_9 = 61;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8[1]);
    #endif
    __pyx_t_10 = 0;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_10 |= __Pyx_PyUnicode_KIND_04(__pyx_t_8[1]);
    #endif
    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, __pyx_t_9, __pyx_t_10);
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7975, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_11 = 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_11, (2-__pyx_t_11) | (__pyx_t_11*__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, 7974, __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, 7974, __pyx_L1_error)
+07976:             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, 7976, __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__3;
+07977:     return seconds
  {

    __pyx_r = __pyx_v_seconds;
  }
  goto __pyx_L0;
 07978: 
 07979: 
+07980: 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_7);
  __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;
}
 07981:         double waited, size_t leases, size_t calls):
 07982:     """What a `close()` that ran out of time says it left behind."""
 07983:     cdef str message = (
+07984:         f'close() stopped waiting after {waited:g}s: {leases} '
  __pyx_t_1 = __Pyx_PyUnicode_FromDouble(__pyx_v_waited, 'g', 6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7984, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyUnicode_From_size_t(__pyx_v_leases, 0, ' ', 'd'); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7984, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
/* … */
  __pyx_t_5 = 113;
  #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
  __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4[5]);
  #endif
  __pyx_t_6 = 0;
  __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_4, 7, __pyx_t_5, __pyx_t_6);
  if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7984, __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_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_message = ((PyObject*)__pyx_t_7);
  __pyx_t_7 = 0;
 07985:         'outstanding sender()/reader() lease(s) and '
+07986:         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, 7986, __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_1;
  __pyx_t_4[2] = __pyx_mstate_global->__pyx_kp_u_s_2;
  __pyx_t_4[3] = __pyx_t_2;
  __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;
+07987:     if leases:
  __pyx_t_8 = (__pyx_v_leases != 0);

  if (__pyx_t_8) {
/* … */
  }
+07988:         message += (
    __pyx_t_7 = __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_7)) __PYX_ERR(0, 7988, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF_SET(__pyx_v_message, ((PyObject*)__pyx_t_7));
    __pyx_t_7 = 0;
 07989:             ' A lease is returned only by the code holding it -- one '
 07990:             'held by this thread, or by a thread that has finished, '
 07991:             'never will be.')
+07992:     if calls:
  __pyx_t_8 = (__pyx_v_calls != 0);

  if (__pyx_t_8) {
/* … */
  }
+07993:         message += (
    __pyx_t_7 = __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_7)) __PYX_ERR(0, 7993, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF_SET(__pyx_v_message, ((PyObject*)__pyx_t_7));
    __pyx_t_7 = 0;
 07994:             " A call in progress returns once its work is done; close() "
 07995:             "can't interrupt it.")
+07996:     return message + (
  __pyx_t_7 = __Pyx_PyUnicode_Concat(__pyx_v_message, __pyx_mstate_global->__pyx_kp_u_The_handle_stays_closing_and_ta); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7996, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = ((PyObject*)__pyx_t_7);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_7 = 0;
  goto __pyx_L0;
 07997:         ' The handle stays closing and takes no new work. Call close() '
 07998:         'again once nothing is outstanding, or with a larger timeout -- '
 07999:         'timeout=None waits without a limit.')
 08000: 
 08001: 
+08002: def _debug_close_lease_wait_limit_s():
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_32_debug_close_lease_wait_limit_s(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_31_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_32_debug_close_lease_wait_limit_s = {"_debug_close_lease_wait_limit_s", (PyCFunction)__pyx_pw_7questdb_7_client_32_debug_close_lease_wait_limit_s, METH_NOARGS, __pyx_doc_7questdb_7_client_31_debug_close_lease_wait_limit_s};
static PyObject *__pyx_pw_7questdb_7_client_32_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_31_debug_close_lease_wait_limit_s(__pyx_self);

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

static PyObject *__pyx_pf_7questdb_7_client_31_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_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_32_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[120])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 8002, __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_close_lease_wait_limit_s, __pyx_t_20) < (0)) __PYX_ERR(0, 8002, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 08003:     """The bound `QuestDB.close()` puts on waiting for leases.
 08004: 
 08005:     Not part of the public API. Exposed so a test can reach the give-up
 08006:     path in a second rather than a minute; the bound is deliberately
 08007:     longer than any wait worth testing.
 08008:     """
+08009:     return _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, 8009, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 08010: 
 08011: 
+08012: def _debug_set_close_lease_wait_limit_s(double seconds):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_34_debug_set_close_lease_wait_limit_s(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_33_debug_set_close_lease_wait_limit_s, "Set the bound above. Not part of the public API.");
static PyMethodDef __pyx_mdef_7questdb_7_client_34_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_34_debug_set_close_lease_wait_limit_s, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_33_debug_set_close_lease_wait_limit_s};
static PyObject *__pyx_pw_7questdb_7_client_34_debug_set_close_lease_wait_limit_s(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 8012, __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, 8012, __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, 8012, __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, 8012, __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, 8012, __pyx_L3_error)
    }
    __pyx_v_seconds = __Pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_seconds == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 8012, __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, 8012, __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_33_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_33_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_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_34_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[121])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 8012, __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_set_close_lease_wait_limi, __pyx_t_20) < (0)) __PYX_ERR(0, 8012, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 08013:     """Set the bound above. Not part of the public API."""
 08014:     global _CLOSE_LEASE_WAIT_LIMIT_S
+08015:     _CLOSE_LEASE_WAIT_LIMIT_S = seconds
  __pyx_v_7questdb_7_client__CLOSE_LEASE_WAIT_LIMIT_S = __pyx_v_seconds;
 08016: 
 08017: 
 08018: cdef dict _ATTRS_OVERRIDE_KINDS = {
+08019:     'ipv4': <int>qwp_arrow_override_ipv4,
  __pyx_t_20 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 8019, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __pyx_t_19 = __Pyx_PyLong_From_int(((int)qwp_arrow_override_ipv4)); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 8019, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ipv4, __pyx_t_19) < (0)) __PYX_ERR(0, 8019, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+08020:     'char': <int>qwp_arrow_override_char,
  __pyx_t_19 = __Pyx_PyLong_From_int(((int)qwp_arrow_override_char)); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 8020, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_char_2, __pyx_t_19) < (0)) __PYX_ERR(0, 8019, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+08021:     'uuid': <int>qwp_arrow_override_uuid,
  __pyx_t_19 = __Pyx_PyLong_From_int(((int)qwp_arrow_override_uuid)); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 8021, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_uuid, __pyx_t_19) < (0)) __PYX_ERR(0, 8019, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+08022:     'long256': <int>qwp_arrow_override_long256,
  __pyx_t_19 = __Pyx_PyLong_From_int(((int)qwp_arrow_override_long256)); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 8022, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_long256, __pyx_t_19) < (0)) __PYX_ERR(0, 8019, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+08023:     'geohash': <int>qwp_arrow_override_geohash,
  __pyx_t_19 = __Pyx_PyLong_From_int(((int)qwp_arrow_override_geohash)); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 8023, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_geohash_2, __pyx_t_19) < (0)) __PYX_ERR(0, 8019, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 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_20));
  __Pyx_GIVEREF(__pyx_t_20);
  __pyx_t_20 = 0;
 08024: }
 08025: 
 08026: 
+08027: 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;
}
 08028:     """The pandas dtype of column `name`, or None where the frame has
 08029:     no such column.
 08030: 
 08031:     Takes the frame's `dtypes` rather than the frame: reading
 08032:     `frame.dtypes` builds a fresh Series every time, so looking it up
 08033:     per column was quadratic in the column count, on a path a streaming
 08034:     `iter_pandas` feeds per batch.
 08035:     """
+08036:     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;
  }
+08037:         return dtypes[name]
      __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_dtypes, __pyx_v_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8037, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __pyx_r = __pyx_t_4;
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      __pyx_t_4 = 0;
      goto __pyx_L7_try_return;
+08038:     except Exception:
    __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_5) {
      __Pyx_ErrRestore(0,0,0);
+08039:         return None
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __pyx_r = Py_None; __Pyx_INCREF(Py_None);
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      goto __pyx_L6_except_return;
    }
    goto __pyx_L5_except_error;
 08040: 
 08041: 
+08042: 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;
}
 08043:     """The Arrow storage type inside a pandas dtype, or None where the
 08044:     dtype holds none.
 08045: 
 08046:     A dtype with no Arrow type inside it is a real answer, separate
 08047:     from a column that is not in the frame: the column is there and
 08048:     cannot carry the claim. A pandas 3 string column reaches the
 08049:     capsule path this way, so the two have to be told apart.
 08050: 
 08051:     The caller has already established that `arrow_dtype` is a class,
 08052:     so a None here would be a third answer -- "cannot tell" -- that no
 08053:     caller is prepared to read.
 08054:     """
 08055:     cdef object ty
+08056:     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, 8056, __pyx_L1_error)
  __pyx_t_3 = (!__pyx_t_2);



  __pyx_t_1 = __pyx_t_3;

  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+08057:         return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+08058:     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, 8058, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_ty = __pyx_t_4;
  __pyx_t_4 = 0;
+08059:     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, 8059, __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, 8059, __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, 8059, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__pyx_t_1) {
/* … */
  }
+08060:         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, 8060, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF_SET(__pyx_v_ty, __pyx_t_5);
    __pyx_t_5 = 0;
+08061:     return ty
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_v_ty);
      __pyx_r = __pyx_v_ty;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 08062: 
 08063: 
+08064: 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;
}
 08065:         object types, object ty, str kind, object bits) except -1:
 08066:     """Whether the Arrow type can carry the claimed kind.
 08067: 
 08068:     Mirrors what the native client accepts, so a claim that no longer
 08069:     matches the column is dropped here instead of erroring there. UUID
 08070:     and LONG256 are held to their fixed widths: those are what the
 08071:     egress emits, and a variable-width binary claim would only be
 08072:     caught value by value at encode time.
 08073: 
 08074:     `types` is `pyarrow.types`, passed in so the caller reads it once
 08075:     for the whole frame rather than once per column.
 08076:     """
+08077:     if kind == 'ipv4':
  __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_ipv4, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8077, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+08078:         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, 8078, __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, 8078, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    {
      __pyx_r = __pyx_t_1;
    }
    goto __pyx_L0;
+08079:     if kind == 'char':
  __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_char_2, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8079, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+08080:         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, 8080, __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, 8080, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    {
      __pyx_r = __pyx_t_1;
    }
    goto __pyx_L0;
+08081:     if kind == 'uuid':
  __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_uuid, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8081, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+08082:         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, 8082, __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, 8082, __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, 8082, __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, 8082, __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;
+08083:     if kind == 'long256':
  __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_long256, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8083, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+08084:         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, 8084, __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, 8084, __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, 8084, __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, 8084, __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;
+08085:     if kind == 'geohash':
  __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_geohash_2, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8085, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+08086:         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, 8086, __pyx_L1_error)
    __pyx_t_5 = (!__pyx_t_1);


    if (__pyx_t_5) {
/* … */
    }
+08087:             return False
      {

        __pyx_r = 0;
      }
      goto __pyx_L0;
+08088:         bits = int(bits)
    __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_v_bits); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8088, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_bits, __pyx_t_2);
    __pyx_t_2 = 0;
+08089:         if bits < 1 or bits > 60:
    __pyx_t_1 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_bits, __pyx_mstate_global->__pyx_int_1, Py_LT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8089, __pyx_L1_error)
    if (!__pyx_t_1) {

    } else {

      __pyx_t_5 = __pyx_t_1;

      goto __pyx_L14_bool_binop_done;
    }
    __pyx_t_1 = __Pyx_PyObject_CompareBoolGt_object_int(__pyx_v_bits, __pyx_mstate_global->__pyx_int_60, Py_GT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8089, __pyx_L1_error)

    __pyx_t_5 = __pyx_t_1;

    __pyx_L14_bool_binop_done:;
    if (__pyx_t_5) {
/* … */
    }
+08090:             return False
      {

        __pyx_r = 0;
      }
      goto __pyx_L0;
 08091:         # Signed Arrow carriers preserve their raw two's-complement bits,
 08092:         # including the sign bit. The same four limits are returned by
 08093:         # `_geohash_dtype_max_bits`.
+08094:         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, 8094, __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, 8094, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_5) {
/* … */
    }
+08095:             return bits <= 8
      __pyx_t_2 = __Pyx_PyObject_CompareLe_object_int(__pyx_v_bits, __pyx_mstate_global->__pyx_int_8, Py_LE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8095, __pyx_L1_error)
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8095, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      {
        __pyx_r = __pyx_t_5;
      }
      goto __pyx_L0;
+08096:         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, 8096, __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, 8096, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_5) {
/* … */
    }
+08097:             return bits <= 16
      __pyx_t_2 = __Pyx_PyObject_CompareLe_object_int(__pyx_v_bits, __pyx_mstate_global->__pyx_int_16, Py_LE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8097, __pyx_L1_error)
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8097, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      {
        __pyx_r = __pyx_t_5;
      }
      goto __pyx_L0;
+08098:         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, 8098, __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, 8098, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_5) {
/* … */
    }
+08099:             return bits <= 32
      __pyx_t_2 = __Pyx_PyObject_CompareLe_object_int(__pyx_v_bits, __pyx_mstate_global->__pyx_int_32, Py_LE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8099, __pyx_L1_error)
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8099, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      {
        __pyx_r = __pyx_t_5;
      }
      goto __pyx_L0;
+08100:         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, 8100, __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, 8100, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_5) {
/* … */
    }
+08101:             return bits <= 60
      __pyx_t_2 = __Pyx_PyObject_CompareLe_object_int(__pyx_v_bits, __pyx_mstate_global->__pyx_int_60, Py_LE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8101, __pyx_L1_error)
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8101, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      {
        __pyx_r = __pyx_t_5;
      }
      goto __pyx_L0;
+08102:         return False
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+08103:     return False
  {

    __pyx_r = 0;
  }
  goto __pyx_L0;
 08104: 
 08105: 
+08106: 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;
}
 08107:     """Arrow overrides rebuilt from the `df.attrs['questdb']` metadata
 08108:     that `QueryResult.to_pandas()` attaches.
 08109: 
 08110:     A pandas dtype holds an Arrow type and no field, so the
 08111:     `questdb.column_type` claim the egress stamps on the field is gone
 08112:     by the time a frame comes back in; without it a UUID or LONG256
 08113:     column would go back out as BINARY and IPV4 / CHAR / GEOHASH as
 08114:     plain integers. The claim recalls what the frame held when it was
 08115:     read, so a column since dropped, renamed or retyped is skipped
 08116:     rather than rejected.
 08117:     """
+08118:     cdef list out = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8118, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 08119:     cdef object cols_meta, meta, ty, bits, arrow_dtype, types
 08120:     cdef object dtype
 08121:     cdef str kind
 08122:     cdef int kind_int
 08123:     cdef int arg_int
+08124:     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, 8124, __pyx_L1_error)
  __pyx_t_3 = (!__pyx_t_2);


  if (__pyx_t_3) {
/* … */
  }
+08125:         return out
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_out);
        __pyx_r = __pyx_v_out;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+08126:     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, 8126, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_cols_meta = __pyx_t_1;
  __pyx_t_1 = 0;
+08127:     if not cols_meta:
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_cols_meta); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 8127, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_3);


  if (__pyx_t_2) {
/* … */
  }
+08128:         return out
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_out);
        __pyx_r = __pyx_v_out;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+08129:     _dataframe_may_import_deps()
  __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8129, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+08130:     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, 8130, __pyx_L1_error)
  __pyx_t_3 = (!__pyx_t_2);


  if (__pyx_t_3) {
/* … */
  }
+08131:         return out
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_out);
        __pyx_r = __pyx_v_out;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
 08132:     # Read once for the whole frame, not once per column; the capsule
 08133:     # path hands over the `df.dtypes` it already read.
+08134:     if dtypes is None:
  __pyx_t_3 = (__pyx_v_dtypes == Py_None);
  if (__pyx_t_3) {
/* … */
  }
+08135:         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, 8135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_dtypes, __pyx_t_1);
    __pyx_t_1 = 0;
+08136:     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, 8136, __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;
+08137:     if arrow_dtype is None:
  __pyx_t_3 = (__pyx_v_arrow_dtype == Py_None);
  if (__pyx_t_3) {
/* … */
  }
 08138:         # No `ArrowDtype` in this pandas, so no column can be shown to
 08139:         # hold an Arrow type and every claim would be reported as one
 08140:         # the column cannot carry. That is "cannot tell", not "cannot
 08141:         # carry". A frame reaches here through `__arrow_c_stream__`,
 08142:         # which arrived in the same pandas `ArrowDtype` did, so this is
 08143:         # the shape of the answer rather than a case that comes up.
+08144:         return out
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_out);
        __pyx_r = __pyx_v_out;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+08145:     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, 8145, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_types = __pyx_t_4;
  __pyx_t_4 = 0;
+08146:     for name, meta in cols_meta.items():
  __pyx_t_5 = 0;
  if (unlikely(__pyx_v_cols_meta == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
    __PYX_ERR(0, 8146, __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, 8146, __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, 8146, __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;
+08147:         if not isinstance(name, str):
    __pyx_t_3 = PyUnicode_Check(__pyx_v_name); 
    __pyx_t_2 = (!__pyx_t_3);


    if (__pyx_t_2) {
/* … */
    }
+08148:             continue
      goto __pyx_L8_continue;
+08149:         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, 8149, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_XDECREF_SET(__pyx_v_kind, ((PyObject*)__pyx_t_8));
    __pyx_t_8 = 0;
+08150:         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, "\047NoneType\047 object is not iterable");
      __PYX_ERR(0, 8150, __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, 8150, __pyx_L1_error)

    __pyx_t_2 = __pyx_t_3;

    __pyx_L12_bool_binop_done:;
    if (__pyx_t_2) {
/* … */
    }
+08151:             continue
      goto __pyx_L8_continue;
+08152:         kind_int = <int>_ATTRS_OVERRIDE_KINDS[kind]
    if (unlikely(__pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
      __PYX_ERR(0, 8152, __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, 8152, __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, 8152, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_v_kind_int = ((int)__pyx_t_9);

+08153:         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, 8153, __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, 8153, __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, 8153, __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;
+08154:         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, 8154, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_8);
    __pyx_t_8 = 0;
+08155:         if dtype is None:
    __pyx_t_2 = (__pyx_v_dtype == Py_None);
    if (__pyx_t_2) {
/* … */
    }
 08156:             # The column is gone or renamed. That is the drift the
 08157:             # claim is meant to survive quietly.
+08158:             continue
      goto __pyx_L8_continue;
+08159:         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, 8159, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_XDECREF_SET(__pyx_v_ty, __pyx_t_8);
    __pyx_t_8 = 0;
+08160:         if ty is None:
    __pyx_t_2 = (__pyx_v_ty == Py_None);
    if (__pyx_t_2) {
/* … */
    }
 08161:             # The column is here in a dtype that holds no Arrow type --
 08162:             # a pandas 3 string column, say -- so no claim of any kind
 08163:             # fits it. The NumPy planner answers the same frame with a
 08164:             # log notice, and both planners answering alike is the point.
+08165:             _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, 8165, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+08166:             continue
      goto __pyx_L8_continue;
+08167:         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, 8167, __pyx_L1_error)
    __pyx_t_3 = (!__pyx_t_2);


    if (__pyx_t_3) {
/* … */
    }
+08168:             _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, 8168, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+08169:             continue
      goto __pyx_L8_continue;
 08170:         # Only GEOHASH takes an argument, and `_attrs_override_fits` has
 08171:         # already held it to a whole number in 1..=60.
+08172:         arg_int = int(bits) if kind == 'geohash' else 0
    __pyx_t_3 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_geohash_2, Py_EQ); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 8172, __pyx_L1_error)
    if (__pyx_t_3) {
      __pyx_t_8 = __Pyx_PyNumber_Int(__pyx_v_bits); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8172, __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, 8172, __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;
+08173:         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, 8173, __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, 8173, __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, 8173, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 8173, __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, 8173, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_1);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_1) != (0)) __PYX_ERR(0, 8173, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_10);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_13, 2, __pyx_t_10) != (0)) __PYX_ERR(0, 8173, __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, 8173, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;

    __pyx_L8_continue:;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+08174:     return out
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_v_out);
      __pyx_r = __pyx_v_out;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 08175: 
 08176: 
+08177: 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;
}
 08178:     cdef object cls
 08179:     cdef object module
 08180:     cdef object name
+08181:     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, 8181, __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, 8181, __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) {
/* … */
  }
+08182:         return True
    {

      __pyx_r = 1;
    }
    goto __pyx_L0;
+08183:     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:;
  }
+08184:         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, 8184, __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, 8184, __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, 8184, __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, 8184, __pyx_L6_error)
              #endif
              if (__pyx_t_8 >= __pyx_temp) break;
            }
            __pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(__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, 8184, __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, 8184, __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, 8184, __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;
+08185:             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__6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8185, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_XDECREF_SET(__pyx_v_module, __pyx_t_3);
        __pyx_t_3 = 0;
+08186:             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__6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8186, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_3);
        __pyx_t_3 = 0;
+08187:             if (name == 'DataFrame' and
        __pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_name, __pyx_mstate_global->__pyx_n_u_DataFrame, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8187, __pyx_L6_error)
        if (__pyx_t_2) {

        } else {

          __pyx_t_1 = __pyx_t_2;

          goto __pyx_L15_bool_binop_done;
        }
/* … */
        if (__pyx_t_1) {
/* … */
        }
+08188:                     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;
        }
+08189:                     (module == 'pandas' or module.startswith('pandas.'))):
        __pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_module, __pyx_mstate_global->__pyx_n_u_pandas_2, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8189, __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, 8189, __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, 8189, __pyx_L6_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

        __pyx_t_1 = __pyx_t_2;

        __pyx_L15_bool_binop_done:;
+08190:                 return True
          {

            __pyx_r = 1;
          }
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          goto __pyx_L10_try_return;
+08191:     except Exception:
    __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_12) {
      __Pyx_ErrRestore(0,0,0);
+08192:         return False
      {

        __pyx_r = 0;
      }
      goto __pyx_L9_except_return;
    }
    goto __pyx_L8_except_error;
+08193:     return False
  {

    __pyx_r = 0;
  }
  goto __pyx_L0;
 08194: 
 08195: 
+08196: 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);
+08197: cdef bint _MASKED_DTYPE_READY = False
  __pyx_v_7questdb_7_client__MASKED_DTYPE_READY = 0;
 08198: 
 08199: 
+08200: 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;
}
 08201:     global _MASKED_DTYPE, _MASKED_DTYPE_READY
+08202:     if not _MASKED_DTYPE_READY:
  __pyx_t_1 = (!__pyx_v_7questdb_7_client__MASKED_DTYPE_READY);

  if (__pyx_t_1) {
/* … */
  }
+08203:         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:;
    }
+08204:             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, 8204, __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, 8204, __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;
+08205:             _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);
+08206:         except Exception:
      __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
      if (__pyx_t_9) {
        __Pyx_ErrRestore(0,0,0);
+08207:             _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;
+08208:         _MASKED_DTYPE_READY = True
    __pyx_v_7questdb_7_client__MASKED_DTYPE_READY = 1;
+08209:     return _MASKED_DTYPE
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_v_7questdb_7_client__MASKED_DTYPE);
      __pyx_r = __pyx_v_7questdb_7_client__MASKED_DTYPE;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 08210: 
 08211: 
+08212: 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;
}
 08213:     # A fully Arrow-backed frame takes the zero-copy capsule path; any
 08214:     # numpy / object / masked / categorical column routes the whole frame to
 08215:     # the manual planner (which ingests those directly and the Arrow-backed
 08216:     # columns via the arrow-import path). `dtypes` is the frame's
 08217:     # `df.dtypes`.
 08218:     cdef object dtype
+08219:     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:;
  }
+08220:         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, 8220, __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, 8220, __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, 8220, __pyx_L3_error)
              #endif
              if (__pyx_t_5 >= __pyx_temp) break;
            }
            __pyx_t_7 = __Pyx_PyList_GET_ITEM_REF(__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, 8220, __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, 8220, __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, 8220, __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;
+08221:             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, 8221, __pyx_L3_error)
        __pyx_t_9 = (!__pyx_t_8);


        if (__pyx_t_9) {
/* … */
        }
+08222:                 return True
          {

            __pyx_r = 1;
          }
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          goto __pyx_L7_try_return;
+08223:     except Exception:
    __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_10) {
      __Pyx_ErrRestore(0,0,0);
+08224:         return True
      {

        __pyx_r = 1;
      }
      goto __pyx_L6_except_return;
    }
    goto __pyx_L5_except_error;
+08225:     return False
  {

    __pyx_r = 0;
  }
  goto __pyx_L0;
 08226: 
 08227: 
+08228: 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 */
+08229:     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, 8229, __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;
+08230:     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, 8230, __pyx_L1_error)

  __pyx_t_3 = __pyx_t_4;

  __pyx_L4_bool_binop_done:;
  if (__pyx_t_3) {
/* … */
  }
+08231:         return True
    {

      __pyx_r = 1;
    }
    goto __pyx_L0;
+08232:     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, 8232, __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, 8232, __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;
  }
+08233:             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, 8233, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_pyarrow, Py_EQ); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 8233, __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;
 08234: 
 08235: 
+08236: 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_9genexpr22__pyx_v_name = NULL;
  PyObject *__pyx_9genexpr22__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_9genexpr22__pyx_v_name);
  __Pyx_XDECREF(__pyx_9genexpr22__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;
}
 08237:     """Why `schema_overrides` cannot apply to `df`, naming the pandas
 08238:     columns that are not Arrow-backed when there are any."""
+08239:     cdef list names = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8239, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_names = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 08240:     cdef str listed
+08241:     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, 8241, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
  }
+08242:         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:;
    }
+08243:             names = [
        { /* enter inner scope */
          __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8243, __pyx_L12_error)
          __Pyx_GOTREF(__pyx_t_1);
+08244:                 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, 8244, __pyx_L12_error)
          __Pyx_GOTREF(__pyx_t_10);
          if (unlikely(__pyx_t_10 == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
            __PYX_ERR(0, 8244, __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, 8244, __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, 8244, __pyx_L12_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_GOTREF(__pyx_t_10);
            __Pyx_XDECREF_SET(__pyx_9genexpr22__pyx_v_name, __pyx_t_11);
            __pyx_t_11 = 0;
            __Pyx_XDECREF_SET(__pyx_9genexpr22__pyx_v_dtype, __pyx_t_10);
            __pyx_t_10 = 0;
/* … */
              if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, __pyx_9genexpr22__pyx_v_name))) __PYX_ERR(0, 8243, __pyx_L12_error)
+08245:                 if not _pandas_dtype_is_arrow(dtype)]
            __pyx_t_2 = __pyx_f_7questdb_7_client__pandas_dtype_is_arrow(__pyx_9genexpr22__pyx_v_dtype); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8245, __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_9genexpr22__pyx_v_dtype); __pyx_9genexpr22__pyx_v_dtype = 0;
          __Pyx_XDECREF(__pyx_9genexpr22__pyx_v_name); __pyx_9genexpr22__pyx_v_name = 0;
          goto __pyx_L16_exit_scope;
          __pyx_L12_error:;
          __Pyx_XDECREF(__pyx_9genexpr22__pyx_v_dtype); __pyx_9genexpr22__pyx_v_dtype = 0;
          __Pyx_XDECREF(__pyx_9genexpr22__pyx_v_name); __pyx_9genexpr22__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;
+08246:         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, 8246, __pyx_L6_except_error)
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_10);
+08247:             names = []
        __pyx_t_11 = PyList_New(0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8247, __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;
+08248:     listed = ''
  __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u__6);
  __pyx_v_listed = __pyx_mstate_global->__pyx_kp_u__6;
+08249:     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, 8249, __pyx_L1_error)
    __pyx_t_13 = (__pyx_temp != 0);
  }

  if (__pyx_t_13) {
/* … */
  }
+08250:         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_11_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_11_genexpr *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_11_genexpr(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_11_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_11_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 8250, __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, 8250, __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, 8250, __pyx_L1_error)
  __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 8250, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 8250, __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, 8250, __pyx_L1_error)
      #endif
      if (__pyx_t_2 >= __pyx_temp) break;
    }
    __pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_1, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
    ++__pyx_t_2;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8250, __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, 8250, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_r, __pyx_t_3))) __PYX_ERR(0, 8250, __pyx_L1_error)
    __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, 8250, __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, 8250, __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, 8250, __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__26, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8250, __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_11_genexpr {
  PyObject_HEAD
  PyObject *__pyx_genexpr_arg_0;
  PyObject *__pyx_v_name;
};

+08251:         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, 8251, __pyx_L1_error)
    __pyx_t_13 = (__pyx_t_8 > 5);


    if (__pyx_t_13) {
/* … */
    }
+08252:             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, 8252, __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, 8252, __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_8 = 10;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14[1]);
      #endif
      __pyx_t_9 = 0;
      __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_14, 3, __pyx_t_8, __pyx_t_9);
      if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8252, __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, 8252, __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;
+08253:         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, 8253, __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__33;
    __pyx_t_8 = 43;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14[1]);
    #endif
    __pyx_t_9 = 0;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_9 |= __Pyx_PyUnicode_KIND_04(__pyx_t_14[1]);
    #endif
    __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_14, 3, __pyx_t_8, __pyx_t_9);
    if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8253, __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;
 08254:     return (
 08255:         '`schema_overrides` works only on input in Arrow format: a '
 08256:         'pyarrow Table or RecordBatch, a polars DataFrame, or a pandas '
 08257:         'DataFrame (pandas 2.2 or newer) whose columns all have Arrow '
+08258:         '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, 8258, __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, 8258, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = ((PyObject*)__pyx_t_6);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_6 = 0;
  goto __pyx_L0;
 08259:         'Convert the DataFrame, e.g. '
 08260:         '`df = df.convert_dtypes(dtype_backend="pyarrow")`, or drop '
 08261:         '`schema_overrides`.')
 08262: 
 08263: 
+08264: 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;
}
 08265:         object df,
 08266:         object at) except -1:
+08267:     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, 8267, __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) {
/* … */
  }
+08268:         return False
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+08269:     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;
  }
+08270:         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, 8270, __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, 8270, __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, 8270, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_7, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8270, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_9, __pyx_v_at, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8270, __pyx_L6_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

      __pyx_t_1 = __pyx_t_2;

      __pyx_L12_bool_binop_done:;
      {
        __pyx_r = __pyx_t_1;
      }
      goto __pyx_L10_try_return;
+08271:     except Exception:
    __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_10) {
      __Pyx_ErrRestore(0,0,0);
+08272:         return False
      {

        __pyx_r = 0;
      }
      goto __pyx_L9_except_return;
    }
    goto __pyx_L8_except_error;
 08273: 
 08274: 
+08275: 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;
}
+08276:     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, 8276, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_row_count_obj = __pyx_t_1;
  __pyx_t_1 = 0;
+08277:     if row_count_obj is None:
  __pyx_t_2 = (__pyx_v_row_count_obj == Py_None);
  if (__pyx_t_2) {
/* … */
  }
+08278:         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, 8278, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_row_count_obj, __pyx_t_1);
    __pyx_t_1 = 0;
+08279:     if row_count_obj is not None:
  __pyx_t_2 = (__pyx_v_row_count_obj != Py_None);
  if (__pyx_t_2) {
/* … */
  }
+08280:         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, 8280, __pyx_L1_error)
    {

      __pyx_r = ((Py_ssize_t)__pyx_t_3);
    }

    goto __pyx_L0;
+08281:     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, 8281, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
  }
+08282:         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, 8282, __pyx_L1_error)
    {

      __pyx_r = ((Py_ssize_t)__pyx_t_3);
    }

    goto __pyx_L0;
+08283:     return -1
  {

    __pyx_r = -1L;
  }
  goto __pyx_L0;
 08284: 
 08285: 
+08286: 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;
}
 08287:         object sliceable,
 08288:         Py_ssize_t offset,
 08289:         Py_ssize_t row_count):
+08290:     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, 8290, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+08291:         return sliceable.slice(offset, row_count)
    __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, 8291, __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, 8291, __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, 8291, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+08292:     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, 8292, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+08293:         return sliceable.iloc[offset:offset + row_count]
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8293, __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, 8293, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_5;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_5 = 0;
    goto __pyx_L0;
+08294:     return None
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 08295: 
 08296: 
+08297: 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;
};
 08298:     # Pooled borrow when ``db != NULL``; otherwise a poolless standalone
 08299:     # connection opened from ``opts`` per call.
 08300:     questdb_db* db
 08301:     const line_sender_opts* opts
 08302: 
 08303: 
+08304: 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;
}
 08305:         direct_conn_source_t* src,
 08306:         uint64_t budget_ms,
 08307:         line_sender_error** err) noexcept nogil:
+08308:     if src.db != NULL:
  __pyx_t_1 = (__pyx_v_src->db != NULL);

  if (__pyx_t_1) {
/* … */
  }
+08309:         if budget_ms == 0:
    __pyx_t_1 = (__pyx_v_budget_ms == 0);

    if (__pyx_t_1) {
/* … */
    }
+08310:             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;
+08311:         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;
 08312:             src.db, budget_ms, err)
+08313:     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;
 08314: 
 08315: 
+08316: 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 */
}
 08317:         direct_conn_source_t* src,
 08318:         qwp_direct_sender* conn,
 08319:         bint force_drop) noexcept nogil:
+08320:     if src.db != NULL:
  __pyx_t_1 = (__pyx_v_src->db != NULL);

  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+08321:         if force_drop:
    if (__pyx_v_force_drop) {
/* … */
      goto __pyx_L4;
    }
+08322:             questdb_db_drop_direct_sender(src.db, conn)
      questdb_db_drop_direct_sender(__pyx_v_src->db, __pyx_v_conn);
 08323:         else:
+08324:             questdb_db_return_direct_sender(src.db, conn)
    /*else*/ {
      questdb_db_return_direct_sender(__pyx_v_src->db, __pyx_v_conn);
    }
    __pyx_L4:;
+08325:     elif force_drop:
  if (__pyx_v_force_drop) {
/* … */
    goto __pyx_L3;
  }
 08326:         # Destroying a poolless sender after a failure must discard its
 08327:         # uncommitted pipelined frames, and `qwp_direct_sender_free`
 08328:         # commits them best-effort, so the drop entry point is the only
 08329:         # bound way to get that. It ignores its `db` argument
 08330:         # (`qwp_sender.h`: "`db` is currently ignored - the sender
 08331:         # carries its own reference to the pool"), which is what makes
 08332:         # NULL safe for a handle that never came from a pool.
+08333:         questdb_db_drop_direct_sender(NULL, conn)
    questdb_db_drop_direct_sender(NULL, __pyx_v_conn);
 08334:     else:
+08335:         qwp_direct_sender_free(conn)
  /*else*/ {
    qwp_direct_sender_free(__pyx_v_conn);
  }
  __pyx_L3:;
 08336: 
 08337: 
+08338: 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;
  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_9genexpr24__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_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_9genexpr24__pyx_v_entry);
  __Pyx_XDECREF(__pyx_v_at);

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08339:         direct_conn_source_t* src,
 08340:         uint64_t budget_ms,
 08341:         object df,
 08342:         object table_name,
 08343:         object symbols,
 08344:         object at,
 08345:         size_t max_rows_per_batch,
 08346:         object validated_overrides,
 08347:         bint* may_have_committed_prefix,
 08348:         bint* nonreplayable_consumed) except -1:
+08349:     cdef qdb_pystr_buf* b = NULL
  __pyx_v_b = NULL;
+08350:     cdef qwp_direct_sender* conn = NULL
  __pyx_v_conn = NULL;
+08351:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+08352:     cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+08353:     cdef object sliceable = None
  __Pyx_INCREF(Py_None);
  __pyx_v_sliceable = Py_None;
+08354:     cdef bint any_flushed = False
  __pyx_v_any_flushed = 0;
+08355:     cdef size_t deferred_since_sync = 0
  __pyx_v_deferred_since_sync = 0;
+08356:     cdef bint force_drop_conn = False
  __pyx_v_force_drop_conn = 0;
+08357:     cdef object row_slice = None
  __Pyx_INCREF(Py_None);
  __pyx_v_row_slice = Py_None;
+08358:     cdef object first_batch = None
  __Pyx_INCREF(Py_None);
  __pyx_v_first_batch = Py_None;
 08359:     cdef object schema
+08360:     cdef Py_ssize_t total_rows = 0
  __pyx_v_total_rows = 0;
+08361:     cdef Py_ssize_t offset = 0
  __pyx_v_offset = 0;
 08362:     cdef Py_ssize_t chunk_rows
 08363:     cdef object symbol_overrides
 08364:     cdef object merged_overrides
+08365:     cdef bint can_slice = False
  __pyx_v_can_slice = 0;
 08366:     cdef line_sender_table_name c_table_name
 08367:     cdef line_sender_column_name c_ts_column
+08368:     cdef line_sender_column_name* c_ts_column_ptr = NULL
  __pyx_v_c_ts_column_ptr = NULL;
 08369:     cdef ArrowSchema c_schema
+08370:     cdef qwp_arrow_override* c_overrides = NULL
  __pyx_v_c_overrides = NULL;
+08371:     cdef size_t c_overrides_len = 0
  __pyx_v_c_overrides_len = 0;
+08372:     cdef bint at_is_column = False
  __pyx_v_at_is_column = 0;
+08373:     cdef bint at_scalar_set = False
  __pyx_v_at_scalar_set = 0;
+08374:     cdef int64_t at_scalar_nanos = 0
  __pyx_v_at_scalar_nanos = 0;
 08375:     cdef size_t i
 08376:     cdef object name_bytes
 08377:     cdef object roundtrip_overrides
 08378:     cdef int kind_int
 08379:     cdef int arg_int
+08380:     cdef object pandas_dtypes = None
  __Pyx_INCREF(Py_None);
  __pyx_v_pandas_dtypes = Py_None;
 08381:     cdef object export_dtypes
+08382:     cdef set binary_names = set()
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_binary_names = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+08383:     cdef list unlabelled = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8383, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_unlabelled = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 08384:     cdef object entry
 08385: 
+08386:     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, 8386, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
  }
 08387:         # Read once and shared by every per-column pass below: each
 08388:         # `df.dtypes` builds a fresh Series.
+08389:         _dataframe_may_import_deps()
    __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8389, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+08390:         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:;
    }
+08391:             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, 8391, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF_SET(__pyx_v_pandas_dtypes, __pyx_t_1);
        __pyx_t_1 = 0;
+08392:         except Exception:
      __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
      if (__pyx_t_6) {
        __Pyx_ErrRestore(0,0,0);
+08393:             return False
        {

          __pyx_r = 0;
        }
        goto __pyx_L7_except_return;
      }
      goto __pyx_L6_except_error;
+08394:         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, 8394, __pyx_L1_error)
    if (__pyx_t_2) {
/* … */
    }
+08395:             return False
      {

        __pyx_r = 0;
      }
      goto __pyx_L0;
+08396:     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, 8396, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
  }
+08397:         return False
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
 08398: 
 08399:     # LazyFrame: use the streaming engine (polars 1.32+) for lower peak
 08400:     # memory. `LazyFrame.collect_batches()` would stream natively but
 08401:     # upstream marks it unstable and "much slower than native sinks", so
 08402:     # we materialize and slice downstream.
+08403:     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, 8403, __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, 8403, __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;
  }
+08404:             df, _POLARS_LAZYFRAME_T):
  __pyx_t_1 = __pyx_v_7questdb_7_client__POLARS_LAZYFRAME_T;
  __Pyx_INCREF(__pyx_t_1);
+08405:         sliceable = df.collect(engine='streaming')
    __pyx_t_8 = __pyx_v_df;
    __Pyx_INCREF(__pyx_t_8);
    __pyx_t_9 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_mstate_global->__pyx_n_u_streaming};
      #if CYTHON_VECTORCALL
      __pyx_t_10 = __pyx_mstate_global->__pyx_tuple[32];
      if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8405, __pyx_L1_error)
      __Pyx_INCREF(__pyx_t_10);
      #else
      {
        PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_engine};
        __pyx_t_10 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
        if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8405, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
      }
      #endif
      __pyx_t_1 = __Pyx_Object_VectorcallMethodKwds((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, 8405, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_DECREF_SET(__pyx_v_sliceable, __pyx_t_1);
    __pyx_t_1 = 0;
/* … */
  {
    PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_engine};
    __pyx_mstate_global->__pyx_tuple[32] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[32])) __PYX_ERR(0, 8405, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[32]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[32]);
+08406:     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, 8406, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
    goto __pyx_L14;
  }
+08407:         sliceable = df
    __Pyx_INCREF(__pyx_v_df);
    __Pyx_DECREF_SET(__pyx_v_sliceable, __pyx_v_df);
+08408:     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, 8408, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
    goto __pyx_L14;
  }
+08409:         _dataframe_require_pyarrow()
    __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_require_pyarrow(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8409, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+08410:         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, 8410, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_10 = __pyx_t_8;
    __Pyx_INCREF(__pyx_t_10);
+08411:             [_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, 8411, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
    }
    __pyx_t_12 = PyList_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8411, __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, 8411, __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, 8410, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_DECREF_SET(__pyx_v_sliceable, __pyx_t_1);
    __pyx_t_1 = 0;
 08412:     else:
+08413:         return False
  /*else*/ {
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
  }
  __pyx_L14:;
 08414: 
+08415:     _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, 8415, __pyx_L1_error)

 08416: 
+08417:     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, 8417, __pyx_L1_error)
  __pyx_v_total_rows = __pyx_t_14;
 08418: 
+08419:     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)) {
/* … */
  }
+08420:         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, 8420, __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, 8420, __pyx_L1_error)
 08421:             'table_name must be str for Arrow-native DataFrame input.')
+08422:     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, 8422, __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, 8422, __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;
  }
+08423:         at_is_column = False
    __pyx_v_at_is_column = 0;
+08424:     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;
  }
+08425:         at_scalar_set = True
    __pyx_v_at_scalar_set = 1;
+08426:         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;
+08427:     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, 8427, __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, 8427, __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, 8427, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (__pyx_t_7) {
/* … */
    goto __pyx_L18;
  }
+08428:         at_scalar_set = True
    __pyx_v_at_scalar_set = 1;
+08429:         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, 8429, __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, 8429, __pyx_L1_error)
    __pyx_v_at_scalar_nanos = __pyx_t_15;
+08430:     elif isinstance(at, str):
  __pyx_t_7 = PyUnicode_Check(__pyx_v_at); 
  if (__pyx_t_7) {
/* … */
    goto __pyx_L18;
  }
+08431:         at_is_column = True
    __pyx_v_at_is_column = 1;
+08432:     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;
  }
+08433:         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, 8433, __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, 8433, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);

    __Pyx_DECREF_SET(__pyx_v_at, __pyx_t_8);
    __pyx_t_8 = 0;
+08434:         at_is_column = True
    __pyx_v_at_is_column = 1;
 08435:     else:
+08436:         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, 8436, __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, 8436, __pyx_L1_error)
  }
  __pyx_L18:;
 08437:             'at must be a column name str, int index, TimestampNanos, '
 08438:             'datetime, ServerTimestamp, or None for Arrow-native DataFrame '
 08439:             'input.')
 08440: 
 08441:     # An empty frame is a no-op: it emits nothing and is never exported,
 08442:     # so it skips the name check and symbol-shape validation.
+08443:     if total_rows == 0:
  __pyx_t_7 = (__pyx_v_total_rows == 0);

  if (__pyx_t_7) {
/* … */
  }
+08444:         return True
    {

      __pyx_r = 1;
    }
    goto __pyx_L0;
 08445: 
+08446:     _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, 8446, __pyx_L1_error)

 08447: 
+08448:     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, 8448, __pyx_L1_error)
  if (__pyx_t_7) {
/* … */
    goto __pyx_L24;
  }
+08449:         if _PYARROW is None:
    __pyx_t_7 = (__pyx_v_7questdb_7_client__PYARROW == Py_None);
    if (__pyx_t_7) {
/* … */
    }
+08450:             _dataframe_require_pyarrow()
      __pyx_t_8 = __pyx_f_7questdb_7_client__dataframe_require_pyarrow(); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8450, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+08451:         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, 8451, __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, 8451, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_16 = (!__pyx_t_7);


    if (unlikely(__pyx_t_16)) {
/* … */
    }
+08452:             raise ImportError(
      __pyx_t_1 = NULL;
+08453:                 '`pyarrow` >= 14.0.0 is required for Arrow-backed pandas '
      __pyx_t_14 = 130;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17[1]);
      #endif
      __pyx_t_6 = 0;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_6 |= __Pyx_PyUnicode_KIND_04(__pyx_t_17[1]);
      #endif
      __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_17, 3, __pyx_t_14, __pyx_t_6);
      if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8453, __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, 8452, __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, 8452, __pyx_L1_error)
+08454:                 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, 8454, __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, 8454, __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;
 08455:                 'Upgrade with `pip install -U pyarrow`.')
+08456:         chunk_rows = max_rows_per_batch
    __pyx_v_chunk_rows = __pyx_v_max_rows_per_batch;
+08457:         if chunk_rows > total_rows:
    __pyx_t_16 = (__pyx_v_chunk_rows > __pyx_v_total_rows);

    if (__pyx_t_16) {
/* … */
    }
+08458:             chunk_rows = total_rows
      __pyx_v_chunk_rows = __pyx_v_total_rows;
+08459:         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, 8459, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_12 = __pyx_t_1;
    __Pyx_INCREF(__pyx_t_12);
+08460:             _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, 8460, __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, 8459, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
    }
    __Pyx_DECREF_SET(__pyx_v_first_batch, __pyx_t_8);
    __pyx_t_8 = 0;
+08461:         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, 8461, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_v_schema = __pyx_t_8;
    __pyx_t_8 = 0;
 08462:     else:
+08463:         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, 8463, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_v_schema = __pyx_t_8;
    __pyx_t_8 = 0;
  }
  __pyx_L24:;
+08464:     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, 8464, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_v_symbol_overrides = __pyx_t_8;
  __pyx_t_8 = 0;
 08465:         sliceable, schema, symbols)
+08466:     if symbol_overrides is None:
  __pyx_t_16 = (__pyx_v_symbol_overrides == Py_None);
  if (__pyx_t_16) {
/* … */
  }
+08467:         return False
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+08468:     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, 8468, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_v_merged_overrides = __pyx_t_8;
  __pyx_t_8 = 0;
 08469:         symbol_overrides, validated_overrides)
 08470:     # The claim lookup and the refusal judge each exported column by its
 08471:     # pandas dtype, and the export includes the frame's index levels.
+08472:     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, 8472, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_v_export_dtypes = __pyx_t_8;
  __pyx_t_8 = 0;
+08473:     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, 8473, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_v_roundtrip_overrides = __pyx_t_8;
  __pyx_t_8 = 0;
 08474:         sliceable, export_dtypes)
+08475:     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, 8475, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF_SET(__pyx_v_merged_overrides, __pyx_t_8);
  __pyx_t_8 = 0;
 08476:         roundtrip_overrides, merged_overrides)
+08477:     _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, 8477, __pyx_L1_error)

 08478:         df, export_dtypes, merged_overrides)
+08479:     if merged_overrides:
  __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_v_merged_overrides); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 8479, __pyx_L1_error)
  if (__pyx_t_16) {
/* … */
  }
 08480:         # A `'binary'` override is a label for this client alone; the
 08481:         # native ingest gets the rest.
+08482:         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, 8482, __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, 8482, __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, 8482, __pyx_L1_error)
            #endif
            if (__pyx_t_14 >= __pyx_temp) break;
          }
          __pyx_t_1 = __Pyx_PyList_GET_ITEM_REF(__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, 8482, __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, 8482, __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, 8482, __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;
+08483:             if entry[1] == _SCHEMA_OVERRIDE_BINARY:
      __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_entry, 1, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8483, __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, 8483, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_16 = __Pyx_PyObject_CompareBoolEq_object_int(__pyx_t_1, __pyx_t_10, Py_EQ); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 8483, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (__pyx_t_16) {
/* … */
      }
+08484:                 binary_names.add(entry[0])
        __pyx_t_10 = __Pyx_GetItemInt(__pyx_v_entry, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8484, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_19 = PySet_Add(__pyx_v_binary_names, __pyx_t_10); if (unlikely(__pyx_t_19 == ((int)-1))) __PYX_ERR(0, 8484, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;

+08485:         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, 8485, __pyx_L1_error)
      __pyx_t_16 = (__pyx_temp != 0);
    }

    if (__pyx_t_16) {
/* … */
    }
+08486:             merged_overrides = [
      { /* enter inner scope */
        __pyx_t_10 = PyList_New(0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8486, __pyx_L39_error)
        __Pyx_GOTREF(__pyx_t_10);
+08487:                 entry for entry in merged_overrides
        if (likely(PyList_CheckExact(__pyx_v_merged_overrides)) || PyTuple_CheckExact(__pyx_v_merged_overrides)) {
          __pyx_t_1 = __pyx_v_merged_overrides; __Pyx_INCREF(__pyx_t_1);
          __pyx_t_14 = 0;
          __pyx_t_18 = NULL;
        } else {
          __pyx_t_14 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_merged_overrides); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8487, __pyx_L39_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_18 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 8487, __pyx_L39_error)
        }
        for (;;) {
          if (likely(!__pyx_t_18)) {
            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, 8487, __pyx_L39_error)
                #endif
                if (__pyx_t_14 >= __pyx_temp) break;
              }
              __pyx_t_12 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_1, __pyx_t_14, __Pyx_ReferenceSharing_OwnStrongReference);
              ++__pyx_t_14;
            } 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, 8487, __pyx_L39_error)
                #endif
                if (__pyx_t_14 >= __pyx_temp) break;
              }
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_12 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_14));
              #else
              __pyx_t_12 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_14);
              #endif
              ++__pyx_t_14;
            }
            if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8487, __pyx_L39_error)
          } else {
            __pyx_t_12 = __pyx_t_18(__pyx_t_1);
            if (unlikely(!__pyx_t_12)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 8487, __pyx_L39_error)
                PyErr_Clear();
              }
              break;
            }
          }
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_XDECREF_SET(__pyx_9genexpr24__pyx_v_entry, __pyx_t_12);
          __pyx_t_12 = 0;
/* … */
            if (unlikely(__Pyx_ListComp_Append(__pyx_t_10, __pyx_9genexpr24__pyx_v_entry))) __PYX_ERR(0, 8486, __pyx_L39_error)
/* … */
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_9genexpr24__pyx_v_entry); __pyx_9genexpr24__pyx_v_entry = 0;
        goto __pyx_L44_exit_scope;
        __pyx_L39_error:;
        __Pyx_XDECREF(__pyx_9genexpr24__pyx_v_entry); __pyx_9genexpr24__pyx_v_entry = 0;
        goto __pyx_L1_error;
        __pyx_L44_exit_scope:;
      } /* exit inner scope */
      __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 8486, __pyx_L1_error)
      if (!__pyx_t_16) {
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      } else {
        __Pyx_INCREF(__pyx_t_10);
        __pyx_t_8 = __pyx_t_10;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        goto __pyx_L35_bool_binop_done;
      }
+08488:                 if entry[1] != _SCHEMA_OVERRIDE_BINARY] or None
          __pyx_t_12 = __Pyx_GetItemInt(__pyx_9genexpr24__pyx_v_entry, 1, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8488, __pyx_L39_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_11 = __Pyx_PyLong_From_int(__pyx_v_7questdb_7_client__SCHEMA_OVERRIDE_BINARY); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8488, __pyx_L39_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_16 = __Pyx_PyObject_CompareBoolNe_object_int(__pyx_t_12, __pyx_t_11, Py_NE); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 8488, __pyx_L39_error)
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 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;
 08489: 
+08490:     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;
  }
+08491:         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, 8491, __pyx_L1_error)
  if (!__pyx_t_7) {

  } else {

    __pyx_t_16 = __pyx_t_7;

    goto __pyx_L45_bool_binop_done;
  }
+08492:         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, 8492, __pyx_L1_error)

  __pyx_t_16 = __pyx_t_7;

  __pyx_L45_bool_binop_done:;
  __pyx_v_can_slice = __pyx_t_16;
 08493: 
+08494:     b = qdb_pystr_buf_new()
  __pyx_v_b = qdb_pystr_buf_new();
+08495:     memset(&c_schema, 0, sizeof(ArrowSchema))
  (void)(memset((&__pyx_v_c_schema), 0, (sizeof(struct ArrowSchema))));
+08496:     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_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:;
  }
+08497:         try:
      /*try:*/ {
+08498:             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, 8498, __pyx_L55_error)

+08499:             if at_is_column:
        if (__pyx_v_at_is_column) {
/* … */
        }
+08500:                 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, 8500, __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, 8500, __pyx_L55_error)
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

+08501:                 c_ts_column_ptr = &c_ts_column
          __pyx_v_c_ts_column_ptr = (&__pyx_v_c_ts_column);
 08502: 
+08503:             if merged_overrides is not None:
        __pyx_t_16 = (__pyx_v_merged_overrides != Py_None);
        if (__pyx_t_16) {
/* … */
        }
+08504:                 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, 8504, __pyx_L55_error)
          __pyx_v_c_overrides_len = __pyx_t_14;
+08505:                 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))));
 08506:                     c_overrides_len, sizeof(qwp_arrow_override))
+08507:                 if c_overrides == NULL:
          __pyx_t_16 = (__pyx_v_c_overrides == NULL);

          if (unlikely(__pyx_t_16)) {
/* … */
          }
+08508:                     raise MemoryError()
            PyErr_NoMemory(); __PYX_ERR(0, 8508, __pyx_L55_error)
+08509:                 for i in range(c_overrides_len):
          __pyx_t_9 = __pyx_v_c_overrides_len;
          __pyx_t_20 = __pyx_t_9;

          for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_20; __pyx_t_21+=1) {
            __pyx_v_i = __pyx_t_21;
+08510:                     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, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8510, __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, 8510, __pyx_L55_error)
              }
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              if (likely(PyTuple_CheckExact(sequence))) {
                __pyx_t_10 = PyTuple_GET_ITEM(sequence, 0);
                __Pyx_INCREF(__pyx_t_10);
                __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1);
                __Pyx_INCREF(__pyx_t_1);
                __pyx_t_11 = PyTuple_GET_ITEM(sequence, 2);
                __Pyx_INCREF(__pyx_t_11);
              } else {
                __pyx_t_10 = __Pyx_PyList_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
                if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8510, __pyx_L55_error)
                __Pyx_XGOTREF(__pyx_t_10);
                __pyx_t_1 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
                if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8510, __pyx_L55_error)
                __Pyx_XGOTREF(__pyx_t_1);
                __pyx_t_11 = __Pyx_PyList_GET_ITEM_REF(sequence, 2, __Pyx_ReferenceSharing_SharedReference);
                if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8510, __pyx_L55_error)
                __Pyx_XGOTREF(__pyx_t_11);
              }
              #else
              __pyx_t_10 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8510, __pyx_L55_error)
              __Pyx_GOTREF(__pyx_t_10);
              __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8510, __pyx_L55_error)
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_11 = __Pyx_PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8510, __pyx_L55_error)
              __Pyx_GOTREF(__pyx_t_11);
              #endif
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            } else {
              Py_ssize_t index = -1;
              __pyx_t_12 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8510, __pyx_L55_error)
              __Pyx_GOTREF(__pyx_t_12);
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
              __pyx_t_22 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_12);
              index = 0; __pyx_t_10 = __pyx_t_22(__pyx_t_12); if (unlikely(!__pyx_t_10)) goto __pyx_L62_unpacking_failed;
              __Pyx_GOTREF(__pyx_t_10);
              index = 1; __pyx_t_1 = __pyx_t_22(__pyx_t_12); if (unlikely(!__pyx_t_1)) goto __pyx_L62_unpacking_failed;
              __Pyx_GOTREF(__pyx_t_1);
              index = 2; __pyx_t_11 = __pyx_t_22(__pyx_t_12); if (unlikely(!__pyx_t_11)) goto __pyx_L62_unpacking_failed;
              __Pyx_GOTREF(__pyx_t_11);
              if (__Pyx_IternextUnpackEndCheck(__pyx_t_22(__pyx_t_12), 3) < (0)) __PYX_ERR(0, 8510, __pyx_L55_error)
              __pyx_t_22 = NULL;
              __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
              goto __pyx_L63_unpacking_done;
              __pyx_L62_unpacking_failed:;
              __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
              __pyx_t_22 = NULL;
              if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
              __PYX_ERR(0, 8510, __pyx_L55_error)
              __pyx_L63_unpacking_done:;
            }
            __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8510, __pyx_L55_error)
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_23 = __Pyx_PyLong_As_int(__pyx_t_11); if (unlikely((__pyx_t_23 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8510, __pyx_L55_error)
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_XDECREF_SET(__pyx_v_name_bytes, __pyx_t_10);
            __pyx_t_10 = 0;
            __pyx_v_kind_int = __pyx_t_6;
            __pyx_v_arg_int = __pyx_t_23;
+08511:                     c_overrides[i].column = PyBytes_AsString(name_bytes)
            __pyx_t_24 = PyBytes_AsString(__pyx_v_name_bytes); if (unlikely(__pyx_t_24 == ((void *)NULL))) __PYX_ERR(0, 8511, __pyx_L55_error)
            (__pyx_v_c_overrides[__pyx_v_i]).column = __pyx_t_24;
+08512:                     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);
+08513:                     c_overrides[i].kind = <uint32_t>kind_int
            (__pyx_v_c_overrides[__pyx_v_i]).kind = ((uint32_t)__pyx_v_kind_int);
+08514:                     c_overrides[i].arg = <uint32_t>arg_int
            (__pyx_v_c_overrides[__pyx_v_i]).arg = ((uint32_t)__pyx_v_arg_int);
          }

 08515: 
+08516:             _ensure_doesnt_have_gil(&gs)
        (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+08517:             conn = _direct_conn_open(src, budget_ms, &err)
        __pyx_v_conn = __pyx_f_7questdb_7_client__direct_conn_open(__pyx_v_src, __pyx_v_budget_ms, (&__pyx_v_err));
+08518:             _ensure_has_gil(&gs)
        __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+08519:             if conn == NULL:
        __pyx_t_16 = (__pyx_v_conn == NULL);

        if (unlikely(__pyx_t_16)) {
/* … */
        }
+08520:                 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, 8520, __pyx_L55_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, 8520, __pyx_L55_error)
 08521: 
+08522:             try:
        {
          /*try:*/ {
/* … */
          }
          __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;
          goto __pyx_L70_try_end;
          __pyx_L65_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_8); __pyx_t_8 = 0;
/* … */
          __pyx_L67_except_error:;
          __Pyx_XGIVEREF(__pyx_t_25);
          __Pyx_XGIVEREF(__pyx_t_26);
          __Pyx_XGIVEREF(__pyx_t_27);
          __Pyx_ExceptionReset(__pyx_t_25, __pyx_t_26, __pyx_t_27);
          goto __pyx_L55_error;
          __pyx_L70_try_end:;
        }
      }
+08523:                 if not can_slice:
            __pyx_t_16 = (!__pyx_v_can_slice);

            if (__pyx_t_16) {
/* … */
              goto __pyx_L71;
            }
 08524:                     # A one-shot stream (e.g. RecordBatchReader) cannot be
 08525:                     # re-exported for a whole-frame replay: a failed attempt
 08526:                     # must surface instead of retrying with the drained rest.
+08527:                     nonreplayable_consumed[0] = True
              (__pyx_v_nonreplayable_consumed[0]) = 1;
+08528:                     _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, 8528, __pyx_L65_error)

 08529:                         conn, sliceable, c_table_name, c_ts_column_ptr,
 08530:                         at_scalar_set, at_scalar_nanos,
 08531:                         &c_schema, c_overrides, c_overrides_len,
 08532:                         &any_flushed, &deferred_since_sync,
 08533:                         may_have_committed_prefix, max_rows_per_batch, False,
 08534:                         binary_names, unlabelled)
 08535:                 else:
+08536:                     offset = 0
            /*else*/ {
              __pyx_v_offset = 0;
+08537:                     while offset < total_rows:
              while (1) {
                __pyx_t_16 = (__pyx_v_offset < __pyx_v_total_rows);


                if (!__pyx_t_16) break;
+08538:                         chunk_rows = max_rows_per_batch
                __pyx_v_chunk_rows = __pyx_v_max_rows_per_batch;
+08539:                         if chunk_rows > total_rows - offset:
                __pyx_t_16 = (__pyx_v_chunk_rows > (__pyx_v_total_rows - __pyx_v_offset));

                if (__pyx_t_16) {
/* … */
                }
+08540:                             chunk_rows = total_rows - offset
                  __pyx_v_chunk_rows = (__pyx_v_total_rows - __pyx_v_offset);
+08541:                         if first_batch is not None:
                __pyx_t_16 = (__pyx_v_first_batch != Py_None);
                if (__pyx_t_16) {
/* … */
                  goto __pyx_L75;
                }
+08542:                             row_slice = first_batch
                  __Pyx_INCREF(__pyx_v_first_batch);
                  __Pyx_DECREF_SET(__pyx_v_row_slice, __pyx_v_first_batch);
+08543:                             first_batch = None
                  __Pyx_INCREF(Py_None);
                  __Pyx_DECREF_SET(__pyx_v_first_batch, Py_None);
 08544:                         else:
+08545:                             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, 8545, __pyx_L65_error)
                  __Pyx_GOTREF(__pyx_t_8);
                  __Pyx_DECREF_SET(__pyx_v_row_slice, __pyx_t_8);
                  __pyx_t_8 = 0;
                }
                __pyx_L75:;
 08546:                                 sliceable, offset, chunk_rows)
+08547:                         _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, 8547, __pyx_L65_error)

 08548:                             conn, row_slice, c_table_name, c_ts_column_ptr,
 08549:                             at_scalar_set, at_scalar_nanos,
 08550:                             &c_schema, c_overrides, c_overrides_len,
 08551:                             &any_flushed, &deferred_since_sync,
 08552:                             may_have_committed_prefix, max_rows_per_batch, True,
 08553:                             binary_names, unlabelled)
+08554:                         offset += chunk_rows
                __pyx_v_offset = (__pyx_v_offset + __pyx_v_chunk_rows);
              }
            }
            __pyx_L71:;
+08555:                 if any_flushed:
            if (__pyx_v_any_flushed) {
/* … */
            }
+08556:                     _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, 8556, __pyx_L65_error)

+08557:             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_11, &__pyx_t_1) < 0) __PYX_ERR(0, 8557, __pyx_L67_except_error)
            __Pyx_XGOTREF(__pyx_t_8);
            __Pyx_XGOTREF(__pyx_t_11);
            __Pyx_XGOTREF(__pyx_t_1);
+08558:                 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);
 08559:                     conn, any_flushed)
+08560:                 raise
            __Pyx_GIVEREF(__pyx_t_8);
            __Pyx_GIVEREF(__pyx_t_11);
            __Pyx_XGIVEREF(__pyx_t_1);
            __Pyx_ErrRestoreWithState(__pyx_t_8, __pyx_t_11, __pyx_t_1);
            __pyx_t_8 = 0;  __pyx_t_11 = 0;  __pyx_t_1 = 0; 
            __PYX_ERR(0, 8560, __pyx_L67_except_error)
          }
 08561:         finally:
+08562:             _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));
+08563:             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) {
/* … */
            }
+08564:                 with nogil:
            {
                PyThreadState * _save;
                _save = PyEval_SaveThread();
                __Pyx_FastGIL_Remember();
                /*try:*/ {
/* … */
                /*finally:*/ {
                  /*normal exit:*/{
                    __Pyx_FastGIL_Forget();
                    PyEval_RestoreThread(_save);
                    goto __pyx_L82;
                  }
                  __pyx_L82:;
                }
            }
/* … */
              {
                  PyThreadState * _save;
                  _save = PyEval_SaveThread();
                  __Pyx_FastGIL_Remember();
                  /*try:*/ {
/* … */
                  /*finally:*/ {
                    /*normal exit:*/{
                      __Pyx_FastGIL_Forget();
                      PyEval_RestoreThread(_save);
                      goto __pyx_L91;
                    }
                    __pyx_L91:;
                  }
              }
+08565:                     _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);
                  }
+08566:             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) {
/* … */
            }
+08567:                 c_schema.release(&c_schema)
            __pyx_v_c_schema.release((&__pyx_v_c_schema));
/* … */
              __pyx_v_c_schema.release((&__pyx_v_c_schema));
+08568:             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) {
/* … */
            }
+08569:                 free(c_overrides)
            free(__pyx_v_c_overrides);
/* … */
              free(__pyx_v_c_overrides);
+08570:             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_27 = 0; __pyx_t_26 = 0; __pyx_t_25 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0; __pyx_t_31 = 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_8); __pyx_t_8 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_29, &__pyx_t_30, &__pyx_t_31);
          if ( unlikely(__Pyx_GetException(&__pyx_t_27, &__pyx_t_26, &__pyx_t_25) < 0)) __Pyx_ErrFetch(&__pyx_t_27, &__pyx_t_26, &__pyx_t_25);
          __Pyx_XGOTREF(__pyx_t_27);
          __Pyx_XGOTREF(__pyx_t_26);
          __Pyx_XGOTREF(__pyx_t_25);
          __Pyx_XGOTREF(__pyx_t_29);
          __Pyx_XGOTREF(__pyx_t_30);
          __Pyx_XGOTREF(__pyx_t_31);
          __pyx_t_23 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_28 = __pyx_filename;
          {
/* … */
            __pyx_t_16 = (__pyx_v_b != NULL);

            if (__pyx_t_16) {
/* … */
            }
          }
          __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_27);
          __Pyx_XGIVEREF(__pyx_t_26);
          __Pyx_XGIVEREF(__pyx_t_25);
          __Pyx_ErrRestore(__pyx_t_27, __pyx_t_26, __pyx_t_25);
          __pyx_t_27 = 0; __pyx_t_26 = 0; __pyx_t_25 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0; __pyx_t_31 = 0;
          __pyx_lineno = __pyx_t_23; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_28;
          goto __pyx_L48_error;
        }
        __pyx_L56:;
      }
+08571:                 qdb_pystr_buf_free(b)
            qdb_pystr_buf_free(__pyx_v_b);
/* … */
              qdb_pystr_buf_free(__pyx_v_b);
+08572:     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_1, &__pyx_t_11, &__pyx_t_8) < 0) __PYX_ERR(0, 8572, __pyx_L50_except_error)
      __Pyx_XGOTREF(__pyx_t_1);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_8);
 08573:         # A batch that went out may have created the table with these
 08574:         # columns as BINARY, so a failed write still reports them, once
 08575:         # its connection is closed. The write's own error is the one the
 08576:         # caller needs, so a handler that raises is not let replace it.
+08577:         if any_flushed:
      if (__pyx_v_any_flushed) {
/* … */
      }
+08578:             try:
        {
          /*try:*/ {
/* … */
          }
          __Pyx_XDECREF(__pyx_t_31); __pyx_t_31 = 0;
          __Pyx_XDECREF(__pyx_t_30); __pyx_t_30 = 0;
          __Pyx_XDECREF(__pyx_t_29); __pyx_t_29 = 0;
          goto __pyx_L105_try_end;
          __pyx_L98_error:;
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
/* … */
          __pyx_L100_except_error:;
          __Pyx_XGIVEREF(__pyx_t_31);
          __Pyx_XGIVEREF(__pyx_t_30);
          __Pyx_XGIVEREF(__pyx_t_29);
          __Pyx_ExceptionReset(__pyx_t_31, __pyx_t_30, __pyx_t_29);
          goto __pyx_L50_except_error;
          __pyx_L99_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_31);
          __Pyx_XGIVEREF(__pyx_t_30);
          __Pyx_XGIVEREF(__pyx_t_29);
          __Pyx_ExceptionReset(__pyx_t_31, __pyx_t_30, __pyx_t_29);
          __pyx_L105_try_end:;
        }
+08579:                 _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, 8579, __pyx_L98_error)

+08580:             except Exception:
          __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
          if (__pyx_t_6) {
            __Pyx_ErrRestore(0,0,0);
            goto __pyx_L99_exception_handled;
          }
          goto __pyx_L100_except_error;
 08581:                 pass
+08582:         raise
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_11, __pyx_t_8);
      __pyx_t_1 = 0;  __pyx_t_11 = 0;  __pyx_t_8 = 0; 
      __PYX_ERR(0, 8582, __pyx_L50_except_error)
    }
    goto __pyx_L50_except_error;
 08583:     # Only once the write has gone through and its connection is closed,
 08584:     # so a logging handler cannot re-enter a write in progress.
+08585:     _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, 8585, __pyx_L1_error)

+08586:     return True
  {

    __pyx_r = 1;
  }
  goto __pyx_L0;
 08587: 
 08588: 
+08589: 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_8);
  __Pyx_XDECREF(__pyx_t_9);
  __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;
}
 08590:         direct_conn_source_t* src,
 08591:         uint64_t budget_ms,
 08592:         qdb_pystr_buf* b,
 08593:         dataframe_plan_t* plan,
 08594:         object df,
 08595:         object table_name,
 08596:         object table_name_col,
 08597:         object symbols,
 08598:         object at,
 08599:         size_t max_rows_per_batch,
 08600:         bint* may_have_committed_prefix) except -1:
+08601:     cdef qwp_chunk* chunk = NULL
  __pyx_v_chunk = NULL;
+08602:     cdef qwp_direct_sender* conn = NULL
  __pyx_v_conn = NULL;
+08603:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+08604:     cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+08605:     cdef bint flushed = False
  __pyx_v_flushed = 0;
+08606:     cdef bint force_drop_conn = False
  __pyx_v_force_drop_conn = 0;
 08607:     cdef size_t rows_per_chunk
 08608:     cdef size_t row_offset
 08609:     cdef size_t chunk_rows
+08610:     try:
  /*try:*/ {
+08611:         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, 8611, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_df, __pyx_t_1);
    __pyx_t_1 = 0;
+08612:         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, 8612, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_df, __pyx_t_1);
    __pyx_t_1 = 0;
+08613:         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, 8613, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_df, __pyx_t_1);
    __pyx_t_1 = 0;
+08614:         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, 8614, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_df, __pyx_t_1);
    __pyx_t_1 = 0;
+08615:         _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, 8615, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

 08616:             b,
 08617:             df,
 08618:             table_name,
 08619:             table_name_col,
 08620:             symbols,
 08621:             at,
 08622:             plan,
+08623:             _FIELD_TARGETS_QWP)
    __pyx_t_1 = __pyx_v_7questdb_7_client__FIELD_TARGETS_QWP;
    __Pyx_INCREF(__pyx_t_1);
+08624:         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) {
/* … */
    }
+08625:             return 0
      {

        __pyx_r = 0;
      }
      goto __pyx_L3_return;
 08626: 
+08627:         _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, 8627, __pyx_L4_error)

+08628:         _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, 8628, __pyx_L4_error)

+08629:         _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, 8629, __pyx_L4_error)

+08630:         _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, 8630, __pyx_L4_error)

+08631:         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);
 08632:             plan, max_rows_per_batch)
 08633: 
+08634:         _ensure_doesnt_have_gil(&gs)
    (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+08635:         conn = _direct_conn_open(src, budget_ms, &err)
    __pyx_v_conn = __pyx_f_7questdb_7_client__direct_conn_open(__pyx_v_src, __pyx_v_budget_ms, (&__pyx_v_err));
+08636:         _ensure_has_gil(&gs)
    __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+08637:         if conn == NULL:
    __pyx_t_3 = (__pyx_v_conn == NULL);

    if (unlikely(__pyx_t_3)) {
/* … */
    }
+08638:             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, 8638, __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, 8638, __pyx_L4_error)
 08639: 
+08640:         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));
 08641:             plan.c_table_name.buf,
 08642:             plan.c_table_name.len,
 08643:             &err)
+08644:         if chunk == NULL:
    __pyx_t_3 = (__pyx_v_chunk == NULL);

    if (unlikely(__pyx_t_3)) {
/* … */
    }
+08645:             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, 8645, __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, 8645, __pyx_L4_error)
+08646:         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_L16_try_end;
      __pyx_L11_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
      __pyx_L13_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_L4_error;
      __pyx_L16_try_end:;
    }
+08647:             row_offset = 0
        __pyx_v_row_offset = 0;
+08648:             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;
+08649:                 if not qwp_chunk_clear(chunk, &err):
          __pyx_t_3 = (!qwp_chunk_clear(__pyx_v_chunk, (&__pyx_v_err)));

          if (unlikely(__pyx_t_3)) {
/* … */
          }
+08650:                     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, 8650, __pyx_L11_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, 8650, __pyx_L11_error)
+08651:                 chunk_rows = rows_per_chunk
          __pyx_v_chunk_rows = __pyx_v_rows_per_chunk;
+08652:                 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) {
/* … */
          }
+08653:                     chunk_rows = plan.row_count - row_offset
            __pyx_v_chunk_rows = (__pyx_v_plan->row_count - __pyx_v_row_offset);
+08654:                 _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, 8654, __pyx_L11_error)

 08655:                     plan,
 08656:                     chunk,
 08657:                     row_offset,
 08658:                     chunk_rows)
+08659:                 _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, 8659, __pyx_L11_error)

 08660:                     conn,
 08661:                     chunk,
 08662:                     True,
 08663:                     may_have_committed_prefix)
+08664:                 flushed = True
          __pyx_v_flushed = 1;
+08665:                 row_offset += chunk_rows
          __pyx_v_row_offset = (__pyx_v_row_offset + __pyx_v_chunk_rows);
        }
 08666: 
+08667:             _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, 8667, __pyx_L11_error)

+08668:         except:
      /*except:*/ {
        __Pyx_AddTraceback("questdb._client._dataframe_numpy_publish", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_8, &__pyx_t_9) < 0) __PYX_ERR(0, 8668, __pyx_L13_except_error)
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_9);
+08669:             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);
 08670:                 conn, flushed)
+08671:             raise
        __Pyx_GIVEREF(__pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_8, __pyx_t_9);
        __pyx_t_1 = 0;  __pyx_t_8 = 0;  __pyx_t_9 = 0; 
        __PYX_ERR(0, 8671, __pyx_L13_except_error)
      }
 08672: 
+08673:         return 0
    {

      __pyx_r = 0;
    }
    goto __pyx_L3_return;
  }
 08674:     finally:
+08675:         _ensure_has_gil(&gs)
  /*finally:*/ {
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_5 = 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_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
      if ( unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_15);
      __pyx_t_10 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_12 = __pyx_filename;
      {
        __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
/* … */
      __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+08676:         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) {
/* … */
      }
+08677:             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:;
              }
          }
/* … */
        {
            PyThreadState * _save;
            _save = PyEval_SaveThread();
            __Pyx_FastGIL_Remember();
            /*try:*/ {
/* … */
            /*finally:*/ {
              /*normal exit:*/{
                __Pyx_FastGIL_Forget();
                PyEval_RestoreThread(_save);
                goto __pyx_L33;
              }
              __pyx_L33:;
            }
        }
+08678:                 _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);
            }
+08679:         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) {
/* … */
      }
+08680:             qwp_chunk_free(chunk)
          qwp_chunk_free(__pyx_v_chunk);
/* … */
        qwp_chunk_free(__pyx_v_chunk);
 08681:         # The plan is rebuilt on each failover attempt; release this
 08682:         # attempt's plan so a re-send starts from a blank plan.
+08683:         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);
+08684:         plan[0] = dataframe_plan_blank()
        (__pyx_v_plan[0]) = __pyx_f_7questdb_7_client_dataframe_plan_blank();
      }
      __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_7);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_ErrRestore(__pyx_t_7, __pyx_t_6, __pyx_t_5);
      __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_5 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0;
      __pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_12;
      goto __pyx_L1_error;
    }
    __pyx_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;
    }
  }
 08685: 
 08686: 
+08687: 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) {
  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;
  PyObject *__pyx_v_validated_overrides = 0;
  int64_t __pyx_v_at_micros;
  PyObject *__pyx_v_ve = NULL;
  PyObject *__pyx_v_exc = 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_XDECREF(__pyx_t_30);
  __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_df);

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08688:         direct_conn_source_t* src,
 08689:         double reconnect_max_s,
 08690:         qdb_pystr_buf* b,
 08691:         dataframe_plan_t* plan,
 08692:         object df,
 08693:         object table_name,
 08694:         object table_name_col,
 08695:         object symbols,
 08696:         object at,
 08697:         size_t max_rows_per_batch,
 08698:         object schema_overrides) except -1:
+08699:     cdef uint64_t budget_ms = 0
  __pyx_v_budget_ms = 0;
+08700:     cdef double deadline = 0.0
  __pyx_v_deadline = 0.0;
+08701:     cdef double remaining = 0.0
  __pyx_v_remaining = 0.0;
+08702:     cdef bint may_have_committed_prefix = False
  __pyx_v_may_have_committed_prefix = 0;
+08703:     cdef bint nonreplayable_consumed = False
  __pyx_v_nonreplayable_consumed = 0;
+08704:     cdef bint call_in_doubt = False
  __pyx_v_call_in_doubt = 0;
+08705:     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, 8705, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_validated_overrides = __pyx_t_1;
  __pyx_t_1 = 0;
 08706:         schema_overrides)
+08707:     if max_rows_per_batch <= 0:
  __pyx_t_2 = (__pyx_v_max_rows_per_batch <= 0);

  if (unlikely(__pyx_t_2)) {
/* … */
  }
+08708:         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, 8708, __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, 8708, __pyx_L1_error)
+08709:     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)) {
/* … */
  }
+08710:         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, 8710, __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, 8710, __pyx_L1_error)
 08711:             'Can specify only one of `table_name` or `table_name_col`.')
+08712:     if table_name_col is not None:
  __pyx_t_2 = (__pyx_v_table_name_col != Py_None);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
 08713:         # This path writes one table per call, so it has nowhere to put
 08714:         # a table-name column. The check runs before the planner looks
 08715:         # at any column, so the error always says the same thing. Later
 08716:         # on, a column the planner cannot type by itself — a 32-byte
 08717:         # binary with no type claim, say — would raise first and point
 08718:         # at the wrong problem.
+08719:         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, 8719, __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, 8719, __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, 8719, __pyx_L1_error)
 08720:             'QWP column ingestion writes one table per call and does '
 08721:             'not accept `table_name_col`. That is QuestDB.dataframe() '
 08722:             'and Sender.dataframe() over ws:: / wss::. Split the frame '
 08723:             'on that column and make one call per table, e.g. '
 08724:             "`for name, group in df.groupby('tbl'): "
 08725:             "dataframe(group.drop(columns='tbl'), table_name=name, "
 08726:             "at='ts')`. Those calls take `symbols` and "
 08727:             "`schema_overrides` and read `df.attrs['questdb']`, so "
 08728:             'LONG256 and the other column types work as normal. '
 08729:             'Sender.dataframe() over tcp:: / http:: does accept '
 08730:             '`table_name_col`: it serializes row by row, so it can '
 08731:             'change table between rows.')
+08732:     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, 8732, __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, 8732, __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, 8732, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (__pyx_t_2) {
/* … */
  }
+08733:         if at != at:
    __pyx_t_2 = __Pyx_PyObject_CompareBoolNe_object_object(__pyx_v_at, __pyx_v_at, Py_NE); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8733, __pyx_L1_error)
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+08734:             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, 8734, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
+08735:                 QuestDBErrorCode.InvalidTimestamp,
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8735, __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, 8735, __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, 8734, __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, 8734, __pyx_L1_error)
 08736:                 'Bad argument `at`: NaT is not a valid timestamp.')
+08737:         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:;
    }
+08738:             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, 8738, __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, 8738, __pyx_L10_error)
        __pyx_v_at_micros = __pyx_t_12;
+08739:         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, 8739, __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;
+08740:             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, 8740, __pyx_L21_error)
          __Pyx_GOTREF(__pyx_t_14);
+08741:                 QuestDBErrorCode.InvalidTimestamp,
          __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 8741, __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, 8741, __pyx_L21_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+08742:                 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, 8742, __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, 8742, __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, 8740, __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, 8740, __pyx_L21_error)
        }
+08743:         if at_micros < 0:
    __pyx_t_2 = (__pyx_v_at_micros < 0);

    if (unlikely(__pyx_t_2)) {
/* … */
    }
+08744:             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, 8744, __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, 8744, __pyx_L1_error)
 08745:                 'Bad argument `at`: Cannot use a datetime before the '
 08746:                 'Unix epoch (1970-01-01 00:00:00).')
+08747:     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)) {
/* … */
  }
 08748:             at,
+08749:             (str, ServerTimestampType, TimestampNanos,
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_ServerTimestampType); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8749, __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;
  }
+08750:              datetime.datetime)) and not (
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8750, __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, 8750, __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:;
+08751:             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:;
+08752:         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, 8752, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
+08753:             QuestDBErrorCode.InvalidTimestamp,
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8753, __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, 8753, __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, 8752, __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, 8752, __pyx_L1_error)
 08754:             'dataframe() requires `at` to be the designated timestamp '
 08755:             'column (by name or index), a fixed timestamp shared by every '
 08756:             'row (TimestampNanos / datetime), or the explicit '
 08757:             '`ServerTimestamp` sentinel to let the server assign each '
 08758:             'row\'s timestamp on arrival.')
 08759:     # Once per call, ahead of the retry loop below, so a reconnect does
 08760:     # not repeat it.
+08761:     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, 8761, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF_SET(__pyx_v_df, __pyx_t_8);
  __pyx_t_8 = 0;
+08762:     _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, 8762, __pyx_L1_error)

 08763:     # Ahead of the choice between the Arrow and the NumPy route, so both
 08764:     # see the same signed GEOHASH columns.
+08765:     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, 8765, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF_SET(__pyx_v_df, __pyx_t_8);
  __pyx_t_8 = 0;
 08766:     # A zero budget (standalone from-conf source) makes a single attempt:
 08767:     # a transient failure surfaces immediately rather than re-dialling.
+08768:     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, 8768, __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, 8768, __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, 8768, __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, 8768, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_3 = __Pyx_PyNumber_Add_object_float(__pyx_t_8, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8768, __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, 8768, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_deadline = __pyx_t_29;
+08769:     while True:
  while (1) {
 08770:         # Reclaim string storage from a prior attempt's released plan.
+08771:         qdb_pystr_buf_clear(b)
    qdb_pystr_buf_clear(__pyx_v_b);
+08772:         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_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);
    }
  }
+08773:             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, 8773, __pyx_L39_error)
        if (__pyx_t_2) {
/* … */
        }
 08774:                     src,
 08775:                     budget_ms,
 08776:                     df,
 08777:                     table_name,
 08778:                     symbols,
 08779:                     at,
 08780:                     max_rows_per_batch,
 08781:                     validated_overrides,
 08782:                     &may_have_committed_prefix,
 08783:                     &nonreplayable_consumed):
+08784:                 return 0
          {

            __pyx_r = 0;
          }
          goto __pyx_L43_try_return;
+08785:             if validated_overrides is not None:
        __pyx_t_2 = (__pyx_v_validated_overrides != Py_None);
        if (unlikely(__pyx_t_2)) {
/* … */
        }
+08786:                 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, 8786, __pyx_L39_error)
          __Pyx_GOTREF(__pyx_t_8);
+08787:                     _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, 8787, __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, 8786, __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, 8786, __pyx_L39_error)
+08788:             _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, 8788, __pyx_L39_error)

 08789:                 src, budget_ms, b, plan, df, table_name,
 08790:                 table_name_col, symbols, at, max_rows_per_batch,
 08791:                 &may_have_committed_prefix)
+08792:             return 0
        {

          __pyx_r = 0;
        }
        goto __pyx_L43_try_return;
+08793:         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, 8793, __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, 8793, __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_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_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_30); __pyx_t_30 = 0;
            __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
            __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 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_13 = __pyx_clineno; __pyx_t_19 = __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_13; __pyx_filename = __pyx_t_19;
            goto __pyx_L41_except_error;
          }
          __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;
      }
      goto __pyx_L41_except_error;
 08794:             # Aggregate at the DataFrame boundary, including validation and
 08795:             # stream errors after earlier successful batches. The native flag
 08796:             # describes the failed flush; only this driver knows the source's
 08797:             # publication history across checkpoints and connections.
+08798:             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, 8798, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_27 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_27 < 0))) __PYX_ERR(0, 8798, __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_L56_bool_binop_done;
          }

          __pyx_t_2 = __pyx_v_may_have_committed_prefix;
          __pyx_L56_bool_binop_done:;
          __pyx_v_call_in_doubt = __pyx_t_2;
 08799: 
 08800:             # Select the one-shot guidance before the delivery-risk gate so a
 08801:             # caller sees both facts when both apply. A drained stream cannot
 08802:             # be replayed even when duplicate delivery is not in doubt.
+08803:             if nonreplayable_consumed:
          if (__pyx_v_nonreplayable_consumed) {
/* … */
          }
+08804:                 if call_in_doubt:
            if (unlikely(__pyx_v_call_in_doubt)) {
/* … */
            }
+08805:                     raise QuestDBError(
              __pyx_t_1 = NULL;
              __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8805, __pyx_L54_error)
              __Pyx_GOTREF(__pyx_t_17);
+08806:                         exc.code,
              __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 8806, __pyx_L54_error)
              __Pyx_GOTREF(__pyx_t_16);
+08807:                         f'{exc} A prefix of this DataFrame call may have '
              __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8807, __pyx_L54_error)
              __Pyx_GOTREF(__pyx_t_7);
              __pyx_t_15 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_A_prefix_of_this_DataFrame_call); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 8807, __pyx_L54_error)
              __Pyx_GOTREF(__pyx_t_15);
              __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 08808:                         f'committed, and the input stream was already '
 08809:                         f'partially consumed and cannot be replayed. Create '
 08810:                         f'a fresh reader, then reconcile or deduplicate any '
 08811:                         f'already committed rows before retrying.',
+08812:                         exc.sender_error,
              __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_sender_error); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8812, __pyx_L54_error)
              __Pyx_GOTREF(__pyx_t_7);
+08813:                         in_doubt=True) from exc
              __pyx_t_4 = 1;
              #if CYTHON_UNPACK_METHODS
              if (unlikely(PyMethod_Check(__pyx_t_17))) {
                __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_17);
                assert(__pyx_t_1);
                PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_17);
                __Pyx_INCREF(__pyx_t_1);
                __Pyx_INCREF(__pyx__function);
                __Pyx_DECREF_SET(__pyx_t_17, __pyx__function);
                __pyx_t_4 = 0;
              }
              #endif
              {
                PyObject *__pyx_callargs[5] = {__pyx_t_1, __pyx_t_16, __pyx_t_15, __pyx_t_7, Py_True};
                #if CYTHON_VECTORCALL
                __pyx_t_30 = __pyx_mstate_global->__pyx_tuple[23];
                if (unlikely(!__pyx_t_30)) __PYX_ERR(0, 8805, __pyx_L54_error)
                __Pyx_INCREF(__pyx_t_30);
                #else
                {
                  PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_in_doubt};
                  __pyx_t_30 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+4, 1);
                  if (unlikely(!__pyx_t_30)) __PYX_ERR(0, 8805, __pyx_L54_error)
                  __Pyx_GOTREF(__pyx_t_30);
                }
                #endif
                __pyx_t_6 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_17, __pyx_callargs+__pyx_t_4, (4-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_30);
                __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
                __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
                __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
                __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
                __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
                if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8805, __pyx_L54_error)
                __Pyx_GOTREF(__pyx_t_6);
              }
              __Pyx_Raise(__pyx_t_6, 0, 0, __pyx_v_exc);
              __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
              __PYX_ERR(0, 8805, __pyx_L54_error)
 08814:                 # A fresh reader helps only with a failure that a retry
 08815:                 # can get past. Anything else -- a column the route
 08816:                 # cannot carry, an override that does not apply -- fails
 08817:                 # the same way on any reader, so it goes out unchanged.
+08818:                 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, 8818, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_6);
/* … */
            __pyx_t_27 = __pyx_t_2;


            if (unlikely(__pyx_t_27)) {
/* … */
            }
+08819:                         QuestDBErrorCode.FailoverRetry,
            __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8819, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_17);
            __pyx_t_30 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_FailoverRetry); if (unlikely(!__pyx_t_30)) __PYX_ERR(0, 8819, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_30);
            __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
            __pyx_t_27 = __Pyx_PyObject_CompareBoolNe_object_object(__pyx_t_6, __pyx_t_30, Py_NE); if (unlikely((__pyx_t_27 < 0))) __PYX_ERR(0, 8818, __pyx_L54_error)
            __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
            if (__pyx_t_27) {

            } else {

              __pyx_t_2 = __pyx_t_27;

              goto __pyx_L61_bool_binop_done;
            }
+08820:                         QuestDBErrorCode.SocketError):
            __Pyx_GetModuleGlobalName(__pyx_t_30, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_30)) __PYX_ERR(0, 8820, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_30);
            __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_30, __pyx_mstate_global->__pyx_n_u_SocketError); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8820, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_17);
            __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
            __pyx_t_27 = __Pyx_PyObject_CompareBoolNe_object_object(__pyx_t_6, __pyx_t_17, Py_NE); if (unlikely((__pyx_t_27 < 0))) __PYX_ERR(0, 8818, __pyx_L54_error)
            __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;

            __pyx_t_2 = __pyx_t_27;

            __pyx_L61_bool_binop_done:;
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+08821:                     raise
              __Pyx_GIVEREF(__pyx_t_14);
              __Pyx_GIVEREF(__pyx_t_8);
              __Pyx_XGIVEREF(__pyx_t_3);
              __Pyx_ErrRestoreWithState(__pyx_t_14, __pyx_t_8, __pyx_t_3);
              __pyx_t_14 = 0;  __pyx_t_8 = 0;  __pyx_t_3 = 0; 
              __PYX_ERR(0, 8821, __pyx_L54_error)
+08822:                 raise QuestDBError(
            __pyx_t_17 = NULL;
            __Pyx_GetModuleGlobalName(__pyx_t_30, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_30)) __PYX_ERR(0, 8822, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_30);
+08823:                     exc.code,
            __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8823, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_7);
+08824:                     f'{exc} The input stream was already partially '
            __pyx_t_15 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 8824, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_15);
            __pyx_t_16 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_15, __pyx_mstate_global->__pyx_kp_u_The_input_stream_was_already_pa); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 8824, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_16);
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
 08825:                     f'consumed and cannot be replayed; retry with a '
 08826:                     f'fresh reader.',
+08827:                     exc.sender_error,
            __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_sender_error); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 8827, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_15);
+08828:                     in_doubt=False) from exc
            __pyx_t_4 = 1;
            #if CYTHON_UNPACK_METHODS
            if (unlikely(PyMethod_Check(__pyx_t_30))) {
              __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_30);
              assert(__pyx_t_17);
              PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_30);
              __Pyx_INCREF(__pyx_t_17);
              __Pyx_INCREF(__pyx__function);
              __Pyx_DECREF_SET(__pyx_t_30, __pyx__function);
              __pyx_t_4 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[5] = {__pyx_t_17, __pyx_t_7, __pyx_t_16, __pyx_t_15, Py_False};
              #if CYTHON_VECTORCALL
              __pyx_t_1 = __pyx_mstate_global->__pyx_tuple[23];
              if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8822, __pyx_L54_error)
              __Pyx_INCREF(__pyx_t_1);
              #else
              {
                PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_in_doubt};
                __pyx_t_1 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+4, 1);
                if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8822, __pyx_L54_error)
                __Pyx_GOTREF(__pyx_t_1);
              }
              #endif
              __pyx_t_6 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_30, __pyx_callargs+__pyx_t_4, (4-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_1);
              __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
              __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
              __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
              __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
              if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8822, __pyx_L54_error)
              __Pyx_GOTREF(__pyx_t_6);
            }
            __Pyx_Raise(__pyx_t_6, 0, 0, __pyx_v_exc);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __PYX_ERR(0, 8822, __pyx_L54_error)
 08829: 
 08830:             # Refuse a whole-source replay once any batch in this DataFrame
 08831:             # call may have committed. If only the Python sticky guard knows
 08832:             # about that prefix, widen the exposed error as well; otherwise a
 08833:             # caller could read `in_doubt=False` and manually repeat the same
 08834:             # unsafe replay.
+08835:             if call_in_doubt:
          if (__pyx_v_call_in_doubt) {
/* … */
          }
+08836:                 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, 8836, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_27 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_27 < 0))) __PYX_ERR(0, 8836, __pyx_L54_error)
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            if (unlikely(__pyx_t_27)) {
/* … */
            }
+08837:                     raise
              __Pyx_GIVEREF(__pyx_t_14);
              __Pyx_GIVEREF(__pyx_t_8);
              __Pyx_XGIVEREF(__pyx_t_3);
              __Pyx_ErrRestoreWithState(__pyx_t_14, __pyx_t_8, __pyx_t_3);
              __pyx_t_14 = 0;  __pyx_t_8 = 0;  __pyx_t_3 = 0; 
              __PYX_ERR(0, 8837, __pyx_L54_error)
+08838:                 raise QuestDBError(
            __pyx_t_30 = NULL;
            __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8838, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_1);
+08839:                     exc.code,
            __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 8839, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_15);
+08840:                     f'{exc} An earlier batch from this DataFrame call may '
            __pyx_t_16 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 8840, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_16);
            __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_16, __pyx_mstate_global->__pyx_kp_u_An_earlier_batch_from_this_Data); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8840, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 08841:                     f'have committed; replaying the original input from row '
 08842:                     f'zero may duplicate rows.',
+08843:                     exc.sender_error,
            __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_sender_error); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 8843, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_16);
+08844:                     in_doubt=True) from exc
            __pyx_t_4 = 1;
            #if CYTHON_UNPACK_METHODS
            if (unlikely(PyMethod_Check(__pyx_t_1))) {
              __pyx_t_30 = PyMethod_GET_SELF(__pyx_t_1);
              assert(__pyx_t_30);
              PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
              __Pyx_INCREF(__pyx_t_30);
              __Pyx_INCREF(__pyx__function);
              __Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
              __pyx_t_4 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[5] = {__pyx_t_30, __pyx_t_15, __pyx_t_7, __pyx_t_16, Py_True};
              #if CYTHON_VECTORCALL
              __pyx_t_17 = __pyx_mstate_global->__pyx_tuple[23];
              if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8838, __pyx_L54_error)
              __Pyx_INCREF(__pyx_t_17);
              #else
              {
                PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_in_doubt};
                __pyx_t_17 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+4, 1);
                if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8838, __pyx_L54_error)
                __Pyx_GOTREF(__pyx_t_17);
              }
              #endif
              __pyx_t_6 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_4, (4-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_17);
              __Pyx_XDECREF(__pyx_t_30); __pyx_t_30 = 0;
              __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
              __Pyx_DECREF(__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_1); __pyx_t_1 = 0;
              if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8838, __pyx_L54_error)
              __Pyx_GOTREF(__pyx_t_6);
            }
            __Pyx_Raise(__pyx_t_6, 0, 0, __pyx_v_exc);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __PYX_ERR(0, 8838, __pyx_L54_error)
 08845:             # Delivery status and retryability are independent. A local
 08846:             # validation error still requires the caller to correct its input.
+08847:             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, 8847, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_6);
/* … */
          __pyx_t_2 = __pyx_t_27;


          if (unlikely(__pyx_t_2)) {
/* … */
          }
+08848:                     QuestDBErrorCode.FailoverRetry,
          __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8848, __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, 8848, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_17);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_2 = __Pyx_PyObject_CompareBoolNe_object_object(__pyx_t_6, __pyx_t_17, Py_NE); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8847, __pyx_L54_error)
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          if (__pyx_t_2) {

          } else {

            __pyx_t_27 = __pyx_t_2;

            goto __pyx_L66_bool_binop_done;
          }
+08849:                     QuestDBErrorCode.SocketError):
          __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8849, __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, 8849, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __pyx_t_2 = __Pyx_PyObject_CompareBoolNe_object_object(__pyx_t_6, __pyx_t_1, Py_NE); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8847, __pyx_L54_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

          __pyx_t_27 = __pyx_t_2;

          __pyx_L66_bool_binop_done:;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+08850:                 raise
            __Pyx_GIVEREF(__pyx_t_14);
            __Pyx_GIVEREF(__pyx_t_8);
            __Pyx_XGIVEREF(__pyx_t_3);
            __Pyx_ErrRestoreWithState(__pyx_t_14, __pyx_t_8, __pyx_t_3);
            __pyx_t_14 = 0;  __pyx_t_8 = 0;  __pyx_t_3 = 0; 
            __PYX_ERR(0, 8850, __pyx_L54_error)
+08851:             remaining = deadline - time.monotonic()
          __pyx_t_6 = PyFloat_FromDouble(__pyx_v_deadline); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8851, __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, 8851, __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, 8851, __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, 8851, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_1);
          }
          __pyx_t_7 = __Pyx_PyNumber_Subtract_float_object(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8851, __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, 8851, __pyx_L54_error)
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_v_remaining = __pyx_t_29;
+08852:             if remaining <= 0.0:
          __pyx_t_2 = (__pyx_v_remaining <= 0.0);

          if (unlikely(__pyx_t_2)) {
/* … */
          }
+08853:                 raise
            __Pyx_GIVEREF(__pyx_t_14);
            __Pyx_GIVEREF(__pyx_t_8);
            __Pyx_XGIVEREF(__pyx_t_3);
            __Pyx_ErrRestoreWithState(__pyx_t_14, __pyx_t_8, __pyx_t_3);
            __pyx_t_14 = 0;  __pyx_t_8 = 0;  __pyx_t_3 = 0; 
            __PYX_ERR(0, 8853, __pyx_L54_error)
+08854:             budget_ms = <uint64_t>(remaining * 1000.0)
          __pyx_v_budget_ms = ((uint64_t)(__pyx_v_remaining * 1000.0));
        }
 08855: 
 08856: 
+08857: 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_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __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;
}
 08858:         qwp_direct_sender* conn,
 08859:         object stream_owner,
 08860:         line_sender_table_name c_table_name,
 08861:         line_sender_column_name* c_ts_column_ptr,
 08862:         bint at_scalar_set,
 08863:         int64_t at_scalar_nanos,
 08864:         ArrowSchema* c_schema,
 08865:         const qwp_arrow_override* c_overrides,
 08866:         size_t c_overrides_len,
 08867:         bint* any_flushed,
 08868:         size_t* deferred_since_sync,
 08869:         bint* may_have_committed_prefix,
 08870:         size_t max_rows_per_batch,
 08871:         bint can_slice,
 08872:         object binary_names,
 08873:         object unlabelled) except -1:
 08874:     cdef str hint
+08875:     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:;
  }
+08876:         _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, 8876, __pyx_L3_error)

 08877:             conn, stream_owner, c_table_name, c_ts_column_ptr,
 08878:             at_scalar_set, at_scalar_nanos, c_schema,
 08879:             c_overrides, c_overrides_len, any_flushed,
 08880:             deferred_since_sync, may_have_committed_prefix,
 08881:             binary_names, unlabelled)
+08882:     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, 8882, __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, 8882, __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_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_11); __pyx_t_11 = 0;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 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_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_9 = __pyx_lineno; __pyx_t_19 = __pyx_clineno; __pyx_t_20 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
          }
          __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_9; __pyx_clineno = __pyx_t_19; __pyx_filename = __pyx_t_20;
          goto __pyx_L5_except_error;
        }
      }
    }
    goto __pyx_L5_except_error;
+08883:         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, 8883, __pyx_L14_error)
        if (__pyx_t_10) {
/* … */
        }
+08884:             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, 8884, __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, 8884, __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, 8884, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_t_10 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_8, __pyx_t_12, Py_EQ); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 8884, __pyx_L14_error)
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          if (__pyx_t_10) {
/* … */
            goto __pyx_L17;
          }
 08885:                 # The core already split the chunk as far as it can: a single
 08886:                 # row (table schema plus one row's values) still exceeds the
 08887:                 # server's per-batch cap, so a smaller batch cannot help.
 08888:                 hint = (
+08889:                     '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;
 08890:                     '(max_buf_size / the server X-QWP-Max-Batch-Size); reduce '
 08891:                     'the size of individual values or raise the cap. '
 08892:                     '`max_rows_per_batch` does not bound a single row.')
+08893:             elif can_slice:
          if (__pyx_v_can_slice) {
/* … */
            goto __pyx_L17;
          }
 08894:                 hint = (
+08895:                     f'reduce `max_rows_per_batch` (current: '
            __pyx_t_14 = 50;
            #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
            __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13[1]);
            #endif
            __pyx_t_9 = 0;
            __pyx_t_8 = __Pyx_PyUnicode_Join(__pyx_t_13, 3, __pyx_t_14, __pyx_t_9);
            if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8895, __pyx_L14_error)
            __Pyx_GOTREF(__pyx_t_8);
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            __pyx_v_hint = ((PyObject*)__pyx_t_8);
            __pyx_t_8 = 0;
+08896:                     f'{max_rows_per_batch}) and retry.')
            __pyx_t_12 = __Pyx_PyUnicode_From_size_t(__pyx_v_max_rows_per_batch, 0, ' ', 'd'); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8896, __pyx_L14_error)
            __Pyx_GOTREF(__pyx_t_12);
            __pyx_t_13[0] = __pyx_mstate_global->__pyx_kp_u_reduce_max_rows_per_batch_curren;
            __pyx_t_13[1] = __pyx_t_12;
            __pyx_t_13[2] = __pyx_mstate_global->__pyx_kp_u_and_retry;
 08897:             else:
 08898:                 hint = (
+08899:                     f'this is a streaming Arrow source (e.g. '
          /*else*/ {
/* … */
            __pyx_t_14 = 255;
            #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
            __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13[1]);
            #endif
            __pyx_t_9 = 0;
            __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_13, 3, __pyx_t_14, __pyx_t_9);
            if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8899, __pyx_L14_error)
            __Pyx_GOTREF(__pyx_t_12);
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            __pyx_v_hint = ((PyObject*)__pyx_t_12);
            __pyx_t_12 = 0;
          }
          __pyx_L17:;
 08900:                     f'pa.RecordBatchReader); batch size is set by the '
 08901:                     f'producer and `max_rows_per_batch` (current: '
+08902:                     f'{max_rows_per_batch}) does not bound it. '
            __pyx_t_8 = __Pyx_PyUnicode_From_size_t(__pyx_v_max_rows_per_batch, 0, ' ', 'd'); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8902, __pyx_L14_error)
            __Pyx_GOTREF(__pyx_t_8);
            __pyx_t_13[0] = __pyx_mstate_global->__pyx_kp_u_this_is_a_streaming_Arrow_source;
            __pyx_t_13[1] = __pyx_t_8;
            __pyx_t_13[2] = __pyx_mstate_global->__pyx_kp_u_does_not_bound_it_Materialise_t;
 08903:                     f'Materialise to a `pa.Table` '
 08904:                     f'(`pa.Table.from_batches(reader)`) or re-batch '
 08905:                     f'at the source before passing.')
+08906:             raise QuestDBError(
          __pyx_t_8 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8906, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_11);
+08907:                 exc.code, f'{exc}\nHint: {hint}') from exc
          __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 8907, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_16 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 8907, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_16);
          __pyx_t_13[0] = __pyx_t_16;
          __pyx_t_13[1] = __pyx_mstate_global->__pyx_kp_u_Hint;
          __pyx_t_13[2] = __pyx_v_hint;
          __pyx_t_14 = 7;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13[0]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13[2]);
          #endif
          __pyx_t_9 = 0;
          #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
          __pyx_t_9 |= __Pyx_PyUnicode_KIND_04(__pyx_t_13[0]) | __Pyx_PyUnicode_KIND_04(__pyx_t_13[2]);
          #endif
          __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_13, 3, __pyx_t_14, __pyx_t_9);
          if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8907, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_17);
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          __pyx_t_18 = 1;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_11))) {
            __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_11);
            assert(__pyx_t_8);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11);
            __Pyx_INCREF(__pyx_t_8);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_11, __pyx__function);
            __pyx_t_18 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_15, __pyx_t_17};
            __pyx_t_12 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_18, (3-__pyx_t_18) | (__pyx_t_18*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8906, __pyx_L14_error)
            __Pyx_GOTREF(__pyx_t_12);
          }
          __Pyx_Raise(__pyx_t_12, 0, 0, __pyx_v_exc);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __PYX_ERR(0, 8906, __pyx_L14_error)
+08908:         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, 8908, __pyx_L14_error)
      }
 08909: 
 08910: 
+08911: 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;
}
 08912:     cdef str msg
+08913:     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, 8913, __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, 8913, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (!__pyx_t_2);


  if (__pyx_t_3) {
/* … */
  }
+08914:         return False
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+08915:     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, 8915, __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, 8915, __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, 8915, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_3 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_1, __pyx_t_5, Py_EQ); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 8915, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__pyx_t_3) {
/* … */
  }
+08916:         return True
    {

      __pyx_r = 1;
    }
    goto __pyx_L0;
 08917:     # Fallback for encoder-level "too large" errors that carry no dedicated
 08918:     # code (MAX_CHUNK_ROWS row-count overflow, an oversize single value).
+08919:     msg = str(exc).lower()
  __pyx_t_4 = __Pyx_PyObject_Unicode(__pyx_v_exc); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8919, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __pyx_t_4;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_6 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL};
    __pyx_t_5 = __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_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8919, __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, 8919, __pyx_L1_error)
  __pyx_v_msg = ((PyObject*)__pyx_t_5);
  __pyx_t_5 = 0;
 08920:     return (
+08921:         ('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, 8921, __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, 8921, __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, 8921, __pyx_L1_error)
  if (!__pyx_t_2) {

  } else {

    __pyx_t_3 = __pyx_t_2;

    goto __pyx_L5_bool_binop_done;
  }
  __pyx_L6_next_or:;
+08922:         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, 8922, __pyx_L1_error)

  __pyx_t_3 = __pyx_t_2;

  __pyx_L5_bool_binop_done:;
  {
    __pyx_r = __pyx_t_3;
  }
  goto __pyx_L0;
 08923: 
 08924: 
 08925: # no_gc_clear keeps tp_clear from nulling fields the native dispatchers
 08926: # still target. The callback targets are additionally pinned in
 08927: # _LIVE_CALLBACK_REFS until the dispatchers are joined, so the cycle collector
 08928: # cannot clear a live handler even when the handle is reached only through it.
+08929: @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;

 08930: cdef class QuestDB:
 08931:     """
 08932:     Handle to a QuestDB deployment over QWP/WebSocket.
 08933: 
 08934:     Owns the connection pool; lends row-building senders via
 08935:     :meth:`sender`, bulk-loads DataFrames via :meth:`dataframe`, runs
 08936:     queries via :meth:`query`, and lends reader leases via
 08937:     :meth:`reader`. Construct with :func:`questdb.connect`.
 08938:     Instances are safe to share across threads.
 08939:     """
 08940:     cdef questdb_db* _db
 08941:     cdef object _conf_str
 08942:     cdef object _state_cond
 08943:     cdef size_t _lease_uses
 08944:     cdef size_t _call_uses
 08945:     cdef bint _closing
 08946:     cdef bint _close_running
 08947:     cdef object _close_deadline
 08948:     cdef object _thread_owner_token
 08949:     cdef object _dispatch_context
 08950:     cdef object _connection_listener
 08951:     cdef object _error_handler
 08952:     cdef size_t _cb_refs_key
 08953:     cdef auto_flush_mode_t _auto_flush_mode
 08954:     cdef bint _auto_flush_bytes_dynamic
 08955: 
+08956:     def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_7QuestDB_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_7QuestDB_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL_TPNEW
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if !CYTHON_VECTORCALL_TPNEW
  #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
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__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_FASTCALL_TPNEW(__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___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___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;
}
+08957:         self._db = NULL
  __pyx_v_self->_db = NULL;
+08958:         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;
+08959:         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, 8959, __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, 8959, __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, 8959, __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, 8959, __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, 8959, __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, 8959, __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;
+08960:         self._lease_uses = 0
  __pyx_v_self->_lease_uses = 0;
+08961:         self._call_uses = 0
  __pyx_v_self->_call_uses = 0;
+08962:         self._closing = False
  __pyx_v_self->_closing = 0;
+08963:         self._close_running = False
  __pyx_v_self->_close_running = 0;
+08964:         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;
 08965:         # This exact owner token indexes the handle's entry in the
 08966:         # per-OS-thread table of scoped call and callback-dispatch
 08967:         # depths. The table is shared by every handle, so a handle keeps
 08968:         # its own identity per thread without allocating an OS TLS key
 08969:         # of its own.
+08970:         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, 8970, __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;
+08971:         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;
+08972:         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;
+08973:         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;
+08974:         self._cb_refs_key = 0
  __pyx_v_self->_cb_refs_key = 0;
+08975:         self._auto_flush_mode.enabled = False
  __pyx_v_self->_auto_flush_mode.enabled = 0;
+08976:         self._auto_flush_mode.interval = -1
  __pyx_v_self->_auto_flush_mode.interval = -1L;
+08977:         self._auto_flush_mode.row_count = -1
  __pyx_v_self->_auto_flush_mode.row_count = -1L;
+08978:         self._auto_flush_mode.byte_count = -1
  __pyx_v_self->_auto_flush_mode.byte_count = -1L;
+08979:         self._auto_flush_bytes_dynamic = False
  __pyx_v_self->_auto_flush_bytes_dynamic = 0;
 08980: 
+08981:     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;
};
+08982:             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;
    }
  }
+08983:         cdef questdb_db* db = NULL
  __pyx_v_db = NULL;
+08984:         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, 8984, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+08985:         try:
  /*try:*/ {
+08986:             db = self._db
    __pyx_t_4 = __pyx_v_self->_db;

    __pyx_v_db = __pyx_t_4;
+08987:             if db == NULL:
    __pyx_t_5 = (__pyx_v_db == NULL);

    if (unlikely(__pyx_t_5)) {
/* … */
    }
+08988:                 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, 8988, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_6);
+08989:                     QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8989, __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, 8989, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+08990:                     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, 8990, __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, 8990, __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, 8988, __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, 8988, __pyx_L4_error)
+08991:             if self._closing:
    if (unlikely(__pyx_v_self->_closing)) {
/* … */
    }
 08992:                 # Closing is one-way, so this refusal is permanent:
 08993:                 # the handle never goes back to taking new work.
+08994:                 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, 8994, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_9);
+08995:                     QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8995, __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, 8995, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+08996:                     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, 8996, __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, 8996, __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, 8994, __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, 8994, __pyx_L4_error)
 08997:                     'close() has been called, and the handle takes no '
 08998:                     'new work while calls in progress and outstanding '
 08999:                     'leases finish.')
 09000:             # A scoped use begins and ends inside one call on one
 09001:             # thread, so it can also be counted per thread and let
 09002:             # `close()` tell a caller waiting on other threads from one
 09003:             # waiting on itself. A lease is not scoped: it is handed
 09004:             # out here and may be returned from anywhere, so counting
 09005:             # it per thread would leave the borrower's count standing
 09006:             # and the returner's below zero. The two kinds are counted
 09007:             # apart because `close()` limits its wait for each
 09008:             # differently and says which it is waiting for: a call ends
 09009:             # when its work does, a lease only when its holder closes
 09010:             # it.
+09011:             if scoped:
    if (__pyx_v_scoped) {
/* … */
      goto __pyx_L8;
    }
+09012:                 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, 9012, __pyx_L4_error)
 09013:                 # The first scoped call on a thread allocates its call
 09014:                 # table, and on CPython 3.10/3.11 and PyPy an allocation
 09015:                 # can run a garbage-collection pass right here. A
 09016:                 # finalizer it runs can close this handle on this
 09017:                 # thread, since the lock is reentrant, and that close
 09018:                 # sees no use yet and frees the pool. The pointer read
 09019:                 # above is only good if the handle is still open now.
+09020:                 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)) {
/* … */
      }
+09021:                     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, 9021, __pyx_L4_error)
+09022:                     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, 9022, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_7);
+09023:                         QuestDBErrorCode.InvalidApiCall,
        __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9023, __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, 9023, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+09024:                         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, 9024, __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, 9024, __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, 9022, __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, 9022, __pyx_L4_error)
 09025:                         'closed while the call was starting.')
+09026:                 self._call_uses += 1
      __pyx_v_self->_call_uses = (__pyx_v_self->_call_uses + 1);
 09027:             else:
+09028:                 self._lease_uses += 1
    /*else*/ {
      __pyx_v_self->_lease_uses = (__pyx_v_self->_lease_uses + 1);
    }
    __pyx_L8:;
+09029:             return db
    {

      __pyx_r = __pyx_v_db;
    }
    goto __pyx_L3_return;
  }
 09030:         finally:
+09031:             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, 9031, __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, 9031, __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;
    }
  }
 09032: 
+09033:     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;
}
 09034:         """This handle's call depth on the current OS thread."""
+09035:         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, 9035, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  {
    __pyx_r = __pyx_t_2;
  }
  goto __pyx_L0;
 09036: 
+09037:     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();
}
 09038:         """Count a call that borrows nothing but runs on this handle.
 09039: 
 09040:         A lease's own methods are scoped in exactly the sense
 09041:         `_begin_db_use` means: the call begins and ends inside one frame
 09042:         on one thread. Counting them here is what lets `close()` tell a
 09043:         caller waiting on other threads from one waiting on the very
 09044:         frame that would release the lease it is waiting for.
 09045: 
 09046:         `_lease_uses` is deliberately untouched: the lease already
 09047:         holds one for its whole lifetime, and it may be released from a
 09048:         different thread than the one that borrowed it.
 09049:         """
+09050:         _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, 9050, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 09051: 
+09052:     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();
}
+09053:         _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, 9053, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 09054: 
+09055:     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;
};
+09056:         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, 9056, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+09057:         try:
  /*try:*/ {
+09058:             if scoped:
    if (__pyx_v_scoped) {
/* … */
      goto __pyx_L6;
    }
+09059:                 if self._call_uses == 0:
      __pyx_t_4 = (__pyx_v_self->_call_uses == 0);

      if (unlikely(__pyx_t_4)) {
/* … */
      }
+09060:                     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, 9060, __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, 9060, __pyx_L4_error)
 09061:                         'QuestDB call-use counter underflow.')
 09062:                 # The thread-local update below can raise. Unwind the shared
 09063:                 # count first so a failed update cannot leave close() waiting
 09064:                 # on a call that has already returned.
+09065:                 self._call_uses -= 1
      __pyx_v_self->_call_uses = (__pyx_v_self->_call_uses - 1);
+09066:                 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, 9066, __pyx_L4_error)
 09067:             else:
+09068:                 if self._lease_uses == 0:
    /*else*/ {
      __pyx_t_4 = (__pyx_v_self->_lease_uses == 0);

      if (unlikely(__pyx_t_4)) {
/* … */
      }
+09069:                     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, 9069, __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, 9069, __pyx_L4_error)
 09070:                         'QuestDB lease counter underflow.')
+09071:                 self._lease_uses -= 1
      __pyx_v_self->_lease_uses = (__pyx_v_self->_lease_uses - 1);
    }
    __pyx_L6:;
+09072:             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) {
/* … */
    }
  }
+09073:                 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, 9073, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 09074:         finally:
+09075:             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, 9075, __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, 9075, __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:;
  }
 09076: 
+09077:     @staticmethod
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_3from_conf(CYTHON_UNUSED PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_2from_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\047s 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        The underlying connection pool is opened by\n        `questdb_db_connect_with_handlers`.\n        Dataframe ingestion always uses the direct (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 del""ivered. 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\047s 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\047s ingress connections (initial connect, per-endpoint attempt\n        failures, failover, terminal auth rejection). It 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\047s 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 reject""ions, ``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\047s 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_3from_conf = {"from_conf", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_3from_conf, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_2from_conf};
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_3from_conf(CYTHON_UNUSED PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_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_VECTORCALL
  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_VECTORCALL
  #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_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[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, 9077, __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, 9077, __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, 9077, __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_2from_conf(PyObject *__pyx_v_conf_str, 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_12_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;
  PyObject *__pyx_gb_7questdb_7_client_7QuestDB_9from_conf_2generator8 = 0;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_12_from_conf *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_12_from_conf(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_12_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_12_from_conf *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 9077, __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_8);
  __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_gb_7questdb_7_client_7QuestDB_9from_conf_2generator8);
  __Pyx_XDECREF(__pyx_v_error_handler);
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_20 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 9077, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
/* … */
  __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_3from_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[122])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 9077, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_19, __pyx_t_20);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_from_conf, __pyx_t_19) < (0)) __PYX_ERR(0, 9077, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __pyx_t_20 = NULL;
  __Pyx_GetNameInClass(__pyx_t_17, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_from_conf); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 9077, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_20, __pyx_t_17};
    __pyx_t_19 = __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_20); __pyx_t_20 = 0;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 9077, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_19);
  }
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_from_conf, __pyx_t_19) < (0)) __PYX_ERR(0, 9077, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_12_from_conf {
  PyObject_HEAD
  PyObject *__pyx_v_auto_flush_keys;
};

 09078:     def from_conf(
 09079:             str conf_str,
 09080:             *,
+09081:             connection_listener=None,
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
/* … */
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
/* … */
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_connection_listener, Py_None) < (0)) __PYX_ERR(0, 9077, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_connection_event_inbox_capacity, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 9077, __pyx_L1_error)
 09082:             connection_event_inbox_capacity=0,
+09083:             error_handler=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));
      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, 9077, __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, 9077, __pyx_L3_error)
/* … */
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
    }
    __pyx_v_conf_str = ((PyObject*)values[0]);
    __pyx_v_connection_listener = values[1];
    __pyx_v_connection_event_inbox_capacity = values[2];
    __pyx_v_error_handler = values[3];
    __pyx_v_error_event_inbox_capacity = values[4];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("from_conf", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 9077, __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, 9079, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_2from_conf(__pyx_v_conf_str, __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_20, __pyx_mstate_global->__pyx_n_u_error_handler, Py_None) < (0)) __PYX_ERR(0, 9077, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_error_event_inbox_capacity, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 9077, __pyx_L1_error)
 09084:             error_event_inbox_capacity=0):
 09085:         """
 09086:         Construct a handle from a QWP/WebSocket configuration string.
 09087: 
 09088:         Prefer the :func:`questdb.connect` module-level factory.
 09089: 
 09090:         By default the handle connects eagerly: construction pre-opens the
 09091:         warm minimums (``sender_pool_min`` sender and ``query_pool_min``
 09092:         reader connections, one of each by default), so an unreachable
 09093:         server or bad credentials fail here, fast. With
 09094:         ``lazy_connect=true`` construction opens no connection: sender
 09095:         leases buffer locally and connect in the background, readers
 09096:         connect on first use (``query_pool_min`` defaults to 0), and
 09097:         errors surface from the first operation instead. Combining
 09098:         ``lazy_connect=true`` with a blocking ``initial_connect_retry``
 09099:         or a positive ``query_pool_min`` is a configuration conflict.
 09100: 
 09101:         Pooled row auto-flush is enabled by default at 1,000 rows, 100
 09102:         milliseconds, or an estimated encoded size at 90% of the effective
 09103:         frame cap. Before a server cap is known, or when the server omits it,
 09104:         the byte threshold is 90% of the lower of QuestDB's default cap, 2 MiB
 09105:         less 14 bytes, and the local store-and-forward frame cap. Set
 09106:         ``auto_flush_bytes=off`` to disable only the byte trigger, or
 09107:         ``auto_flush=off`` to disable all automatic publishing.
 09108:         The mode is immutable and shared by every lease; the interval starts
 09109:         when the first row enters an empty lease buffer. Auto-triggered
 09110:         publishes do not wait for server acknowledgement.
 09111: 
 09112:         The underlying connection pool is opened by
 09113:         `questdb_db_connect_with_handlers`.
 09114:         Dataframe ingestion always uses the direct (non-store-and-forward)
 09115:         QWP/WebSocket column sender, independent of ``sf_dir``. On a transient
 09116:         connection failure the original DataFrame is re-sent only when no
 09117:         batch was successfully published and the failed operation is provably
 09118:         not delivered. Once a prefix may have committed, the call raises
 09119:         instead of replaying from row zero. A delivery-unknown failure surfaces
 09120:         as :class:`QuestDBError` with ``in_doubt`` set.
 09121:         ``request_timeout`` bounds each commit's no-progress ack wait;
 09122:         ``request_timeout=0`` disables that deadline, so a stalled but
 09123:         connected server can block :meth:`dataframe` indefinitely.
 09124: 
 09125:         ``connection_listener``, when set, is a callable receiving one
 09126:         :class:`ConnectionEvent` per connection-state transition of the
 09127:         pool's ingress connections (initial connect, per-endpoint attempt
 09128:         failures, failover, terminal auth rejection). It runs on a
 09129:         dedicated dispatcher thread fed by a bounded inbox
 09130:         (``connection_event_inbox_capacity``; ``0`` selects the default
 09131:         of 64) with a drop-oldest overflow policy, so a slow listener
 09132:         cannot stall ingest or reconnects. Exceptions it raises are
 09133:         logged and swallowed. Dropped/delivered totals are available via
 09134:         :attr:`connection_events_dropped` /
 09135:         :attr:`connection_events_delivered`. Successful events are queued
 09136:         only after negotiated state, including the server frame cap, is
 09137:         committed; they do not acknowledge data.
 09138: 
 09139:         ``error_handler``, when set, is a callable receiving one
 09140:         :class:`SenderError` per server rejection recorded by any of the
 09141:         pool's store-and-forward connections — including rejections for
 09142:         rows published through a :class:`PooledSender` that was already
 09143:         closed. It runs on its own dedicated dispatcher thread fed by a
 09144:         bounded inbox (``error_event_inbox_capacity``; ``0`` selects the
 09145:         default of 64, overflow drops the oldest event). Exceptions it
 09146:         raises are logged and swallowed. Without a handler every rejection
 09147:         is logged through the ``questdb`` logger instead — ``ERROR`` for
 09148:         terminal rejections, ``WARNING`` for retriable ones (the affected
 09149:         rows are replayed, not lost) — so rejections are never silent.
 09150:         A terminal rejection is queued only after the connection's terminal
 09151:         latch and pollable diagnostic have been committed.
 09152:         Delivered/dropped totals are available via
 09153:         :attr:`error_events_delivered` /
 09154:         :attr:`error_events_dropped`. Use the handler for
 09155:         dead-lettering, alerting, and metrics; terminal failures also
 09156:         surface as :class:`QuestDBError` from the sender calls themselves.
 09157: 
 09158:         When a handler or listener closes over the returned handle, call
 09159:         :meth:`close` explicitly (or use ``with``): until closed, such a
 09160:         handle is pinned alive rather than collected, so an abandoned one
 09161:         leaks instead of crashing. The pin is dropped at interpreter
 09162:         shutdown, so an unclosed self-referential handle can still crash
 09163:         during finalization.
 09164:         """
+09165:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 09166:         cdef line_sender_utf8 c_conf
 09167:         cdef line_sender_protocol c_protocol
 09168:         cdef object protocol
 09169:         cdef dict params
+09170:         cdef set auto_flush_keys = {
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9171, __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, 9171, __pyx_L1_error)
  if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_rows) < (0)) __PYX_ERR(0, 9171, __pyx_L1_error)
  if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes) < (0)) __PYX_ERR(0, 9171, __pyx_L1_error)
  if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_interval) < (0)) __PYX_ERR(0, 9171, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_auto_flush_keys = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 09171:             'auto_flush',
 09172:             'auto_flush_rows',
 09173:             'auto_flush_bytes',
 09174:             'auto_flush_interval',
 09175:         }
 09176:         cdef bint auto_flush_configured
 09177:         cdef str native_conf_str
+09178:         cdef qdb_pystr_buf* b = qdb_pystr_buf_new()
  __pyx_v_b = qdb_pystr_buf_new();
+09179:         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, 9179, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_db = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_1);
  __pyx_t_1 = 0;
+09180:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+09181:         cdef void* connection_listener_data = NULL
  __pyx_v_connection_listener_data = NULL;
+09182:         cdef questdb_connection_event_cb connection_event_cb = NULL
  __pyx_v_connection_event_cb = NULL;
 09183:         cdef size_t c_event_inbox_capacity
 09184:         cdef size_t c_error_inbox_capacity
+09185:         try:
  /*try:*/ {
+09186:             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, 9186, __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, 9186, __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_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9186, __pyx_L4_error)
        __Pyx_XGOTREF(__pyx_t_2);
        __pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9186, __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, 9186, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9186, __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, 9186, __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, 9186, __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, 9186, __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, 9186, __pyx_L4_error)
    __pyx_v_protocol = __pyx_t_2;
    __pyx_t_2 = 0;
    __pyx_v_params = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
+09187:             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, 9187, __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, 9187, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_7 = __Pyx_PyObject_CompareBoolNe_object_object(__pyx_t_1, __pyx_t_2, Py_NE); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 9187, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_7) {

    } else {

      __pyx_t_6 = __pyx_t_7;

      goto __pyx_L9_bool_binop_done;
    }
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_Protocol); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9187, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_Wss); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9187, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_7 = __Pyx_PyObject_CompareBoolNe_object_object(__pyx_t_1, __pyx_t_3, Py_NE); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 9187, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    __pyx_t_6 = __pyx_t_7;

    __pyx_L9_bool_binop_done:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_7 = __pyx_t_6;


    if (unlikely(__pyx_t_7)) {
/* … */
    }
+09188:                 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, 9188, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
+09189:                     QuestDBErrorCode.ConfigError,
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 9189, __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, 9189, __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_questdb_connect_requires_a_QWP_W};
        __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, 9188, __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, 9188, __pyx_L4_error)
 09190:                     'questdb.connect() requires a QWP/WebSocket '
 09191:                     'configuration string: ws:: or wss::.')
+09192:             if params.get('addr') is None:
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 9192, __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, 9192, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_7 = (__pyx_t_1 == Py_None);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(__pyx_t_7)) {
/* … */
    }
+09193:                 raise QuestDBError(
      __pyx_t_2 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9193, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_8);
+09194:                     QuestDBErrorCode.ConfigError,
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9194, __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, 9194, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_9 = 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_9 = 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_8, __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_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9193, __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, 9193, __pyx_L4_error)
 09195:                     'Missing "addr" parameter in config string')
 09196: 
 09197:             # The pooled native core does not implement row-buffer
 09198:             # auto-flushing: it rejects the threshold keys and accepts only
 09199:             # auto_flush=off. Keep this Python-owned handle configuration out
 09200:             # of the native connect string. Pooled QWP uses its own defaults,
 09201:             # while validation stays shared with the standalone Sender.
+09202:             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, 9202, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_10 = ((enum line_sender_protocol)__Pyx_PyLong_As_enum__line_sender_protocol(__pyx_t_1)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9202, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_c_protocol = __pyx_t_10;
+09203:             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, 9203, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (!(likely(PyBool_Check(__pyx_t_1)) || __Pyx_RaiseUnexpectedTypeError("bool", __pyx_t_1))) __PYX_ERR(0, 9203, __pyx_L4_error)
    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 9203, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_auto_flush_configured = (!__pyx_t_7);

+09204:             _parse_pooled_auto_flush(
    __pyx_t_11 = __pyx_f_7questdb_7_client__parse_pooled_auto_flush(__pyx_v_c_protocol, __pyx_t_1, __pyx_t_8, __pyx_t_4, __pyx_t_2, (&__pyx_v_db->_auto_flush_mode), (&__pyx_v_db->_auto_flush_bytes_dynamic)); if (unlikely(__pyx_t_11 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9204, __pyx_L4_error)
    __Pyx_DECREF(__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;

 09205:                 c_protocol,
+09206:                 params.get('auto_flush'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 9206, __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, 9206, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
+09207:                 params.get('auto_flush_rows'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 9207, __pyx_L4_error)
    }
    __pyx_t_8 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auto_flush_rows, Py_None); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9207, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_8);
+09208:                 params.get('auto_flush_bytes'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 9208, __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, 9208, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_4);
+09209:                 params.get('auto_flush_interval'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 9209, __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, 9209, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
 09210:                 &db._auto_flush_mode,
 09211:                 &db._auto_flush_bytes_dynamic)
+09212:             if auto_flush_configured:
    if (__pyx_v_auto_flush_configured) {
/* … */
      goto __pyx_L12;
    }
+09213:                 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, 9213, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = PyNumber_Add(__pyx_t_2, __pyx_mstate_global->__pyx_kp_u__35); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 9213, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
      __pyx_t_8 = __Pyx_Generator_GetInlinedResult(__pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9213, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__6, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9213, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = PyNumber_Add(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9213, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (!(likely(PyUnicode_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_8))) __PYX_ERR(0, 9213, __pyx_L4_error)
      __pyx_v_native_conf_str = ((PyObject*)__pyx_t_8);
      __pyx_t_8 = 0;
+09214:                     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_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, 9214, __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_12_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, 9214, __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, 9214, __pyx_L1_error)
  __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 9214, __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, 9214, __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, 9214, __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, 9214, __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__34;
      __pyx_t_10[2] = __pyx_t_9;
      __pyx_t_10[3] = __pyx_mstate_global->__pyx_kp_u__28;
      __pyx_t_11 = 2;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_11 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10[0]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10[2]);
      #endif
      __pyx_t_7 = 0;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_7 |= __Pyx_PyUnicode_KIND_04(__pyx_t_10[0]) | __Pyx_PyUnicode_KIND_04(__pyx_t_10[2]);
      #endif
      __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_10, 4, __pyx_t_11, __pyx_t_7);
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 9214, __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;
      __Pyx_GIVEREF(__pyx_t_5);
      if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_r, __pyx_t_5))) __PYX_ERR(0, 9214, __pyx_L1_error)
      __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;
}
/* … */
      __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, 9214, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_13_genexpr {
  PyObject_HEAD
  struct __pyx_obj_7questdb_7_client___pyx_scope_struct_12_from_conf *__pyx_outer_scope;
  PyObject *__pyx_genexpr_arg_0;
  PyObject *__pyx_v_key;
  PyObject *__pyx_v_value;
};

+09215:                     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, 9215, __pyx_L1_error) }
  if (unlikely(__pyx_cur_scope->__pyx_genexpr_arg_0 == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
    __PYX_ERR(0, 9215, __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, 9215, __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, 9215, __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;
+09216:                     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, 9216, __pyx_L1_error) }
    if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_auto_flush_keys == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not iterable");
      __PYX_ERR(0, 9216, __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, 9216, __pyx_L1_error)
    if (__pyx_t_8) {
/* … */
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 09217:             else:
 09218:                 # Preserve the native configuration path byte for byte when
 09219:                 # there are no Python-owned auto-flush settings to remove.
+09220:                 native_conf_str = conf_str
    /*else*/ {
      __Pyx_INCREF(__pyx_v_conf_str);
      __pyx_v_native_conf_str = __pyx_v_conf_str;
    }
    __pyx_L12:;
 09221: 
+09222:             if connection_listener is not None and not callable(
    __pyx_t_6 = (__pyx_v_connection_listener != Py_None);
    if (__pyx_t_6) {

    } else {

      __pyx_t_7 = __pyx_t_6;

      goto __pyx_L14_bool_binop_done;
    }
/* … */
    __pyx_t_6 = __Pyx_PyCallable_Check(__pyx_v_connection_listener); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 9222, __pyx_L4_error)
/* … */
    __pyx_t_12 = (!__pyx_t_6);



    __pyx_t_7 = __pyx_t_12;

    __pyx_L14_bool_binop_done:;
    if (unlikely(__pyx_t_7)) {
/* … */
    }
 09223:                     connection_listener):
+09224:                 raise TypeError(
      __pyx_t_2 = NULL;
+09225:                     '"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, 9225, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_9 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
        __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_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9224, __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, 9224, __pyx_L4_error)
+09226:                     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, 9226, __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, 9226, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+09227:             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_7 = __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, 9227, __pyx_L4_error)
/* … */
    __pyx_t_6 = (!__pyx_t_12);



    __pyx_t_7 = __pyx_t_6;

    __pyx_L17_bool_binop_done:;
    if (unlikely(__pyx_t_7)) {
/* … */
    }
 09228:                     error_handler):
+09229:                 raise TypeError(
      __pyx_t_4 = NULL;
+09230:                     '"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, 9230, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_9 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_2};
        __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_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9229, __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, 9229, __pyx_L4_error)
+09231:                     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, 9231, __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, 9231, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+09232:             str_to_utf8(b, <PyObject*>native_conf_str, &c_conf)
    __pyx_t_11 = __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_11 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9232, __pyx_L4_error)

+09233:             if connection_listener is not None:
    __pyx_t_7 = (__pyx_v_connection_listener != Py_None);
    if (__pyx_t_7) {
/* … */
    }
 09234:                 # Register as part of pool construction so recovery senders
 09235:                 # pre-opened by connect cannot emit events before the listener
 09236:                 # exists. The handle keeps the callback target alive until
 09237:                 # close() has stopped and joined the dispatcher.
+09238:                 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;
+09239:                 connection_event_cb = _connection_event_trampoline
      __pyx_v_connection_event_cb = __pyx_f_7questdb_7_client__connection_event_trampoline;
 09240:             # A rejection handler is always installed (defaulting to the
 09241:             # `questdb` logger) because the native default logs through the
 09242:             # Rust `log` facade, which is not bridged into Python logging.
+09243:             if error_handler is None:
    __pyx_t_7 = (__pyx_v_error_handler == Py_None);
    if (__pyx_t_7) {
/* … */
    }
+09244:                 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, 9244, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF_SET(__pyx_v_error_handler, __pyx_t_8);
      __pyx_t_8 = 0;
+09245:             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;
+09246:             db._dispatch_context = _new_dispatch_context(
    __pyx_t_1 = ((PyObject *)__pyx_f_7questdb_7_client__new_dispatch_context(__pyx_t_8, __pyx_t_2, __pyx_t_4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9246, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GIVEREF(__pyx_t_1);
    __Pyx_GOTREF(__pyx_v_db->_dispatch_context);
    __Pyx_DECREF(__pyx_v_db->_dispatch_context);
    __pyx_v_db->_dispatch_context = __pyx_t_1;
    __pyx_t_1 = 0;
+09247:                 db._thread_owner_token,
    __pyx_t_8 = __pyx_v_db->_thread_owner_token;
    __Pyx_INCREF(__pyx_t_8);
+09248:                 db._error_handler,
    __pyx_t_2 = __pyx_v_db->_error_handler;
    __Pyx_INCREF(__pyx_t_2);
+09249:                 db._connection_listener)
    __pyx_t_4 = __pyx_v_db->_connection_listener;
    __Pyx_INCREF(__pyx_t_4);
+09250:             if connection_listener is not None:
    __pyx_t_7 = (__pyx_v_connection_listener != Py_None);
    if (__pyx_t_7) {
/* … */
    }
+09251:                 connection_listener_data = <void*>db._dispatch_context
      __pyx_v_connection_listener_data = ((void *)__pyx_v_db->_dispatch_context);
 09252:             # Convert to C integers while still holding the GIL: a bad
 09253:             # value must raise here, not inside the nogil region below.
+09254:             c_event_inbox_capacity = connection_event_inbox_capacity
    __pyx_t_9 = __Pyx_PyLong_As_size_t(__pyx_v_connection_event_inbox_capacity); if (unlikely((__pyx_t_9 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 9254, __pyx_L4_error)
    __pyx_v_c_event_inbox_capacity = __pyx_t_9;
+09255:             c_error_inbox_capacity = error_event_inbox_capacity
    __pyx_t_9 = __Pyx_PyLong_As_size_t(__pyx_v_error_event_inbox_capacity); if (unlikely((__pyx_t_9 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 9255, __pyx_L4_error)
    __pyx_v_c_error_inbox_capacity = __pyx_t_9;
+09256:             _ensure_doesnt_have_gil(&gs)
    (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+09257:             db._db = questdb_db_connect_with_handlers(
    __pyx_v_db->_db = questdb_db_connect_with_handlers(__pyx_v_c_conf.buf, __pyx_v_c_conf.len, __pyx_v_connection_event_cb, __pyx_v_connection_listener_data, __pyx_v_c_event_inbox_capacity, __pyx_f_7questdb_7_client__sender_error_trampoline, ((void *)__pyx_v_db->_dispatch_context), __pyx_v_c_error_inbox_capacity, (&__pyx_v_err));
 09258:                 c_conf.buf,
 09259:                 c_conf.len,
 09260:                 connection_event_cb,
 09261:                 connection_listener_data,
 09262:                 c_event_inbox_capacity,
 09263:                 _sender_error_trampoline,
 09264:                 <void*>db._dispatch_context,
 09265:                 c_error_inbox_capacity,
 09266:                 &err)
+09267:             _ensure_has_gil(&gs)
    __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+09268:             if db._db == NULL:
    __pyx_t_7 = (__pyx_v_db->_db == NULL);

    if (unlikely(__pyx_t_7)) {
/* … */
    }
 09269:                 # A failed handler-aware connect fences its dispatchers before
 09270:                 # returning, so the callback targets are now safe to release.
+09271:                 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;
+09272:                 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;
+09273:                 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;
+09274:                 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, 9274, __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, 9274, __pyx_L4_error)
+09275:             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;
+09276:             db._cb_refs_key = _retain_callback_refs(
    __pyx_t_9 = __pyx_f_7questdb_7_client__retain_callback_refs(((PyObject *)__pyx_v_db), __pyx_t_1); if (unlikely(__pyx_t_9 == ((size_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 9276, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_db->_cb_refs_key = __pyx_t_9;
+09277:                 db, db._dispatch_context)
    __pyx_t_1 = __pyx_v_db->_dispatch_context;
    __Pyx_INCREF(__pyx_t_1);
+09278:             return db
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF((PyObject *)__pyx_v_db);
        __pyx_r = ((PyObject *)__pyx_v_db);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L3_return;
  }
 09279:         finally:
+09280:             _ensure_has_gil(&gs)
  /*finally:*/ {
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 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_19, &__pyx_t_20, &__pyx_t_21);
      if ( unlikely(__Pyx_GetException(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18) < 0)) __Pyx_ErrFetch(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18);
      __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_XGOTREF(__pyx_t_21);
      __pyx_t_13 = __pyx_lineno; __pyx_t_14 = __pyx_clineno; __pyx_t_15 = __pyx_filename;
      {
        __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
/* … */
      __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+09281:             qdb_pystr_buf_free(b)
        qdb_pystr_buf_free(__pyx_v_b);
      }
      __Pyx_XGIVEREF(__pyx_t_19);
      __Pyx_XGIVEREF(__pyx_t_20);
      __Pyx_XGIVEREF(__pyx_t_21);
      __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_20, __pyx_t_21);
      __Pyx_XGIVEREF(__pyx_t_16);
      __Pyx_XGIVEREF(__pyx_t_17);
      __Pyx_XGIVEREF(__pyx_t_18);
      __Pyx_ErrRestore(__pyx_t_16, __pyx_t_17, __pyx_t_18);
      __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0;
      __pyx_lineno = __pyx_t_13; __pyx_clineno = __pyx_t_14; __pyx_filename = __pyx_t_15;
      goto __pyx_L1_error;
    }
    __pyx_L3_return: {
      __pyx_t_21 = __pyx_r;
      __pyx_r = 0;
/* … */
      qdb_pystr_buf_free(__pyx_v_b);
      __pyx_r = __pyx_t_21;
      __pyx_t_21 = 0;
      goto __pyx_L0;
    }
  }
 09282: 
+09283:     def __enter__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_5__enter__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_5__enter__ = {"__enter__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_5__enter__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_5__enter__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_4__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_4__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_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_5__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[123])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 9283, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_enter, __pyx_t_19) < (0)) __PYX_ERR(0, 9283, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+09284:         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, 9284, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+09285:         try:
  /*try:*/ {
+09286:             if self._db == NULL:
    __pyx_t_4 = (__pyx_v_self->_db == NULL);

    if (unlikely(__pyx_t_4)) {
/* … */
    }
+09287:                 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, 9287, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_5);
+09288:                     QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9288, __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, 9288, __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, 9287, __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, 9287, __pyx_L4_error)
 09289:                     '__enter__() can\'t be called: QuestDB is closed.')
+09290:             if self._closing:
    if (unlikely(__pyx_v_self->_closing)) {
/* … */
    }
  }
+09291:                 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, 9291, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_7);
+09292:                     QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9292, __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, 9292, __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, 9291, __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, 9291, __pyx_L4_error)
 09293:                     '__enter__() can\'t be called: QuestDB is closing. '
 09294:                     'close() has been called, and the handle takes no '
 09295:                     'new work while calls in progress and outstanding '
 09296:                     'leases finish.')
 09297:         finally:
+09298:             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, 9298, __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, 9298, __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:;
  }
+09299:         return self
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF((PyObject *)__pyx_v_self);
      __pyx_r = ((PyObject *)__pyx_v_self);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 09300: 
+09301:     def sender(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_7sender(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_6sender, "\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_7sender = {"sender", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_7sender, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_6sender};
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_7sender(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_6sender(((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_6sender(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_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_7sender, __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[124])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 9301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_sender, __pyx_t_19) < (0)) __PYX_ERR(0, 9301, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 09302:         """
 09303:         Borrow a context-managed row-building sender from the pool.
 09304: 
 09305:         The lease counts as an active use of the handle until it is
 09306:         closed: :meth:`QuestDB.close` waits for outstanding leases for as
 09307:         long as its ``timeout`` allows (a minute by default -- see
 09308:         :meth:`close <QuestDB.close>`), and a lease keeps working while
 09309:         the handle drains -- apart from :meth:`PooledSender.dataframe`,
 09310:         which is new work on the handle and is refused once ``close()``
 09311:         has started.
 09312:         """
+09313:         cdef questdb_db* db = NULL
  __pyx_v_db = NULL;
+09314:         cdef qwp_sender* sender = NULL
  __pyx_v_sender = NULL;
+09315:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+09316:         cdef Buffer buffer = None
  __Pyx_INCREF(Py_None);
  __pyx_v_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None);
+09317:         cdef PooledSender lease = None
  __Pyx_INCREF(Py_None);
  __pyx_v_lease = ((struct __pyx_obj_7questdb_7_client_PooledSender *)Py_None);
+09318:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+09319:         cdef bint db_use = False
  __pyx_v_db_use = 0;
+09320:         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, 9320, __pyx_L1_error)
  __pyx_v_db = __pyx_t_1;
+09321:         db_use = True
  __pyx_v_db_use = 1;
+09322:         try:
  /*try:*/ {
+09323:             _ensure_doesnt_have_gil(&gs)
    (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+09324:             sender = questdb_db_borrow_sender(db, &err)
    __pyx_v_sender = questdb_db_borrow_sender(__pyx_v_db, (&__pyx_v_err));
+09325:             _ensure_has_gil(&gs)
    __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+09326:             if sender == NULL:
    __pyx_t_3 = (__pyx_v_sender == NULL);

    if (unlikely(__pyx_t_3)) {
/* … */
    }
+09327:                 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, 9327, __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, 9327, __pyx_L4_error)
 09328: 
+09329:             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, 9329, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF_SET(__pyx_v_buffer, ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_4));
    __pyx_t_4 = 0;
+09330:             buffer._impl = questdb_db_new_buffer(db, &err)
    __pyx_v_buffer->_impl = questdb_db_new_buffer(__pyx_v_db, (&__pyx_v_err));
+09331:             if buffer._impl == NULL:
    __pyx_t_3 = (__pyx_v_buffer->_impl == NULL);

    if (unlikely(__pyx_t_3)) {
/* … */
    }
+09332:                 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, 9332, __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, 9332, __pyx_L4_error)
+09333:             buffer._b = qdb_pystr_buf_new()
    __pyx_v_buffer->_b = qdb_pystr_buf_new();
+09334:             buffer._init_buf_size = line_sender_buffer_capacity(buffer._impl)
    __pyx_v_buffer->_init_buf_size = line_sender_buffer_capacity(__pyx_v_buffer->_impl);
+09335:             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);
+09336:             buffer._qwp = True
    __pyx_v_buffer->_qwp = 1;
 09337: 
+09338:             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, 9338, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF_SET(__pyx_v_lease, ((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_t_4));
    __pyx_t_4 = 0;
+09339:             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);
+09340:             sender = NULL
    __pyx_v_sender = NULL;
+09341:             db_use = False
    __pyx_v_db_use = 0;
+09342:             return lease
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF((PyObject *)__pyx_v_lease);
        __pyx_r = ((PyObject *)__pyx_v_lease);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L3_return;
  }
 09343:         finally:
+09344:             _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));
+09345:             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) {
/* … */
      }
+09346:                 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);
+09347:             if db_use:
        if (__pyx_v_db_use) {
/* … */
        }
      }
      __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;
/* … */
      if (__pyx_v_db_use) {
/* … */
      }
      __pyx_r = __pyx_t_13;
      __pyx_t_13 = 0;
      goto __pyx_L0;
    }
  }
+09348:                 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, 9348, __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, 9348, __pyx_L1_error)
 09349: 
+09350:     def dataframe(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_9dataframe(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_8dataframe, "\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\047s 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 le""gacy 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=\047streaming\047)``.\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\047s 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\047s 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[\047questdb\047]`` 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,1""28,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={\047col\047: \047uuid\047}``. 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 ``{\047kind\047: \047uuid\047}`` entry in\n          ``df.attrs[\047questdb\047]`` claims an object-dtype column of\n          16-byte ``bytes``, the shape\n          ``to_pandas(dtype_backend=\047numpy_nullable\047)`` returns. On\n          pyarrow < 18, where no column can carry the label at all, a\n          pandas frame\047s 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={\047col\047: \047long256\047}`` needs a fully\n          Arrow-backed frame \342\200\224 every column an ArrowDtype, e.g.\n          ``df.convert_dtypes(dtype_backend=\047pyarrow\047)``.\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          ``{\047kind\047: \047long256\047}`` entry in ``df.attrs[\047questdb\047]`` 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=\047numpy_nullable\047``\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 itse""lf and is refused rather than sent as\n          opaque bytes \342\200\224 see **Binary** below for 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[\047questdb\047]`` 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={\047col\047: \047binary\047}``, 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          ``__ar""row_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={\047col\047: \047binary\047}``, 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(\047ms\047)`` (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 ``\047date\047`` 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 i""s rejected outright. A millisecond column named\n          by ``at=`` becomes the table\047s 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(\047ms\047, \047UTC\047)``, which ``to_arrow()`` and\n          ``to_pandas(dtype_backend=\047pyarrow\047)`` feed straight back as\n          DATE. Plain ``to_pandas()`` gives a NumPy ``datetime64[ms]``\n          column, and the ``df.attrs[\047questdb\047]`` 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        ``\047symbol\047``, ``\047ipv4\047``, ``\047char\047``, ``\047uuid\047``, ``\047long256\047``,\n        ``\047binary\047``, or ``(\047geohash\047, bits)`` (e.g.\n        ``{\047venue\047: \047symbol\047, \047src_ip\047: \047ipv4\047}``). Unknown column names are\n        rejected. An override wins over any Arrow field metadata on its\n        column, except ``\047binary\047``, which is refused on a column whose\n        own type or field metadata labels it UUID or LONG256. ``\047uuid\047`` and ``\047long256\047`` 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 respec""tively. ``\047binary\047``\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 refused 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[\047questdb\047]``, 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=\047pyarrow\047`` and ``dtype_backend=\047numpy_nullable\047``\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=\047numpy_nullable\047``\n        returns UUID and LONG256. Frames saved from version 5.0, who""se\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 custom ``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 incons""istent 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[\047questdb\047]`` 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[\047questdb\047] = {\n                \047version\047: 1,\n                \047columns\047: {\n                    \047src_ip\047: {\047kind\047: \047ipv4\047},\n                    \047pos\047: {\047kind\047: \047geohash\047, \047precision_bits\047: 20},\n                    \047traded_on\047: {\047kind\047: \047date\047},\n                },\n            }\n\n        ``version`` must be ``1`` when present, and a mapping without it\n        reads as version 1. The claim\047s 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\047s 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        ``\047uuid\047``, ``\047long256\047``, ``\047ipv4\047``, ``\047char\047``, ``\047geohash\047``,\n        or ``\047date\047`` \342\200\224 the types whose claim cannot always ride on a pandas\n        dtype. ``precision_bits`` accompanies ``\047geohash\047`` alone. A\n        ``\047date\047`` 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\047s Arrow type cannot carry \342\200\224 ``\047short\047`` on\n        ``pa.int32()``, ``\047ipv4\047`` 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=\047permissive\047)`` 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        th""ere 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(\047col\047)\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-batch 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\047s\n        batch size governs its checkpoint window.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_9dataframe = {"dataframe", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_9dataframe, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_8dataframe};
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_9dataframe(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 9350, __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, 9350, __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, 9350, __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_8dataframe(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_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_19 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 9350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
/* … */
  __pyx_t_17 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 9350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_table_name, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 9350, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_table_name_col, __pyx_mstate_global->__pyx_kp_u_Union_None_int_str) < (0)) __PYX_ERR(0, 9350, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Union_str_bool_List_int_List_str) < (0)) __PYX_ERR(0, 9350, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_ServerTimestampType_int_st) < (0)) __PYX_ERR(0, 9350, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_max_rows_per_batch, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 9350, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_schema_overrides_2, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_object) < (0)) __PYX_ERR(0, 9350, __pyx_L1_error)
  __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_9dataframe, __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[125])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 9350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20);
  #endif
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_20, __pyx_t_19);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_20, __pyx_t_17);
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __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_dataframe, __pyx_t_20) < (0)) __PYX_ERR(0, 9350, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 09351:             self,
 09352:             df,
 09353:             *,
+09354:             table_name: Optional[str] = None,
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_table_name, Py_None) < (0)) __PYX_ERR(0, 9350, __pyx_L1_error)
+09355:             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__36);
/* … */
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_table_name_col, Py_None) < (0)) __PYX_ERR(0, 9350, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_n_u_auto) < (0)) __PYX_ERR(0, 9350, __pyx_L1_error)
 09356:             symbols: Union[str, bool, List[int], List[str]] = 'auto',
 09357:             at: Union[ServerTimestampType, int, str, TimestampNanos, datetime.datetime],
+09358:             max_rows_per_batch: int = DEFAULT_MAX_CHUNK_ROWS,
  __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_DEFAULT_MAX_CHUNK_ROWS); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 9358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_19, NULL, 1) < (0)) __PYX_ERR(0, 9358, __pyx_L1_error)
  __pyx_mstate_global->__pyx_k__36 = ((PyObject*)__pyx_t_19);
  __Pyx_GIVEREF(__pyx_t_19);
  __pyx_t_19 = 0;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_DEFAULT_MAX_CHUNK_ROWS); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 9358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_17, NULL, 1) < (0)) __PYX_ERR(0, 9358, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_max_rows_per_batch, __pyx_t_17) < (0)) __PYX_ERR(0, 9350, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+09359:             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, 9350, __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, 9350, __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, 9350, __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, 9358, __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, 9350, __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, 9354, __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, 9358, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema_overrides), (&PyDict_Type), 1, "schema_overrides", 2))) __PYX_ERR(0, 9359, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_8dataframe(((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_19, __pyx_mstate_global->__pyx_n_u_schema_overrides_2, Py_None) < (0)) __PYX_ERR(0, 9350, __pyx_L1_error)
 09360:         """
 09361:         Ingest a dataframe through the pooled columnar QWP path.
 09362: 
 09363:         Ingestion always uses the direct (non-store-and-forward) column
 09364:         sender, independent of ``sf_dir``. On success, the call returns only
 09365:         after every DataFrame batch has been committed. The first successful
 09366:         batch on a fresh direct connection is already a commit boundary;
 09367:         subsequent batches are pipelined until the final commit. Large Arrow
 09368:         inputs add a checkpoint about every 100 batches to bound the
 09369:         uncommitted tail. The client may checkpoint earlier if deferred
 09370:         capacity fills or a batch must be split to fit.
 09371: 
 09372:         On a transient connection failure, the client re-sends the original,
 09373:         replayable DataFrame only when no batch was successfully published and
 09374:         the failed operation is not ``in_doubt``. Otherwise it raises rather
 09375:         than replaying from row zero. If a batch from this call may have
 09376:         committed, the raised error has ``in_doubt=True`` even when the final
 09377:         native write alone was provably not delivered. This includes local
 09378:         validation and Arrow stream errors after publication. Internal
 09379:         checkpoints do not reset the call's delivery status. The load did not
 09380:         finish, but any already committed prefix remains; an application-level
 09381:         retry of the whole DataFrame can duplicate it unless the destination
 09382:         table uses suitable ``DEDUP UPSERT KEYS``. A consumed one-shot stream
 09383:         may instead be non-replayable with ``in_doubt=False`` when no rows
 09384:         could have landed; that error asks for a fresh reader. Server-side
 09385:         rejections (e.g. a
 09386:         schema mismatch) surface as a plain
 09387:         :class:`QuestDBError`; the structured ``sender_error`` diagnostic
 09388:         is attached only by the store-and-forward senders.
 09389: 
 09390:         ``df`` accepts any of:
 09391: 
 09392:         - **pandas** ``pandas.DataFrame``. NumPy-backed columns route
 09393:           through the legacy planner; pyarrow-backed columns route
 09394:           through the Arrow C Stream capsule path below.
 09395:         - **polars** ``polars.DataFrame`` and ``polars.LazyFrame``
 09396:           (polars 1.32 or later). ``LazyFrame`` is materialised via
 09397:           ``.collect(engine='streaming')``.
 09398:         - **pyarrow** ``pa.Table``, ``pa.RecordBatch``, and
 09399:           ``pa.RecordBatchReader``.
 09400:         - Any object exposing the Arrow C Data Interface — i.e. with
 09401:           ``__arrow_c_stream__`` (duckdb / cudf / pyarrow-backed
 09402:           pandas 2.2+) or ``__arrow_c_array__`` (single Arrow array
 09403:           exporters, wrapped into a one-batch ``pa.Table``).
 09404: 
 09405:         ``at`` names the designated timestamp column (by name or index).
 09406:         Alternatively pass a fixed ``TimestampNanos`` / ``datetime``
 09407:         shared by every row (encoded as a repeated constant; resubmission
 09408:         stays idempotent under ``DEDUP UPSERT KEYS``), or the explicit
 09409:         :data:`ServerTimestamp` sentinel to let the server assign each
 09410:         row's timestamp on arrival — an opt-in mirroring the row API,
 09411:         since server-assigned timestamps defeat ``DEDUP UPSERT KEYS`` on
 09412:         resubmission.
 09413: 
 09414:         The columnar path loads one table per call: name it via
 09415:         ``table_name`` — or, for NumPy-backed pandas input, the
 09416:         dataframe's index name (``df.index.name``); Arrow-native input
 09417:         (polars, pyarrow, pyarrow-backed pandas) requires an explicit
 09418:         ``table_name``. ``table_name_col`` raises
 09419:         :class:`UnsupportedDataFrameShapeError` — split multi-table
 09420:         frames (e.g. ``df.groupby(col)``) and load each group.
 09421: 
 09422:         Supports a column-QWP v1 subset: a single per-call table name,
 09423:         non-null designated timestamp column, and the following
 09424:         per-column dtypes:
 09425: 
 09426:         - **Numeric**: NumPy ``bool/int{8,16,32,64}/uint{8..64}/float{32,64}``.
 09427:           Arrow ``pa.int{8,16,32,64}``, ``pa.float{16,32,64}``, and
 09428:           ``pa.uint{8,16,32,64}`` are accepted by the Rust Arrow batch route
 09429:           when the frame uses a fixed table name and a designated timestamp
 09430:           column name. Unsigned Arrow values follow the
 09431:           Rust Arrow policy: ``UInt8`` and ``UInt16`` widen to ``INT``,
 09432:           ``UInt32`` to ``LONG``, and ``UInt64`` values up to
 09433:           ``i64::MAX`` are accepted as ``LONG``. Larger ``UInt64`` values are
 09434:           rejected because QuestDB QWP-WS encodes integers as signed ``i64``.
 09435:           Signed ``int8``/``int16`` land as QuestDB ``INT``; the row-oriented
 09436:           :meth:`Sender.dataframe` instead widens every integer to ``LONG``.
 09437:           Likewise ``float32`` lands here as ``FLOAT`` but is widened to
 09438:           ``DOUBLE`` by the row path — ingest a given table through a single
 09439:           path to avoid a first-write column-type mismatch.
 09440:         - **String / Symbol**: object-dtype ``str``, ``pa.string()``,
 09441:           ``pa.large_string()``, ``pd.CategoricalDtype`` of strings.
 09442:         - **Timestamp**: NumPy ``datetime64`` units accepted by pandas and
 09443:           ``pa.timestamp`` with unit ``s``, ``us``, or ``ns`` (tz-aware
 09444:           accepted on Arrow-backed columns in the Rust Arrow route). An
 09445:           Arrow ``ms`` timestamp field lands as DATE instead — see
 09446:           **DATE** below — while a NumPy ``datetime64[ms]`` field is
 09447:           widened to a microsecond TIMESTAMP unless a
 09448:           ``df.attrs['questdb']`` claim names it DATE.
 09449:           Timestamp *field* columns accept null timestamps (``NaT`` /
 09450:           ``None``) and values before the Unix epoch; a ``datetime64[ns]``
 09451:           field carrying ``NaT`` is re-exported through Arrow so its
 09452:           ``INT64_MIN`` null sentinel is preserved (this needs pyarrow).
 09453:           The *designated* timestamp column (``at=``) must be non-null
 09454:           and at or after the epoch.
 09455:         - **Decimal**: Arrow-backed ``pa.decimal{32,64,128,256}`` columns
 09456:           (``pa.decimal32``/``pa.decimal64`` require pyarrow >= 19), or
 09457:           object-dtype columns of ``decimal.Decimal`` (re-exported through
 09458:           Arrow; the decimal width and scale are inferred from the values).
 09459:         - **Array**: Arrow ``pa.list_`` / ``pa.large_list`` /
 09460:           ``pa.fixed_size_list`` columns with a ``float64`` leaf (nested for
 09461:           multi-dimensional), and object-dtype columns of ``float64``
 09462:           ``numpy.ndarray`` cells (any rank; requires pyarrow). Both land as
 09463:           QuestDB ``ARRAY(DOUBLE)``. Null rows are allowed; null *elements*
 09464:           inside an array are not.
 09465:         - **UUID**: object-dtype columns of ``uuid.UUID``, the
 09466:           ``arrow.uuid`` extension type over ``pa.fixed_size_binary(16)``,
 09467:           or any 16-byte binary column claimed with
 09468:           ``schema_overrides={'col': 'uuid'}``. Bytes are **canonical
 09469:           RFC 4122 big-endian** — exactly ``uuid.UUID.bytes`` — and the
 09470:           client byte-swaps them into QWP wire order. Round-trip through
 09471:           :meth:`query <questdb.QuestDB.query>` is byte-identity.
 09472: 
 09473:           The ``arrow.uuid`` route requires pyarrow >= 18, which is where
 09474:           that canonical extension type is registered, and the column
 09475:           must carry the extension **type** — build it from ``pa.uuid()``.
 09476:           Writing ``ARROW:extension:name`` as plain field metadata is not
 09477:           equivalent: pyarrow leaves such a key on the field, and a
 09478:           pandas ``ArrowDtype`` carries a type and no field, so a frame
 09479:           built that way holds a bare ``pa.fixed_size_binary(16)`` and
 09480:           is refused as unlabelled — see **Binary** below. Frames
 09481:           imported over the C data interface or Arrow IPC do get the
 09482:           extension type rebuilt from that key, which is why the same
 09483:           metadata can route two ways. The other two routes —
 09484:           ``uuid.UUID`` cells and ``schema_overrides`` — are free of both
 09485:           conditions, and a ``{'kind': 'uuid'}`` entry in
 09486:           ``df.attrs['questdb']`` claims an object-dtype column of
 09487:           16-byte ``bytes``, the shape
 09488:           ``to_pandas(dtype_backend='numpy_nullable')`` returns. On
 09489:           pyarrow < 18, where no column can carry the label at all, a
 09490:           pandas frame's bare ``pa.fixed_size_binary(16)`` column is
 09491:           still refused rather than quietly landing as BINARY.
 09492:         - **LONG256**: 32-byte binary columns. Bytes are little-endian
 09493:           limbs, least-significant limb first, forwarded verbatim. Three
 09494:           routes claim the type, and they need different inputs.
 09495:           ``schema_overrides={'col': 'long256'}`` needs a fully
 09496:           Arrow-backed frame — every column an ArrowDtype, e.g.
 09497:           ``df.convert_dtypes(dtype_backend='pyarrow')``.
 09498:           ``questdb.column_type=long256`` *field* metadata needs a
 09499:           ``pa.Table`` or ``pa.RecordBatch`` handed straight to this
 09500:           method: field metadata lives on the field, a pandas
 09501:           ``ArrowDtype`` carries a type and no field, so a column that
 09502:           passed through pandas has already lost the claim. A
 09503:           ``{'kind': 'long256'}`` entry in ``df.attrs['questdb']`` claims
 09504:           an object-dtype column of Python ints or of 32-byte ``bytes``
 09505:           — the two shapes :meth:`QueryResult.to_pandas` hands a LONG256
 09506:           column back in, plain and ``dtype_backend='numpy_nullable'``
 09507:           respectively. Ints are encoded as 32 unsigned little-endian
 09508:           bytes, so every non-null value must satisfy
 09509:           ``0 <= value < 2**256``; ``bytes`` cells go out verbatim and
 09510:           must be exactly 32 bytes. LONG256 has no Arrow extension type,
 09511:           so a ``pa.fixed_size_binary(32)`` column in a pandas frame
 09512:           claims nothing by itself and is refused rather than sent as
 09513:           opaque bytes — see **Binary** below for why pandas frames
 09514:           refuse where native Arrow input writes BINARY.
 09515:         - **Binary**: object-dtype columns of ``bytes``, ``bytearray``, or
 09516:           C-contiguous one-byte-item ``memoryview`` cells land as BINARY,
 09517:           the same value types :func:`Buffer.row <questdb.ingress.Buffer.row>`
 09518:           accepts. Arrow ``pa.binary()``, ``pa.large_binary()``, and
 09519:           ``pa.fixed_size_binary(n)`` columns also land as BINARY, with
 09520:           the exception and the condition below.
 09521: 
 09522:           The exception is ``pa.fixed_size_binary(8)``, which both
 09523:           planners refuse with ``ArrowUnsupportedColumnKind``, labelled
 09524:           or not. polars exports its ``Object`` dtype in exactly that
 09525:           shape, as handles to objects in its own process rather than
 09526:           data, and once exported nothing else marks it. To store
 09527:           genuine 8-byte values as BINARY, make the column
 09528:           variable-length binary: ``pa.binary()``, ``pl.Binary``, or an
 09529:           object column of ``bytes``.
 09530: 
 09531:           The condition is on widths 16 and 32. A width on its own
 09532:           claims nothing: such a column is a UUID or a LONG256 only when
 09533:           something labels it — ``pa.uuid()``, ``questdb.column_type``
 09534:           field metadata of ``uuid`` or ``long256``, ``schema_overrides``,
 09535:           or a ``df.attrs['questdb']`` claim. Any other extension type,
 09536:           or any other ``questdb.column_type`` value, leaves the column
 09537:           unlabelled — except ``binary``, which, like
 09538:           ``schema_overrides={'col': 'binary'}``, labels it as plain bytes.
 09539:           What happens to an unlabelled
 09540:           one depends on where it comes from, not on which planner
 09541:           writes it. Native Arrow input — a ``pa.Table``,
 09542:           ``pa.RecordBatch``, ``pa.RecordBatchReader``, or any other
 09543:           ``__arrow_c_stream__`` producer — keeps its field metadata, so
 09544:           an unlabelled column there is written as BINARY, and once the
 09545:           write is done the ``questdb`` logger records one WARNING per
 09546:           such column naming the remedies. A pandas frame refuses it with ``BadDataFrame``,
 09547:           fully Arrow-backed or not: an ``ArrowDtype`` carries a type and
 09548:           no field, so the column may be a UUID or LONG256 column whose
 09549:           label was dropped on the way into pandas, and guessing would
 09550:           auto-create a table with the wrong column type. The refusal
 09551:           does not depend on the pyarrow version — which remedies the
 09552:           message can name does, since ``pa.uuid()`` needs pyarrow 18,
 09553:           but which columns are accepted does not. To write either width
 09554:           as BINARY without the warning or the refusal, label it as
 09555:           plain bytes — ``schema_overrides={'col': 'binary'}``, or
 09556:           ``{"questdb.column_type": "binary"}`` field metadata on native
 09557:           Arrow input — which sends it as it is, with no copy. Making the
 09558:           column variable-length binary (``pa.binary()``,
 09559:           ``pd.ArrowDtype(pa.binary())``) or, in pandas, an object-dtype
 09560:           column of ``bytes`` works too, at the cost of a copy. Requires
 09561:           QuestDB 10 or newer.
 09562:         - **DATE**: Arrow ``pa.timestamp('ms')`` (tz-aware or naive),
 09563:           ``pa.date32()``, and ``pa.date64()`` columns land as DATE. The
 09564:           Arrow type is itself the claim, so there is no DATE cell type
 09565:           and no ``'date'`` kind for ``schema_overrides``. Such a column
 09566:           lands as DATE whether the frame is fully Arrow-backed or mixed
 09567:           with NumPy columns. What has no route of its own to DATE is
 09568:           the NumPy ``datetime64[ms]`` dtype, which widens to a
 09569:           microsecond TIMESTAMP, and its tz-aware ``datetime64[ms, tz]``
 09570:           form, which is rejected outright. A millisecond column named
 09571:           by ``at=`` becomes the table's designated TIMESTAMP, like any
 09572:           other ``at`` column. Round-tripping keeps the type: :meth:`query
 09573:           <questdb.QuestDB.query>` returns a DATE column as
 09574:           ``pa.timestamp('ms', 'UTC')``, which ``to_arrow()`` and
 09575:           ``to_pandas(dtype_backend='pyarrow')`` feed straight back as
 09576:           DATE. Plain ``to_pandas()`` gives a NumPy ``datetime64[ms]``
 09577:           column, and the ``df.attrs['questdb']`` claim it comes with
 09578:           names the column DATE, so this method puts the Arrow type back
 09579:           on before writing and that frame lands as DATE too.
 09580:           Row-at-a-time, DATE is written with :class:`DateMillis
 09581:           <questdb.DateMillis>` through :func:`Buffer.row
 09582:           <questdb.ingress.Buffer.row>`.
 09583: 
 09584:         Server-side coercion handles cross-type writes (e.g. ``pa.string()``
 09585:         UUIDs landing in a UUID column are parsed server-side; narrow ints
 09586:         landing in a wider column are widened). Failures surface as
 09587:         ``QuestDBError`` from the ``flush()``.
 09588: 
 09589:         ``schema_overrides`` reclassifies columns by name, mapping each to
 09590:         ``'symbol'``, ``'ipv4'``, ``'char'``, ``'uuid'``, ``'long256'``,
 09591:         ``'binary'``, or ``('geohash', bits)`` (e.g.
 09592:         ``{'venue': 'symbol', 'src_ip': 'ipv4'}``). Unknown column names are
 09593:         rejected. An override wins over any Arrow field metadata on its
 09594:         column, except ``'binary'``, which is refused on a column whose
 09595:         own type or field metadata labels it UUID or LONG256. ``'uuid'`` and ``'long256'`` apply to fixed-size and
 09596:         variable-length binary columns alike — the route polars frames take,
 09597:         since polars has no fixed-size binary dtype — and every non-null
 09598:         value must be exactly 16 or 32 bytes respectively. ``'binary'``
 09599:         applies to binary columns and says a 16- or 32-byte column holds
 09600:         plain bytes (see **Binary** above); it cannot override a
 09601:         ``pa.uuid()`` type or a ``uuid`` / ``long256`` field label, and
 09602:         is refused on such a column. It requires the
 09603:         Arrow columnar path (fully Arrow-backed input without
 09604:         ``table_name_col``; pandas input needs pandas 2.2 or later); on
 09605:         input that falls back to the NumPy planner
 09606:         it raises :class:`UnsupportedDataFrameShapeError`.
 09607: 
 09608:         A pandas frame that came out of :meth:`QueryResult.to_pandas`
 09609:         carries its source column types in ``df.attrs['questdb']``, and
 09610:         this method reads them back. That is what keeps UUID, LONG256,
 09611:         IPV4, CHAR, GEOHASH, and DATE columns their own type on a
 09612:         read-modify-write round trip: their claim lives in Arrow *field*
 09613:         metadata, which a pandas dtype — an Arrow type and no field —
 09614:         cannot hold. The metadata recalls what the frame held when it was
 09615:         read, so a column since dropped, renamed, or retyped simply loses
 09616:         its claim, and ``symbols`` / ``schema_overrides`` outrank it.
 09617:         BYTE, SHORT, and INT columns still widen one step on the way back
 09618:         in; the Arrow ingest API has no override that pins them.
 09619: 
 09620:         The claim is honoured on every shape a ``to_pandas`` backend
 09621:         produces, so plain ``to_pandas()``,
 09622:         ``dtype_backend='pyarrow'`` and ``dtype_backend='numpy_nullable'``
 09623:         round-trip the same way. Besides the Arrow-backed and plain NumPy
 09624:         columns, that covers the object columns the other backends leave
 09625:         behind: Python ints, which is what a pandas masked column becomes
 09626:         and what plain ``to_pandas()`` returns a LONG256 as, and
 09627:         ``bytes``, which is how ``dtype_backend='numpy_nullable'``
 09628:         returns UUID and LONG256. Frames saved from version 5.0, whose
 09629:         plain ``to_pandas()`` returned a GEOHASH column as an unsigned
 09630:         integer, round-trip too: such a column is written as the signed
 09631:         integer of the same width, bit for bit. A frame whose columns
 09632:         were retyped past that set — which a custom ``types_mapper`` can
 09633:         do — keeps the claim in ``attrs`` and cannot use it: a claimed
 09634:         column that arrives as a float or a string dtype lands as that
 09635:         dtype implies, and the claim it could not use is reported as a
 09636:         warning-level record on the ``questdb`` logger. An object column
 09637:         states no width or range of its own, so a claimed value the type
 09638:         cannot hold — an integer past ``2**32-1`` under ``ipv4``, a cell
 09639:         that is not exactly 16 or 32 bytes under ``uuid`` or ``long256``
 09640:         — is refused rather than written into a column of the claimed
 09641:         type. GEOHASH is the deliberate exception, described next.
 09642: 
 09643:         Bulk GEOHASH values are raw bit patterns, whatever the column is
 09644:         stored as: NumPy, Arrow, or an object column of Python ints,
 09645:         which is also what a pandas masked column becomes. This is a
 09646:         deliberate contract, the same for every shape, so that whether a
 09647:         frame is written does not depend on whether a GEOHASH column
 09648:         holds a null; plain :meth:`QueryResult.to_pandas` returns a
 09649:         column that does as a masked column. The declared precision
 09650:         must be in ``1..=60`` and fit the signed integer carrier, but no
 09651:         per-value check verifies that the pattern has no bits set above
 09652:         that precision. For example, ``32`` under ``GEOHASH(5b)`` is
 09653:         accepted even though it needs six bits. If the declared precision
 09654:         is wrong for the data, the write can succeed and store a different
 09655:         GEOHASH location or ``NULL``. Only the low
 09656:         ``ceil(precision / 8)`` bytes are encoded, and the exact result of
 09657:         an inconsistent value is unspecified. This is a semantic
 09658:         data-integrity risk, not a memory-safety risk for otherwise valid
 09659:         NumPy/Arrow buffers. The caller must validate bulk values. The
 09660:         scalar :class:`Geohash <questdb.Geohash>` constructor remains
 09661:         strict; malformed custom Arrow C Data structures remain invalid
 09662:         input and are outside this guarantee.
 09663: 
 09664:         A column of nothing but nulls names no type of its own, and
 09665:         without a claim it is left out of the write and out of the
 09666:         table the write auto-creates. A claim names one, so a claimed
 09667:         all-null column is written as the claimed type — which is what
 09668:         keeps a batch that happens to hold no value for one column from
 09669:         deciding the shape of the table.
 09670: 
 09671:         The claim a query result carries reads as an ordinary mapping
 09672:         but cannot be edited in place, because every copy of the frame
 09673:         shares it; assign a new mapping to ``df.attrs['questdb']`` to
 09674:         change it. A plain hand-written ``dict`` is read here just the
 09675:         same, in this shape:
 09676: 
 09677:         .. code-block:: python
 09678: 
 09679:             df.attrs['questdb'] = {
 09680:                 'version': 1,
 09681:                 'columns': {
 09682:                     'src_ip': {'kind': 'ipv4'},
 09683:                     'pos': {'kind': 'geohash', 'precision_bits': 20},
 09684:                     'traded_on': {'kind': 'date'},
 09685:                 },
 09686:             }
 09687: 
 09688:         ``version`` must be ``1`` when present, and a mapping without it
 09689:         reads as version 1. The claim's vocabulary can gain kinds, and a
 09690:         client applying a version it does not understand would write the
 09691:         wrong column type, which is the outcome the claim exists to
 09692:         prevent, so a mapping carrying any other version is not read and
 09693:         every column in it is ignored. A claim, or a column's entry in
 09694:         it, that is not read is reported through the ``questdb`` logger;
 09695:         the write goes ahead either way. ``kind`` is one of
 09696:         ``'uuid'``, ``'long256'``, ``'ipv4'``, ``'char'``, ``'geohash'``,
 09697:         or ``'date'`` — the types whose claim cannot always ride on a pandas
 09698:         dtype. ``precision_bits`` accompanies ``'geohash'`` alone. A
 09699:         ``'date'`` claim restores the DATE type after plain pandas has
 09700:         represented it as NumPy ``datetime64[ms]``. Naming a column that is
 09701:         not in the frame is not an error; the entry is skipped.
 09702: 
 09703:         A ``pa.Table`` or ``pa.RecordBatch`` from
 09704:         :meth:`QueryResult.to_arrow` or :meth:`QueryResult.iter_arrow`
 09705:         carries the same claims in Arrow field metadata, as a
 09706:         ``questdb.column_type`` key on every field, and this method
 09707:         passes that metadata to the native client unchanged. A field
 09708:         claim the field's Arrow type cannot carry — ``'short'`` on
 09709:         ``pa.int32()``, ``'ipv4'`` on ``pa.int64()`` — makes this method
 09710:         raise :class:`QuestDBError <questdb.QuestDBError>`, with ``code``
 09711:         set to ``QuestDBErrorCode.ArrowIngest``, before anything is sent.
 09712:         This stricter rule is deliberate. Field metadata is the input
 09713:         contract of the native Arrow ingest, which refuses such a field
 09714:         in every language that uses it. A field claim also goes stale
 09715:         only when the old field is carried onto a new type: ``Table.cast``
 09716:         with a schema built from ``field.with_type(...)``, or
 09717:         ``pa.concat_tables(..., promote_options='permissive')`` with the
 09718:         claimed table first. Casting to a schema built from scratch,
 09719:         ``set_column`` by name, and a polars or pandas round trip all
 09720:         build fields without the key. ``df.attrs`` belongs to the whole
 09721:         frame and survives ``astype`` and arithmetic, so a stale claim
 09722:         there is the normal case and is logged instead. To write a
 09723:         retyped column, drop its metadata:
 09724: 
 09725:         .. code-block:: python
 09726: 
 09727:             i = table.schema.get_field_index('col')
 09728:             table = table.cast(table.schema.set(
 09729:                 i, table.schema.field(i).remove_metadata()))
 09730: 
 09731:         ``max_rows_per_batch`` sets the pipelining granularity, not a
 09732:         safety limit: any batch exceeding the negotiated per-batch byte
 09733:         cap is split regardless of it, and a single row is never bounded
 09734:         by it. Each batch is one unit of client memory and server-side
 09735:         apply. The first successful batch on a fresh connection is a commit
 09736:         boundary. Sliceable Arrow inputs add another checkpoint about every
 09737:         100 batches, so ``max_rows_per_batch * 100`` rows approximates the
 09738:         maximum periodic uncommitted tail, not a whole-source replay window.
 09739:         The NumPy planner pipelines the remaining batches until its final
 09740:         commit. Either path may checkpoint earlier when deferred capacity
 09741:         fills. Raise ``max_rows_per_batch`` for narrow numeric
 09742:         rows; lower it for very wide rows or tight memory. Streaming Arrow
 09743:         input (``pa.RecordBatchReader``) is not re-batched — the producer's
 09744:         batch size governs its checkpoint window.
 09745:         """
+09746:         cdef qdb_pystr_buf* b = NULL
  __pyx_v_b = NULL;
+09747:         cdef dataframe_plan_t plan = dataframe_plan_blank()
  __pyx_v_plan = __pyx_f_7questdb_7_client_dataframe_plan_blank();
+09748:         cdef questdb_db* db = NULL
  __pyx_v_db = NULL;
+09749:         cdef bint db_use = False
  __pyx_v_db_use = 0;
 09750:         cdef direct_conn_source_t src
+09751:         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, 9751, __pyx_L1_error)
  __pyx_v_db = __pyx_t_1;
+09752:         db_use = True
  __pyx_v_db_use = 1;
+09753:         try:
  /*try:*/ {
 09754:             # Claimed inside the `try`, and after `_begin_db_use`,
 09755:             # which raises on a closed handle: an allocation made
 09756:             # ahead of that raise has nothing to free it, so a retry
 09757:             # loop against a closed handle leaks one per attempt.
+09758:             b = qdb_pystr_buf_new()
    __pyx_v_b = qdb_pystr_buf_new();
+09759:             src.db = db
    __pyx_v_src.db = __pyx_v_db;
+09760:             src.opts = NULL
    __pyx_v_src.opts = NULL;
+09761:             _direct_dataframe_run(
    __pyx_t_3 = __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); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9761, __pyx_L4_error)


 09762:                 &src,
 09763:                 questdb_db_reconnect_max_duration_ms(db) / 1000.0,
 09764:                 b,
 09765:                 &plan,
 09766:                 df,
 09767:                 table_name,
 09768:                 table_name_col,
 09769:                 symbols,
 09770:                 at,
+09771:                 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, 9771, __pyx_L4_error)
 09772:                 schema_overrides)
+09773:             return self
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF((PyObject *)__pyx_v_self);
        __pyx_r = ((PyObject *)__pyx_v_self);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L3_return;
  }
 09774:         finally:
+09775:             if b != NULL:
  /*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_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;
      {
        __pyx_t_13 = (__pyx_v_b != NULL);

        if (__pyx_t_13) {
/* … */
        }
/* … */
      __pyx_t_13 = (__pyx_v_b != NULL);

      if (__pyx_t_13) {
/* … */
      }
+09776:                 qdb_pystr_buf_free(b)
          qdb_pystr_buf_free(__pyx_v_b);
/* … */
        qdb_pystr_buf_free(__pyx_v_b);
+09777:             if db_use:
        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;
    }
  }
+09778:                 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, 9778, __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, 9778, __pyx_L1_error)
 09779: 
+09780:     def execute(self, str sql, object binds=None, *, object timeout=None):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_11execute(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_10execute, "\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\047s SYMBOL dictionary is left untouched.\n\n        ``binds`` and ``timeout`` behave exactly as on :meth:`query`.\n\n        Returns the statement\047s ``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_11execute = {"execute", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_11execute, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_10execute};
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_11execute(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 9780, __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, 9780, __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, 9780, __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, 9780, __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, 9780, __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, 9780, __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, 9780, __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, 9780, __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, 9780, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_10execute(((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_10execute(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_20 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 9780, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_timeout, Py_None) < (0)) __PYX_ERR(0, 9780, __pyx_L1_error)
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_11execute, __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[126])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 9780, __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[49]);
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_17, __pyx_t_20);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_execute_2, __pyx_t_17) < (0)) __PYX_ERR(0, 9780, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 09781:         """
 09782:         Run a statement and discard whatever it returns.
 09783: 
 09784:         Executes ``sql`` like :meth:`query`, drains the result to its
 09785:         clean end and returns the pooled connection — the pattern DDL
 09786:         and DML otherwise need spelled out as
 09787:         ``with db.query(sql) as r: r.to_pandas()``. Statement output
 09788:         (a ``COPY`` status row, admin-function rows, a stray
 09789:         ``SELECT``) is discarded; use :meth:`query` when you want the
 09790:         result. The connection's SYMBOL dictionary is left untouched.
 09791: 
 09792:         ``binds`` and ``timeout`` behave exactly as on :meth:`query`.
 09793: 
 09794:         Returns the statement's ``EXEC_DONE`` report as an
 09795:         :class:`ExecDone` named tuple ``(op_type, rows_affected)``, or
 09796:         ``None`` for a statement that streamed a result set instead (a
 09797:         ``SELECT``). See :attr:`QueryResult.exec_done` for the caveats on
 09798:         ``rows_affected``.
 09799:         """
+09800:         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, 9800, __pyx_L1_error)

+09801:         try:
  /*try:*/ {
+09802:             result = self.query(
    __pyx_t_3 = ((PyObject *)__pyx_v_self);
    __Pyx_INCREF(__pyx_t_3);
/* … */
  {
    PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_reset_symbol_dict, __pyx_mstate_global->__pyx_n_u_timeout};
    __pyx_mstate_global->__pyx_tuple[33] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[33])) __PYX_ERR(0, 9802, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[33]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[33]);
+09803:                 sql, binds, reset_symbol_dict=False, timeout=timeout)
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[5] = {__pyx_t_3, __pyx_v_sql, __pyx_v_binds, Py_False, __pyx_v_timeout};
      #if CYTHON_VECTORCALL
      __pyx_t_5 = __pyx_mstate_global->__pyx_tuple[33];
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 9802, __pyx_L4_error)
      __Pyx_INCREF(__pyx_t_5);
      #else
      {
        PyObject *__pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_reset_symbol_dict, __pyx_mstate_global->__pyx_n_u_timeout};
        __pyx_t_5 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+3, 2);
        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 9802, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      #endif
      __pyx_t_2 = __Pyx_Object_VectorcallMethodKwds((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, 9802, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_v_result = __pyx_t_2;
    __pyx_t_2 = 0;
+09804:             try:
    /*try:*/ {
+09805:                 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, __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, 9805, __pyx_L7_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+09806:                 return result.exec_done
      __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, 9806, __pyx_L7_error)
      __Pyx_GOTREF(__pyx_t_2);
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __pyx_r = __pyx_t_2;
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      __pyx_t_2 = 0;
      goto __pyx_L6_return;
    }
 09807:             finally:
+09808:                 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, 9808, __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, 9808, __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;
      }
    }
  }
 09809:         finally:
+09810:             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_8 = __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, 9810, __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_8;
      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, 9810, __pyx_L1_error)
      __pyx_r = __pyx_t_9;
      __pyx_t_9 = 0;
      goto __pyx_L0;
    }
  }
 09811: 
+09812:     def query(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_13query(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_12query, "\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                    \047SELECT * FROM trades WHERE ts > $1 AND sym = $2\047,\n                    [datetime.datetime(2026, 7, 1), \047BTC-USD\047])\n\n        :param reset_symbol_dict: When ``True`` (the default), the server\n            resets the connection\047s 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\047s\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\047s ``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\047s\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:`QueryResult`. 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\047s\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_13query = {"query", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_13query, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_12query};
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_13query(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 9812, __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, 9812, __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, 9812, __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, 9812, __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_12query(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_17 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 9812, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
/* … */
  __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_13query, __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[127])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 9812, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_20, __pyx_mstate_global->__pyx_tuple[49]);
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_20, __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_query, __pyx_t_20) < (0)) __PYX_ERR(0, 9812, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 09813:             self,
 09814:             str sql,
+09815:             object binds=None,
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
 09816:             *,
+09817:             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, 9812, __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, 9814, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_12query(((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_17, __pyx_mstate_global->__pyx_n_u_reset_symbol_dict, Py_True) < (0)) __PYX_ERR(0, 9812, __pyx_L1_error)
+09818:             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, 9812, __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, 9812, __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, 9812, __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, 9817, __pyx_L3_error)
    } else {
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_timeout, Py_None) < (0)) __PYX_ERR(0, 9812, __pyx_L1_error)
 09819:         """
 09820:         Execute a SQL query and return a :class:`QueryResult`.
 09821: 
 09822:         Egress goes through the QuestDB Wire Protocol (QWP/WebSocket)
 09823:         ``/read/v1`` endpoint. The reader is borrowed from the same
 09824:         connection pool that hosts the ingress writers and is returned to
 09825:         the pool when the returned :class:`QueryResult` is consumed or
 09826:         closed (a poisoned connection is dropped instead). Auth / TLS
 09827:         settings apply to both directions.
 09828: 
 09829:         To run several queries on one pooled connection, lease a
 09830:         :class:`PooledReader` with :meth:`reader` instead.
 09831: 
 09832:         :param sql: SQL text to execute. Forwarded verbatim to QuestDB.
 09833: 
 09834:         :param binds: Positional bind parameters matching the ``$1``..``$N``
 09835:             placeholders in ``sql``, as a list or tuple. Always prefer binds
 09836:             over interpolating values into the SQL text — they take no
 09837:             escaping and keep types exact. Supported Python types and their
 09838:             QuestDB bind types:
 09839: 
 09840:             - ``None`` → SQL NULL (bound as a VARCHAR null)
 09841:             - ``bool`` → BOOLEAN
 09842:             - ``int`` → LONG (must fit signed 64-bit)
 09843:             - ``float`` → DOUBLE
 09844:             - ``str`` → VARCHAR
 09845:             - ``datetime.datetime`` → TIMESTAMP (microseconds; a naive
 09846:               value is interpreted as UTC, the same rule as everywhere else
 09847:               in the API)
 09848:             - :class:`TimestampMicros` → TIMESTAMP
 09849:             - :class:`TimestampNanos` → TIMESTAMP_NS
 09850:             - ``datetime.date`` → DATE
 09851:             - ``decimal.Decimal`` → the narrowest DECIMAL that holds it,
 09852:               with its fractional digits as the scale (up to 76 digits and
 09853:               scale 76; NaN and infinities raise :class:`ValueError`)
 09854:             - ``uuid.UUID`` → UUID
 09855: 
 09856:             Any other type raises :class:`TypeError` naming the placeholder.
 09857: 
 09858:             .. code-block:: python
 09859: 
 09860:                 res = db.query(
 09861:                     'SELECT * FROM trades WHERE ts > $1 AND sym = $2',
 09862:                     [datetime.datetime(2026, 7, 1), 'BTC-USD'])
 09863: 
 09864:         :param reset_symbol_dict: When ``True`` (the default), the server
 09865:             resets the connection's SYMBOL dictionary before this query so it
 09866:             never inherits symbols from earlier queries on the pooled
 09867:             connection (query-scoped dict), avoiding cross-query dictionary
 09868:             bloat in ``to_polars()`` / ``to_pandas()``. Set ``False`` to keep
 09869:             the dictionary warm across repeated identical queries. No-op
 09870:             against servers that predate the capability.
 09871: 
 09872:         :param timeout: Run this query under its own budget instead of the
 09873:             server-wide ``query.timeout``, overriding the connect string's
 09874:             ``query_timeout_ms``. An ``int`` is milliseconds; a
 09875:             ``datetime.timedelta`` works too, with a positive value below
 09876:             one millisecond rounded *up* to 1 ms. ``None`` (the default)
 09877:             keeps the connect string's ``query_timeout_ms``; ``0`` clears
 09878:             it. Requires a server advertising ``CAP_QUERY_TIMEOUT``: against
 09879:             an older one a non-zero timeout is refused before anything is
 09880:             sent, with ``QuestDBErrorCode.UnsupportedServer``, rather than
 09881:             silently running under the server default; the connection is
 09882:             untouched, so pass ``timeout=0`` or raise the server's
 09883:             ``query.timeout`` instead. On expiry the error carries
 09884:             ``QuestDBErrorCode.QueryTimeout`` and the connection stays
 09885:             usable — but do not retry a write on it: a statement that
 09886:             outlives its timeout is reported as done instead, and a DDL /
 09887:             INSERT / UPDATE that timed out waiting for the table writer may
 09888:             still be applied.
 09889: 
 09890:         :return: A :class:`QueryResult`. Materialise it via
 09891:             ``iter_rows()``, ``to_pandas()``, ``to_arrow()``,
 09892:             ``iter_arrow()``, ``iter_pandas()``, or the
 09893:             ``__arrow_c_stream__`` PyCapsule protocol.
 09894: 
 09895:         Sentinel-value collisions in the result frame round-trip QuestDB's
 09896:         contract: ``INT64_MIN`` in a LONG column, NaN in DOUBLE / FLOAT,
 09897:         and the sentinel values for INT / DATE / TIMESTAMP /
 09898:         TIMESTAMP_NS / CHAR / UUID / LONG256 / IPV4 are all interpreted
 09899:         as NULL by QuestDB and cannot be distinguished from legitimate
 09900:         occurrences of those values. GEOHASH has no such sentinel, so a
 09901:         NULL GEOHASH stays distinct from every value.
 09902:         """
 09903:         # Borrow a reader from the same `questdb_db` pool that hosts
 09904:         # the ingress writers. The pool amortises TCP+TLS handshake
 09905:         # cost across many `QuestDB.query()` calls: the first call
 09906:         # opens a connection, subsequent calls hit the idle-list
 09907:         # cache. See `c-questdb-client/questdb-rs/src/ingress/
 09908:         # column_sender/db.rs` for the pool's structure.
 09909:         cdef _ReaderHandle reader_handle
 09910:         cdef _CursorHandle cursor_handle
 09911:         cdef questdb_db* db
+09912:         if sql is None:
  __pyx_t_1 = (__pyx_v_sql == ((PyObject*)Py_None));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+09913:             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, 9913, __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, 9913, __pyx_L1_error)
 09914:                 'query() requires a sql string; to run several queries '
 09915:                 'on one pooled connection, lease a PooledReader with '
 09916:                 'reader() instead.')
+09917:         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)) {
/* … */
  }
+09918:             raise TypeError(
    __pyx_t_3 = NULL;
+09919:                 '"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, 9919, __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, 9918, __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, 9918, __pyx_L1_error)
+09920:                 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, 9920, __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, 9920, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+09921:         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, 9921, __pyx_L1_error)
  __pyx_v_timeout_ms = __pyx_t_9;
+09922:         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, 9922, __pyx_L1_error)
  __pyx_v_db = __pyx_t_10;
+09923:         try:
  /*try:*/ {
+09924:             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, 9924, __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;
+09925:             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:;
    }
  }
+09926:                 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, 9926, __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;
 09927:                     reader_handle, sql, binds, reset_symbol_dict, True,
 09928:                     timeout_ms)
+09929:             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, 9929, __pyx_L14_except_error)
        __Pyx_XGOTREF(__pyx_t_2);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_3);
+09930:                 reader_handle._close()
        ((struct __pyx_vtabstruct_7questdb_7_client__ReaderHandle *)__pyx_v_reader_handle->__pyx_vtab)->_close(__pyx_v_reader_handle);
+09931:                 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, 9931, __pyx_L14_except_error)
      }
 09932:         finally:
+09933:             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, 9933, __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, 9933, __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:;
  }
+09934:         return QueryResult(cursor_handle)
  __pyx_t_7 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QueryResult); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9934, __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, 9934, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_3;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_3 = 0;
  goto __pyx_L0;
 09935: 
+09936:     def reader(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_15reader(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_14reader, "\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(\047SELECT * FROM t1\047).to_pandas()\n                r2 = r.query(\n                    \047SELECT * FROM t2\047,\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_15reader = {"reader", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_15reader, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_14reader};
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_15reader(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_14reader(((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_14reader(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_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_15reader, __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[128])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 9936, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_reader, __pyx_t_20) < (0)) __PYX_ERR(0, 9936, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 09937:         """
 09938:         Borrow a context-managed :class:`PooledReader` lease from the pool.
 09939: 
 09940:         The read-side twin of :meth:`sender`: the lease holds one pooled
 09941:         reader connection for its lifetime and runs queries on it
 09942:         sequentially via :meth:`PooledReader.query`.
 09943: 
 09944:         .. code-block:: python
 09945: 
 09946:             with db.reader() as r:
 09947:                 r1 = r.query('SELECT * FROM t1').to_pandas()
 09948:                 r2 = r.query(
 09949:                     'SELECT * FROM t2',
 09950:                     reset_symbol_dict=False).to_pandas()
 09951: 
 09952:         The lease counts as an active use of the handle until it is
 09953:         closed: :meth:`QuestDB.close` waits for outstanding leases for as
 09954:         long as its ``timeout`` allows (a minute by default -- see
 09955:         :meth:`close <QuestDB.close>`), and a lease keeps working while
 09956:         the handle drains.
 09957:         """
 09958:         cdef _ReaderHandle reader_handle
 09959:         cdef PooledReader lease
 09960:         cdef questdb_db* db
+09961:         cdef bint db_use = False
  __pyx_v_db_use = 0;
+09962:         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, 9962, __pyx_L1_error)
  __pyx_v_db = __pyx_t_1;
+09963:         db_use = True
  __pyx_v_db_use = 1;
+09964:         try:
  /*try:*/ {
+09965:             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, 9965, __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;
+09966:             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, 9966, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_lease = ((struct __pyx_obj_7questdb_7_client_PooledReader *)__pyx_t_3);
    __pyx_t_3 = 0;
+09967:             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);
+09968:             db_use = False
    __pyx_v_db_use = 0;
+09969:             return lease
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF((PyObject *)__pyx_v_lease);
        __pyx_r = ((PyObject *)__pyx_v_lease);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L3_return;
  }
 09970:         finally:
+09971:             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;
    }
  }
+09972:                 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, 9972, __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, 9972, __pyx_L1_error)
 09973: 
+09974:     def server_info(self) -> ServerInfo:
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_17server_info(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_16server_info, "\n        Return a :class:`ServerInfo` snapshot of the server\047s\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_17server_info = {"server_info", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_17server_info, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_16server_info};
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_17server_info(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_16server_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_16server_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_20 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 9974, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_ServerInfo) < (0)) __PYX_ERR(0, 9974, __pyx_L1_error)
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_17server_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[129])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 9974, __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_20);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_server_info, __pyx_t_17) < (0)) __PYX_ERR(0, 9974, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 09975:         """
 09976:         Return a :class:`ServerInfo` snapshot of the server's
 09977:         ``SERVER_INFO`` handshake: cluster role, failover epoch,
 09978:         negotiated capabilities, handshake wall-clock, and cluster/node
 09979:         identifiers.
 09980: 
 09981:         A reader is borrowed from the connection pool (opening one on
 09982:         first use, exactly like :meth:`query`), sampled, and returned to
 09983:         the pool. The snapshot describes that connection at its last
 09984:         handshake; a later failover is reflected only in snapshots taken
 09985:         after it.
 09986:         """
 09987:         cdef _ReaderHandle reader_handle
 09988:         cdef questdb_db* db
+09989:         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, 9989, __pyx_L1_error)
  __pyx_v_db = __pyx_t_1;
+09990:         try:
  /*try:*/ {
+09991:             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, 9991, __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;
+09992:             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, 9992, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_info = __pyx_t_2;
    __pyx_t_2 = 0;
+09993:             reader_handle._close()
    ((struct __pyx_vtabstruct_7questdb_7_client__ReaderHandle *)__pyx_v_reader_handle->__pyx_vtab)->_close(__pyx_v_reader_handle);
  }
 09994:         finally:
+09995:             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, 9995, __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, 9995, __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:;
  }
+09996:         return info
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_v_info);
      __pyx_r = __pyx_v_info;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 09997: 
+09998:     @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;
}
 09999:     def connection_events_dropped(self) -> int:
 10000:         """
 10001:         Total connection events discarded by the listener inbox's
 10002:         drop-oldest policy. ``0`` when no listener is registered.
 10003:         """
+10004:         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, 10004, __pyx_L1_error)
  __pyx_v_db = __pyx_t_1;
+10005:         try:
  /*try:*/ {
+10006:             return questdb_db_connection_events_dropped(db)
    __pyx_t_2 = __Pyx_PyLong_From_uint64_t(questdb_db_connection_events_dropped(__pyx_v_db)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10006, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L3_return;
  }
 10007:         finally:
+10008:             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, 10008, __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, 10008, __pyx_L1_error)
      __pyx_r = __pyx_t_11;
      __pyx_t_11 = 0;
      goto __pyx_L0;
    }
  }
 10009: 
+10010:     @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;
}
 10011:     def connection_events_delivered(self) -> int:
 10012:         """
 10013:         Total connection events delivered to the listener. ``0`` when no
 10014:         listener is registered.
 10015:         """
+10016:         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, 10016, __pyx_L1_error)
  __pyx_v_db = __pyx_t_1;
+10017:         try:
  /*try:*/ {
+10018:             return questdb_db_connection_events_delivered(db)
    __pyx_t_2 = __Pyx_PyLong_From_uint64_t(questdb_db_connection_events_delivered(__pyx_v_db)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10018, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L3_return;
  }
 10019:         finally:
+10020:             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, 10020, __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, 10020, __pyx_L1_error)
      __pyx_r = __pyx_t_11;
      __pyx_t_11 = 0;
      goto __pyx_L0;
    }
  }
 10021: 
+10022:     @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;
}
 10023:     def error_events_delivered(self) -> int:
 10024:         """
 10025:         Total server rejections delivered to the ``error_handler``
 10026:         (or to the default logging handler when none was registered).
 10027:         """
+10028:         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, 10028, __pyx_L1_error)
  __pyx_v_db = __pyx_t_1;
+10029:         try:
  /*try:*/ {
+10030:             return questdb_db_rejection_events_delivered(db)
    __pyx_t_2 = __Pyx_PyLong_From_uint64_t(questdb_db_rejection_events_delivered(__pyx_v_db)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10030, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L3_return;
  }
 10031:         finally:
+10032:             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, 10032, __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, 10032, __pyx_L1_error)
      __pyx_r = __pyx_t_11;
      __pyx_t_11 = 0;
      goto __pyx_L0;
    }
  }
 10033: 
+10034:     @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;
}
 10035:     def error_events_dropped(self) -> int:
 10036:         """
 10037:         Total server rejections discarded by the handler inbox's
 10038:         drop-oldest policy.
 10039:         """
+10040:         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, 10040, __pyx_L1_error)
  __pyx_v_db = __pyx_t_1;
+10041:         try:
  /*try:*/ {
+10042:             return questdb_db_rejection_events_dropped(db)
    __pyx_t_2 = __Pyx_PyLong_From_uint64_t(questdb_db_rejection_events_dropped(__pyx_v_db)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10042, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L3_return;
  }
 10043:         finally:
+10044:             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, 10044, __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, 10044, __pyx_L1_error)
      __pyx_r = __pyx_t_11;
      __pyx_t_11 = 0;
      goto __pyx_L0;
    }
  }
 10045: 
+10046:     def reap_idle(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_19reap_idle(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_18reap_idle, "\n        Manually reap idle above-pool-size connections.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_19reap_idle = {"reap_idle", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_19reap_idle, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_18reap_idle};
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_19reap_idle(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_18reap_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_18reap_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_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_19reap_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[130])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 10046, __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_reap_idle, __pyx_t_17) < (0)) __PYX_ERR(0, 10046, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 10047:         """
 10048:         Manually reap idle above-pool-size connections.
 10049:         """
 10050:         cdef size_t closed
+10051:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+10052:         cdef questdb_db* db = NULL
  __pyx_v_db = NULL;
+10053:         cdef bint db_use = False
  __pyx_v_db_use = 0;
+10054:         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, 10054, __pyx_L1_error)
  __pyx_v_db = __pyx_t_1;
+10055:         db_use = True
  __pyx_v_db_use = 1;
+10056:         try:
  /*try:*/ {
+10057:             _ensure_doesnt_have_gil(&gs)
    (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+10058:             closed = questdb_db_reap_idle(db)
    __pyx_v_closed = questdb_db_reap_idle(__pyx_v_db);
+10059:             _ensure_has_gil(&gs)
    __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+10060:             return closed
    __pyx_t_2 = __Pyx_PyLong_FromSize_t(__pyx_v_closed); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10060, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L3_return;
  }
 10061:         finally:
+10062:             _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));
+10063:             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;
    }
  }
+10064:                 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, 10064, __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, 10064, __pyx_L1_error)
 10065: 
+10066:     cpdef close(self, object timeout=_CLOSE_TIMEOUT_DEFAULT):
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_21close(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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__37;
  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;
  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 (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #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, 10066, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7questdb_7_client_7QuestDB_21close)) {
        __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, 10066, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        {
          PyObject *__pyx_temp;
          {
            __pyx_temp = __pyx_r;
            __pyx_r = __pyx_t_2;
          }
          __Pyx_XDECREF(__pyx_temp);
        }
        __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_9);
  __Pyx_XDECREF(__pyx_t_22);
  __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_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_21close(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_20close, "\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\047s 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\047s 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 flight.\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\047s 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 five\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\047s 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\047s 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        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_21close = {"close", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_21close, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_20close};
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_21close(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 10066, __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, 10066, __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, 10066, __pyx_L3_error)
      if (!values[0]) values[0] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k__37);
    } 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, 10066, __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__37);
    }
    __pyx_v_timeout = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("close", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 10066, __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_20close(((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_20close(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self, PyObject *__pyx_v_timeout) {
  PyObject *__pyx_r = NULL;
  __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, 10066, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __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_17, __pyx_mstate_global->__pyx_n_u_CLOSE_TIMEOUT_DEFAULT); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 10066, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_mstate_global->__pyx_k__37 = __pyx_t_17;
  __Pyx_GIVEREF(__pyx_t_17);
  __pyx_t_17 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_CLOSE_TIMEOUT_DEFAULT); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 10066, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  {
    PyObject* __pyx_temp[1] = {__pyx_t_17};
    __pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 10066, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_20);
  }
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_21close, __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[131])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 10066, __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_t_20);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_close, __pyx_t_17) < (0)) __PYX_ERR(0, 10066, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
/* … */
struct __pyx_opt_args_7questdb_7_client_7QuestDB_close {
  int __pyx_n;
  PyObject *timeout;
};
 10067:         """
 10068:         Close the client and its connection pool.
 10069: 
 10070:         Closing is one-way. Once a ``close()`` proceeds -- rather
 10071:         than being refused outright, as from inside one of the
 10072:         handle's own calls or callbacks -- the handle refuses new
 10073:         work: ``sender()``, ``reader()``, ``dataframe()``, ``query()``
 10074:         and the rest raise. Work already in flight drains: a call in
 10075:         progress runs to completion, and an outstanding lease keeps
 10076:         working until its holder closes it. The one exception is
 10077:         :meth:`PooledSender.dataframe`, which forwards to
 10078:         :meth:`dataframe` over a connection of its own from the pool,
 10079:         so a load started through a lease after ``close()`` is new work
 10080:         and is refused like any other. The native pool is torn down by
 10081:         the first ``close()`` that finds nothing using the handle, or
 10082:         when the handle itself is collected.
 10083: 
 10084:         Calls on the handle and on its leases are counted per OS
 10085:         thread. With greenlets -- gevent, eventlet, or ``greenlet``
 10086:         used directly -- all greenlets on one thread count as one
 10087:         caller, so ``close()`` is also refused while another greenlet
 10088:         on the same thread is suspended inside a call on the handle or
 10089:         on one of its leases. See :ref:`sender_threading`.
 10090: 
 10091:         ``timeout`` sets how long this call waits for that drain.
 10092:         Calls are the handle's own methods in progress, such as
 10093:         ``dataframe()`` and ``query()``; anything done through a lease
 10094:         counts as that lease, including a long ``lease.dataframe()``
 10095:         already running when ``close()`` starts.
 10096: 
 10097:         - Left out: a call in progress is waited for until it
 10098:           returns, and an outstanding lease for up to a minute. A long
 10099:           load through a lease needs a larger ``timeout``, or ``None``.
 10100:         - A number of seconds: calls and leases alike are waited for
 10101:           up to that long. ``0`` closes only if nothing is in flight.
 10102:         - ``None``: calls and leases alike are waited for until they
 10103:           are done.
 10104: 
 10105:         ``close()`` cannot interrupt a call in progress. A
 10106:         ``dataframe()`` reading a stream that never ends, or one
 10107:         waiting on the very thread that calls ``close()``, keeps it
 10108:         waiting until ``timeout`` runs out -- and, with no limit on
 10109:         calls, for ever. A lease comes back only when its holder
 10110:         closes it, so one held by the calling thread, or by a thread
 10111:         that has since finished, never will: close every lease before
 10112:         closing the handle.
 10113: 
 10114:         When the limit runs out, this call raises
 10115:         :class:`QuestDBError <questdb.QuestDBError>` with ``code`` set
 10116:         to ``QuestDBErrorCode.InvalidApiCall``, naming how many leases
 10117:         and calls are still outstanding. The handle stays closing --
 10118:         it never goes back to open -- and a later ``close()``, with
 10119:         any ``timeout``, resumes the wait and finishes the teardown
 10120:         once the last of them is done. Waiting for a concurrent
 10121:         ``close()`` on another thread to finish its teardown is
 10122:         limited too: a number of seconds covers that wait and the
 10123:         drain together; left out, that wait gets a minute of its own;
 10124:         ``None`` puts no limit on it.
 10125: 
 10126:         ``timeout`` covers only this waiting. The teardown then spends
 10127:         up to ``close_flush_timeout_millis`` (5 seconds by default)
 10128:         draining each sender's queue. An in-memory queue drops whatever
 10129:         it has not delivered by then; a disk-backed queue (``sf_dir``)
 10130:         keeps it for replay on restart. The drop is not reported to
 10131:         Python: it raises nothing and logs nothing through the
 10132:         ``questdb`` logger. To be sure rows have arrived, close each
 10133:         lease with ``close(wait=True)`` before closing the handle.
 10134: 
 10135:         While it waits, it reports what it is still waiting for
 10136:         through the ``questdb`` logger at ``WARNING``: every five
 10137:         seconds for the first minute, then once a minute.
 10138: 
 10139:         A number of seconds is a budget for the whole close,
 10140:         including the close a ``with`` block makes on its way out:
 10141:         when the most recent ``close()`` on the handle was given one,
 10142:         leaving the block waits only for what is left of it, and not
 10143:         at all once it has run out. To bound leaving a ``with`` block,
 10144:         call ``close(timeout=...)`` as the block's last statement.
 10145:         Otherwise, leaving the block closes with the limits of a
 10146:         ``close()`` with no arguments.
 10147: 
 10148:         Idempotent: closing a closed handle returns without doing
 10149:         anything, and no ``close()`` returns success unless the
 10150:         teardown has run -- when several race, one of them runs it and
 10151:         the others return once it is done.
 10152: 
 10153:         When called from inside one of this handle's own
 10154:         ``error_handler`` / ``connection_listener`` callbacks, it
 10155:         never waits -- while the callback runs, that thread delivers
 10156:         nothing, including whatever a wait would need. It closes
 10157:         immediately when nothing is using the handle; it refuses when
 10158:         leases or calls are outstanding (close from another thread to
 10159:         wait for the drain); and when a concurrent ``close()`` is
 10160:         already running it returns without waiting, possibly before
 10161:         that close finishes -- the handle only moves toward closed,
 10162:         never back to open.
 10163:         """
+10164:         cdef questdb_db* db = NULL
  __pyx_v_db = NULL;
+10165:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+10166:         cdef bint closed = False
  __pyx_v_closed = 0;
+10167:         cdef bint locked = False
  __pyx_v_locked = 0;
+10168:         cdef object interrupt = None
  __Pyx_INCREF(Py_None);
  __pyx_v_interrupt = Py_None;
+10169:         cdef bint notice = False
  __pyx_v_notice = 0;
+10170:         cdef size_t notice_leases = 0
  __pyx_v_notice_leases = 0;
+10171:         cdef size_t notice_calls = 0
  __pyx_v_notice_calls = 0;
 10172:         cdef object lease_limit
 10173:         cdef object call_limit
 10174:         # Read before anything is published, so a bad argument changes
 10175:         # nothing for any other thread.
+10176:         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, 10176, __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;
  }
+10177:             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, 10177, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_lease_limit = __pyx_t_1;
    __pyx_t_1 = 0;
+10178:             call_limit = None
    __Pyx_INCREF(Py_None);
    __pyx_v_call_limit = Py_None;
+10179:         elif timeout is None:
  __pyx_t_6 = (__pyx_v_timeout == Py_None);
  if (__pyx_t_6) {
/* … */
    goto __pyx_L3;
  }
+10180:             lease_limit = None
    __Pyx_INCREF(Py_None);
    __pyx_v_lease_limit = Py_None;
+10181:             call_limit = None
    __Pyx_INCREF(Py_None);
    __pyx_v_call_limit = Py_None;
 10182:         else:
+10183:             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, 10183, __pyx_L1_error)
    __pyx_t_1 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10183, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);

    __pyx_v_lease_limit = __pyx_t_1;
    __pyx_t_1 = 0;
+10184:             call_limit = lease_limit
    __Pyx_INCREF(__pyx_v_lease_limit);
    __pyx_v_call_limit = __pyx_v_lease_limit;
  }
  __pyx_L3:;
 10185:         # A lease is returned only by the code holding it, and a lease
 10186:         # about to be closed looks exactly like one nobody will ever
 10187:         # touch again; a call runs until its work is done, and nothing
 10188:         # here can interrupt it. Whether either will finish is
 10189:         # something only the caller can know, so the caller sets the
 10190:         # limits: one deadline for leases and one for calls, either of
 10191:         # which may be absent. Each applies only while something of
 10192:         # its kind is outstanding, and neither count grows once the
 10193:         # handle is closing. Running out leaves the handle closing,
 10194:         # and a later close() resumes the wait.
+10195:         started = time.monotonic()
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10195, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10195, __pyx_L1_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_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_1 = __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_1)) __PYX_ERR(0, 10195, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_started = __pyx_t_1;
  __pyx_t_1 = 0;
 10196:         lease_deadline = (
+10197:             None if lease_limit is None else started + lease_limit)
  __pyx_t_6 = (__pyx_v_lease_limit == Py_None);
  if (__pyx_t_6) {
    __Pyx_INCREF(Py_None);
    __pyx_t_1 = Py_None;
  } else {
    __pyx_t_3 = __Pyx_PyNumber_Add_object_object(__pyx_v_started, __pyx_v_lease_limit); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10197, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
  }

  __pyx_v_lease_deadline = __pyx_t_1;
  __pyx_t_1 = 0;
 10198:         call_deadline = (
+10199:             None if call_limit is None else started + call_limit)
  __pyx_t_6 = (__pyx_v_call_limit == Py_None);
  if (__pyx_t_6) {
    __Pyx_INCREF(Py_None);
    __pyx_t_1 = Py_None;
  } else {
    __pyx_t_3 = __Pyx_PyNumber_Add_object_object(__pyx_v_started, __pyx_v_call_limit); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10199, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
  }

  __pyx_v_call_deadline = __pyx_t_1;
  __pyx_t_1 = 0;
 10200:         # The lock is taken and released through `acquire` and `release`,
 10201:         # the RLock's own C methods, here and at every other place
 10202:         # `close()` and `__exit__` hold it. `Condition.__enter__` and
 10203:         # `__exit__` are written in Python, and a pending Ctrl-C is
 10204:         # raised at the start of the first Python function called after
 10205:         # it arrives. Raised on entry to `Condition.__exit__`, before
 10206:         # that releases the lock, it would leave this thread holding it,
 10207:         # and every other thread using the handle would block on it for
 10208:         # good. A blocked `acquire` can itself be interrupted; it then
 10209:         # raises without taking the lock, before the `try` it guards.
+10210:         self._state_cond.acquire()
  __pyx_t_3 = __pyx_v_self->_state_cond;
  __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_acquire, __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_1)) __PYX_ERR(0, 10210, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+10211:         try:
  /*try:*/ {
 10212:             # A close from inside one of this handle's own calls --
 10213:             # `dataframe()` reading `attrs`, a cell conversion, an
 10214:             # Arrow producer, a lease's own `row()` -- would wait on
 10215:             # the very frame that has to finish first, sit out the
 10216:             # whole bound, and leave the handle closing under its own
 10217:             # caller. Refused before `_closing` is published, so a
 10218:             # refused close changes nothing for any other thread.
+10219:             if self._scoped_call_depth() != 0:
    __pyx_t_8 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_scoped_call_depth(__pyx_v_self); if (unlikely(__pyx_t_8 == ((uintptr_t)((uintptr_t)-1L)) && PyErr_Occurred())) __PYX_ERR(0, 10219, __pyx_L5_error)
    __pyx_t_6 = (__pyx_t_8 != 0);


    if (__pyx_t_6) {
/* … */
    }
+10220:                 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;
 10221:                        'this QuestDB handle. It would wait for that '
 10222:                        'call to finish, which cannot happen while the '
 10223:                        'call is waiting for close(). Close it after '
 10224:                        'the call returns.')
 10225:                 # Only greenlets let another caller be suspended inside
 10226:                 # a call on this OS thread, so only a process that has
 10227:                 # loaded them is told about that case. gevent and
 10228:                 # eventlet both run on `greenlet`.
+10229:                 if 'greenlet' in sys.modules:
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_sys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10229, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_modules); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10229, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_6 = (__Pyx_PySequence_ContainsTF(__pyx_mstate_global->__pyx_n_u_greenlet, __pyx_t_3, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 10229, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (__pyx_t_6) {
/* … */
      }
+10230:                     msg += (' With greenlets, every greenlet on an OS '
        __pyx_t_3 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_v_msg, __pyx_mstate_global->__pyx_kp_u_With_greenlets_every_greenlet_o); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10230, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_msg, ((PyObject*)__pyx_t_3));
        __pyx_t_3 = 0;
 10231:                             'thread counts as the same caller, so this '
 10232:                             'is also refused while another greenlet on '
 10233:                             'this thread is suspended inside a call on '
 10234:                             'the handle or on one of its leases.')
+10235:                 raise QuestDBError(QuestDBErrorCode.InvalidApiCall, msg)
      __pyx_t_1 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10235, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10235, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10235, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_9);
      __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_9, __pyx_v_msg};
        __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_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10235, __pyx_L5_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, 10235, __pyx_L5_error)
 10236:             # A caller dispatching for this handle can wait on
 10237:             # nothing: while its callback frame is out, this thread
 10238:             # delivers no events and the native layer holds a borrow
 10239:             # on it, so anything the drain needs from this thread can
 10240:             # never happen. Refused before `_closing` is published,
 10241:             # like the depth refusal above, so a refused close changes
 10242:             # nothing for any other thread. With nothing outstanding
 10243:             # the close proceeds: there is no wait to refuse.
+10244:             if (self._db != NULL
    __pyx_t_10 = (__pyx_v_self->_db != NULL);

    if (__pyx_t_10) {

    } else {

      __pyx_t_6 = __pyx_t_10;

      goto __pyx_L10_bool_binop_done;
    }
/* … */
    if (unlikely(__pyx_t_6)) {
/* … */
    }
+10245:                     and self._lease_uses + self._call_uses != 0
    __pyx_t_10 = ((__pyx_v_self->_lease_uses + __pyx_v_self->_call_uses) != 0);

    if (__pyx_t_10) {

    } else {

      __pyx_t_6 = __pyx_t_10;

      goto __pyx_L10_bool_binop_done;
    }
+10246:                     and _dispatching_for(self._thread_owner_token)):
    __pyx_t_3 = __pyx_v_self->_thread_owner_token;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_10 = __pyx_f_7questdb_7_client__dispatching_for(__pyx_t_3);

    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    __pyx_t_6 = __pyx_t_10;

    __pyx_L10_bool_binop_done:;
+10247:                 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, 10247, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_9);
+10248:                     QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10248, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10248, __pyx_L5_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_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_5 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_4, __pyx_mstate_global->__pyx_kp_u_close_can_t_wait_for_outstanding};
        __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __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_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10247, __pyx_L5_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, 10247, __pyx_L5_error)
 10249:                     "close() can't wait for outstanding leases or "
 10250:                     "calls from inside this handle's own "
 10251:                     'error_handler or connection_listener callback: '
 10252:                     'while the callback runs, this thread delivers '
 10253:                     'nothing, including whatever the wait needs. '
 10254:                     'Call close() from another thread.')
 10255:             # One-way from here: `_closing` is never cleared, so every
 10256:             # refusal it causes stays true, and the use counts only
 10257:             # move down -- `_begin_db_use` takes no new work once it
 10258:             # is set.
+10259:             self._closing = True
    __pyx_v_self->_closing = 1;
 10260:             # A number of seconds is a budget for the whole close: the
 10261:             # close a `with` block makes on its way out waits only for
 10262:             # what is left of it (see `__exit__`). Only a number sets
 10263:             # `call_deadline`, so the default and `None` clear the
 10264:             # budget, and the way out closes with the default limits.
+10265:             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;
  }
 10266:         finally:
+10267:             self._state_cond.release()
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_9 = __pyx_v_self->_state_cond;
      __Pyx_INCREF(__pyx_t_9);
      __pyx_t_5 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_9, 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_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10267, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 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_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_9 = __pyx_v_self->_state_cond;
        __Pyx_INCREF(__pyx_t_9);
        __pyx_t_5 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_9, 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_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10267, __pyx_L14_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_13;
      goto __pyx_L1_error;
      __pyx_L14_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:;
  }
 10268:         # Each wait below holds the lock only to read state and to
 10269:         # wait on it, and emits its progress notice with the lock
 10270:         # released. A notice runs the caller's logging handlers, which
 10271:         # are free to block or to reach this very handle from another
 10272:         # thread -- a handler that ingests its log lines into QuestDB
 10273:         # does both. While one runs, every lease return, call exit and
 10274:         # refusal still goes through the lock, so the drain being
 10275:         # reported on keeps moving.
+10276:         next_notice = started + 5.0
  __pyx_t_3 = __Pyx_PyFloat_AddObjC(__pyx_v_started, __pyx_mstate_global->__pyx_float_5_0, 5.0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10276, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_next_notice = __pyx_t_3;
  __pyx_t_3 = 0;
+10277:         while True:
  while (1) {
+10278:             notice = False
    __pyx_v_notice = 0;
 10279:             # Held through `acquire` and `release`, as above. Here it
 10280:             # also keeps Python code out of the step from claiming the
 10281:             # pointer to the native teardown: after the claim, the next
 10282:             # code to run is the `release` below and then the `try`
 10283:             # around `questdb_db_close`, so a Ctrl-C arriving in between
 10284:             # stays pending until the teardown's own `finally`, which
 10285:             # records the close first. A second Ctrl-C landing inside
 10286:             # `Condition.wait`'s own re-acquire of the lock can still
 10287:             # leave the lock in a bad state; nothing has been claimed
 10288:             # while this thread waits, so no teardown is skipped.
+10289:             self._state_cond.acquire()
    __pyx_t_9 = __pyx_v_self->_state_cond;
    __Pyx_INCREF(__pyx_t_9);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_9, 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_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10289, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+10290:             try:
    /*try:*/ {
+10291:                 if self._db == NULL:
      __pyx_t_6 = (__pyx_v_self->_db == NULL);

      if (__pyx_t_6) {
/* … */
      }
+10292:                     break
        goto __pyx_L18_break;
+10293:                 if 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) {
/* … */
      }
 10294:                     # Nothing is using the handle. The counts are read
 10295:                     # and the pointer claimed under one hold of the
 10296:                     # lock, which picks exactly one close() to run the
 10297:                     # native teardown, and the pointer stays published
 10298:                     # up to this very point -- so every borrower's
 10299:                     # copy of it was valid for as long as the borrower
 10300:                     # held a use.
+10301:                     db = self._db
        __pyx_t_20 = __pyx_v_self->_db;

        __pyx_v_db = __pyx_t_20;
+10302:                     self._db = NULL
        __pyx_v_self->_db = NULL;
+10303:                     self._close_running = True
        __pyx_v_self->_close_running = 1;
+10304:                     break
        goto __pyx_L18_break;
+10305:                 deadline = None
      __Pyx_INCREF(Py_None);
      __Pyx_XDECREF_SET(__pyx_v_deadline, Py_None);
+10306:                 if self._lease_uses != 0 and lease_deadline is not None:
      __pyx_t_10 = (__pyx_v_self->_lease_uses != 0);

      if (__pyx_t_10) {

      } else {

        __pyx_t_6 = __pyx_t_10;

        goto __pyx_L25_bool_binop_done;
      }
      __pyx_t_10 = (__pyx_v_lease_deadline != Py_None);

      __pyx_t_6 = __pyx_t_10;

      __pyx_L25_bool_binop_done:;
      if (__pyx_t_6) {
/* … */
      }
+10307:                     deadline = lease_deadline
        __Pyx_INCREF(__pyx_v_lease_deadline);
        __Pyx_DECREF_SET(__pyx_v_deadline, __pyx_v_lease_deadline);
+10308:                 if (self._call_uses != 0 and call_deadline is not None
      __pyx_t_10 = (__pyx_v_self->_call_uses != 0);

      if (__pyx_t_10) {

      } else {

        __pyx_t_6 = __pyx_t_10;

        goto __pyx_L28_bool_binop_done;
      }
/* … */
      __pyx_t_10 = (__pyx_v_call_deadline != Py_None);
      if (__pyx_t_10) {

      } else {

        __pyx_t_6 = __pyx_t_10;

        goto __pyx_L28_bool_binop_done;
      }
/* … */
      if (__pyx_t_6) {
/* … */
      }
+10309:                         and (deadline is None or call_deadline < deadline)):
      __pyx_t_10 = (__pyx_v_deadline == Py_None);
      if (!__pyx_t_10) {

      } else {

        __pyx_t_6 = __pyx_t_10;

        goto __pyx_L28_bool_binop_done;
      }
      __pyx_t_10 = __Pyx_PyObject_CompareBoolLt_object_object(__pyx_v_call_deadline, __pyx_v_deadline, Py_LT); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 10309, __pyx_L20_error)

      __pyx_t_6 = __pyx_t_10;

      __pyx_L28_bool_binop_done:;
+10310:                     deadline = call_deadline
        __Pyx_INCREF(__pyx_v_call_deadline);
        __Pyx_DECREF_SET(__pyx_v_deadline, __pyx_v_call_deadline);
+10311:                 now = time.monotonic()
      __pyx_t_9 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10311, __pyx_L20_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, 10311, __pyx_L20_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_9 = PyMethod_GET_SELF(__pyx_t_2);
        assert(__pyx_t_9);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
        __pyx_t_5 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_9, NULL};
        __pyx_t_3 = __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_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10311, __pyx_L20_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      __Pyx_XDECREF_SET(__pyx_v_now, __pyx_t_3);
      __pyx_t_3 = 0;
+10312:                 if deadline is not None and now >= deadline:
      __pyx_t_10 = (__pyx_v_deadline != Py_None);
      if (__pyx_t_10) {

      } else {

        __pyx_t_6 = __pyx_t_10;

        goto __pyx_L33_bool_binop_done;
      }
      __pyx_t_10 = __Pyx_PyObject_CompareBoolGe_object_object(__pyx_v_now, __pyx_v_deadline, Py_GE); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 10312, __pyx_L20_error)

      __pyx_t_6 = __pyx_t_10;

      __pyx_L33_bool_binop_done:;
      if (unlikely(__pyx_t_6)) {
/* … */
      }
+10313:                     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, 10313, __pyx_L20_error)
        __Pyx_GOTREF(__pyx_t_9);
+10314:                         QuestDBErrorCode.InvalidApiCall,
        __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10314, __pyx_L20_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10314, __pyx_L20_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+10315:                         _close_gave_up_message(
        __pyx_t_4 = __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_4)) __PYX_ERR(0, 10315, __pyx_L20_error)
        __Pyx_GOTREF(__pyx_t_4);

        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_1, __pyx_t_4};
          __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __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_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10313, __pyx_L20_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, 10313, __pyx_L20_error)
+10316:                             deadline - started,
        __pyx_t_4 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_deadline, __pyx_v_started); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10316, __pyx_L20_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_7 = __Pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 10316, __pyx_L20_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 10317:                             self._lease_uses,
 10318:                             self._call_uses))
 10319:                 # Woken at whichever is sooner, the next notice or the
 10320:                 # limit, so a limit holds whatever it is set to rather
 10321:                 # than only at the notice cadence. A wait that runs out
 10322:                 # with work still outstanding is reported either way.
+10323:                 wait_s = next_notice - now
      __pyx_t_3 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_next_notice, __pyx_v_now); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10323, __pyx_L20_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_XDECREF_SET(__pyx_v_wait_s, __pyx_t_3);
      __pyx_t_3 = 0;
+10324:                 if deadline is not None and deadline - now < wait_s:
      __pyx_t_10 = (__pyx_v_deadline != Py_None);
      if (__pyx_t_10) {

      } else {

        __pyx_t_6 = __pyx_t_10;

        goto __pyx_L36_bool_binop_done;
      }
      __pyx_t_3 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_deadline, __pyx_v_now); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10324, __pyx_L20_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_10 = __Pyx_PyObject_CompareBoolLt_object_object(__pyx_t_3, __pyx_v_wait_s, Py_LT); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 10324, __pyx_L20_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

      __pyx_t_6 = __pyx_t_10;

      __pyx_L36_bool_binop_done:;
      if (__pyx_t_6) {
/* … */
      }
+10325:                     wait_s = deadline - now
        __pyx_t_3 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_deadline, __pyx_v_now); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10325, __pyx_L20_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_wait_s, __pyx_t_3);
        __pyx_t_3 = 0;
+10326:                 if (not self._state_cond.wait(timeout=max(wait_s, 0.0))
      __pyx_t_9 = __pyx_v_self->_state_cond;
      __Pyx_INCREF(__pyx_t_9);

      __pyx_t_7 = 0.0;
      __Pyx_INCREF(__pyx_v_wait_s);
      __pyx_t_4 = __pyx_v_wait_s;
      __pyx_t_2 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10326, __pyx_L20_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_10 = __Pyx_PyObject_CompareBoolGt_float_object(__pyx_t_2, __pyx_t_4, Py_GT); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 10326, __pyx_L20_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (__pyx_t_10) {
        __pyx_t_2 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10326, __pyx_L20_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_1 = __pyx_t_2;
        __pyx_t_2 = 0;
      } else {
        __Pyx_INCREF(__pyx_t_4);
        __pyx_t_1 = __pyx_t_4;
      }

      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_5 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_1};
        #if CYTHON_VECTORCALL
        __pyx_t_4 = __pyx_mstate_global->__pyx_tuple[34];
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10326, __pyx_L20_error)
        __Pyx_INCREF(__pyx_t_4);
        #else
        {
          PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_timeout};
          __pyx_t_4 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10326, __pyx_L20_error)
          __Pyx_GOTREF(__pyx_t_4);
        }
        #endif
        __pyx_t_3 = __Pyx_Object_VectorcallMethodKwds((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_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10326, __pyx_L20_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 10326, __pyx_L20_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_21 = (!__pyx_t_10);


      if (__pyx_t_21) {

      } else {

        __pyx_t_6 = __pyx_t_21;

        goto __pyx_L39_bool_binop_done;
      }
/* … */
      if (__pyx_t_6) {
/* … */
      }
    }
/* … */
  {
    PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_timeout};
    __pyx_mstate_global->__pyx_tuple[34] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[34])) __PYX_ERR(0, 10326, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[34]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[34]);
 10327:                         and (self._lease_uses
+10328:                              + self._call_uses) != 0):
      __pyx_t_21 = ((__pyx_v_self->_lease_uses + __pyx_v_self->_call_uses) != 0);


      __pyx_t_6 = __pyx_t_21;

      __pyx_L39_bool_binop_done:;
+10329:                     notice = True
        __pyx_v_notice = 1;
+10330:                     notice_leases = self._lease_uses
        __pyx_t_5 = __pyx_v_self->_lease_uses;

        __pyx_v_notice_leases = __pyx_t_5;
+10331:                     notice_calls = self._call_uses
        __pyx_t_5 = __pyx_v_self->_call_uses;

        __pyx_v_notice_calls = __pyx_t_5;
 10332:                     # Every five seconds for the first minute, then
 10333:                     # once a minute: a wait for a long load would
 10334:                     # otherwise log a line every five seconds for as
 10335:                     # long as the load runs.
+10336:                     now = time.monotonic()
        __pyx_t_4 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10336, __pyx_L20_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10336, __pyx_L20_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_5 = 1;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_9))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_9);
          assert(__pyx_t_4);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
          __pyx_t_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
          __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __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_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10336, __pyx_L20_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        __Pyx_DECREF_SET(__pyx_v_now, __pyx_t_3);
        __pyx_t_3 = 0;
+10337:                     next_notice = now + (
        __pyx_t_9 = __Pyx_PyNumber_Add_object_float(__pyx_v_now, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10337, __pyx_L20_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF_SET(__pyx_v_next_notice, __pyx_t_9);
        __pyx_t_9 = 0;
+10338:                         5.0 if now - started < 60.0 else 60.0)
        __pyx_t_9 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_now, __pyx_v_started); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10338, __pyx_L20_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_6 = __Pyx_PyObject_CompareBoolLt_object_float(__pyx_t_9, __pyx_mstate_global->__pyx_float_60_0, Py_LT); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 10338, __pyx_L20_error)
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (__pyx_t_6) {
          __Pyx_INCREF(__pyx_mstate_global->__pyx_float_5_0);
          __pyx_t_3 = __pyx_mstate_global->__pyx_float_5_0;
        } else {
          __Pyx_INCREF(__pyx_mstate_global->__pyx_float_60_0);
          __pyx_t_3 = __pyx_mstate_global->__pyx_float_60_0;
        }

 10339:             finally:
+10340:                 self._state_cond.release()
    /*finally:*/ {
      /*normal exit:*/{
        __pyx_t_3 = __pyx_v_self->_state_cond;
        __Pyx_INCREF(__pyx_t_3);
        __pyx_t_5 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
          __pyx_t_9 = __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_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10340, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
        }
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        goto __pyx_L21;
      }
      __pyx_L20_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_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_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_13 = __pyx_filename;
        {
          __pyx_t_3 = __pyx_v_self->_state_cond;
          __Pyx_INCREF(__pyx_t_3);
          __pyx_t_5 = 0;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
            __pyx_t_9 = __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_3); __pyx_t_3 = 0;
            if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10340, __pyx_L44_error)
            __Pyx_GOTREF(__pyx_t_9);
          }
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 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_13;
        goto __pyx_L1_error;
        __pyx_L44_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_L18_break: {
        __pyx_t_3 = __pyx_v_self->_state_cond;
        __Pyx_INCREF(__pyx_t_3);
        __pyx_t_5 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
          __pyx_t_9 = __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_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10340, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
        }
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        goto __pyx_L16_break;
      }
      __pyx_L21:;
    }
+10341:             if notice:
    if (__pyx_v_notice) {
/* … */
    }
  }
  __pyx_L16_break:;
 10342:                 # Logged rather than warned, like every other
 10343:                 # notice this client emits from a place the
 10344:                 # caller did not ask for one: a warning turns
 10345:                 # into an exception under `-W error`, which
 10346:                 # would end the wait at the first notice and
 10347:                 # hand back the wrong exception type.
+10348:                 logging.getLogger('questdb').warning(
      __pyx_t_1 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10348, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_22 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 10348, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_22);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_5 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_22))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_22);
        assert(__pyx_t_1);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_22);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_22, __pyx__function);
        __pyx_t_5 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_mstate_global->__pyx_n_u_questdb};
        __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_22, __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_22); __pyx_t_22 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10348, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __pyx_t_3 = __pyx_t_4;
      __Pyx_INCREF(__pyx_t_3);
 10349:                     'QuestDB.close() is waiting for %d '
 10350:                     'outstanding lease(s) and %d in-progress '
 10351:                     'call(s) to finish.',
+10352:                     notice_leases,
      __pyx_t_22 = __Pyx_PyLong_FromSize_t(__pyx_v_notice_leases); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 10352, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_22);
+10353:                     notice_calls)
      __pyx_t_1 = __Pyx_PyLong_FromSize_t(__pyx_v_notice_calls); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10353, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_5 = 0;
      {
        PyObject *__pyx_callargs[4] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_QuestDB_close_is_waiting_for_d_o, __pyx_t_22, __pyx_t_1};
        __pyx_t_9 = __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_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 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, 10348, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
      }
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+10354:         if db == NULL:
  __pyx_t_6 = (__pyx_v_db == NULL);

  if (__pyx_t_6) {
/* … */
  }
 10355:             # Another close() claimed the pointer, or the handle
 10356:             # never opened. A caller dispatching for this handle
 10357:             # must not wait for the teardown to finish: the
 10358:             # in-flight closer joins this very thread. Returning
 10359:             # early is safe because closing cannot be undone --
 10360:             # the handle only moves toward closed.
+10361:             if _dispatching_for(self._thread_owner_token):
    __pyx_t_9 = __pyx_v_self->_thread_owner_token;
    __Pyx_INCREF(__pyx_t_9);
    __pyx_t_6 = __pyx_f_7questdb_7_client__dispatching_for(__pyx_t_9);

    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (__pyx_t_6) {
/* … */
    }
+10362:                 return
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __pyx_r = Py_None; __Pyx_INCREF(Py_None);
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      goto __pyx_L0;
 10363:             # A close() of this handle from a finalizer that a
 10364:             # garbage-collection pass runs on this thread while this
 10365:             # thread holds the pointer (after taking it, before
 10366:             # publishing the close) waits below for its own close
 10367:             # until its limit runs out, then raises. This is
 10368:             # deliberately left alone. It needs an unreachable object
 10369:             # whose finalizer closes this very handle, collected in a
 10370:             # window of a few Python operations, and it loses nothing.
 10371:             # The ways out are poor: returning early can report
 10372:             # success before the teardown has run, and a refusal needs
 10373:             # the tearing-down thread tracked for a case that
 10374:             # practically never happens.
 10375:             #
 10376:             # A number of seconds is one budget for the whole call, so
 10377:             # this wait gets only what the drain left of it and ends
 10378:             # at `call_deadline`. The default and `None` set no
 10379:             # budget: this wait gets a bound of its own, starting
 10380:             # when it does -- a minute by default, none for None.
+10381:             if call_deadline is not None:
    __pyx_t_6 = (__pyx_v_call_deadline != Py_None);
    if (__pyx_t_6) {
/* … */
      goto __pyx_L48;
    }
+10382:                 deadline = call_deadline
      __Pyx_INCREF(__pyx_v_call_deadline);
      __Pyx_XDECREF_SET(__pyx_v_deadline, __pyx_v_call_deadline);
 10383:             else:
+10384:                 deadline = (None if lease_limit is None
    /*else*/ {
      __pyx_t_6 = (__pyx_v_lease_limit == Py_None);
      if (__pyx_t_6) {
        __Pyx_INCREF(Py_None);
        __pyx_t_9 = Py_None;
      } else {
+10385:                             else time.monotonic() + lease_limit)
        __pyx_t_1 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 10385, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_22);
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10385, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_1, 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_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10385, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
        }
        __pyx_t_3 = __Pyx_PyNumber_Add_object_object(__pyx_t_4, __pyx_v_lease_limit); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10385, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_9 = __pyx_t_3;
        __pyx_t_3 = 0;
      }

      __Pyx_XDECREF_SET(__pyx_v_deadline, __pyx_t_9);
      __pyx_t_9 = 0;
    }
    __pyx_L48:;
+10386:             while True:
    while (1) {
+10387:                 notice = False
      __pyx_v_notice = 0;
 10388:                 # Held through `acquire` and `release`, as above.
+10389:                 self._state_cond.acquire()
      __pyx_t_3 = __pyx_v_self->_state_cond;
      __Pyx_INCREF(__pyx_t_3);
      __pyx_t_5 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
        __pyx_t_9 = __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_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10389, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
      }
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+10390:                 try:
      /*try:*/ {
+10391:                     if not self._close_running:
        __pyx_t_6 = (!__pyx_v_self->_close_running);

        if (__pyx_t_6) {
/* … */
        }
 10392:                         # `_close_running` clearing says the close()
 10393:                         # that claimed the pointer has finished;
 10394:                         # `self._db` says what it did. After a
 10395:                         # teardown the pointer stays NULL for good,
 10396:                         # so a NULL pointer here is a close that ran.
 10397:                         # A give-up hands the pointer back for a
 10398:                         # later close() to claim, and returning
 10399:                         # normally then would report a close that
 10400:                         # did not take place.
+10401:                         if self._db == NULL:
          __pyx_t_6 = (__pyx_v_self->_db == NULL);

          if (__pyx_t_6) {
/* … */
          }
+10402:                             return
            {
              PyObject *__pyx_temp;
              {
                __pyx_temp = __pyx_r;
                __pyx_r = Py_None; __Pyx_INCREF(Py_None);
              }
              __Pyx_XDECREF(__pyx_temp);
            }
            goto __pyx_L53_return;
+10403:                         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, 10403, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_4);
+10404:                             QuestDBErrorCode.InvalidApiCall,
          __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10404, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_22 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 10404, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_22);
          __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_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_t_22, __pyx_mstate_global->__pyx_kp_u_close_did_not_close_the_handle_t};
            __pyx_t_9 = __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_22); __pyx_t_22 = 0;
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10403, __pyx_L54_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, 10403, __pyx_L54_error)
 10405:                             'close() did not close the handle: the '
 10406:                             'concurrent close() on another thread '
 10407:                             'that this call waited for could not '
 10408:                             'finish the teardown. The handle stays '
 10409:                             'closing; call close() again.')
+10410:                     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);
+10411:                     if deadline is not None:
        __pyx_t_6 = (__pyx_v_deadline != Py_None);
        if (__pyx_t_6) {
/* … */
        }
+10412:                         remaining = deadline - time.monotonic()
          __pyx_t_4 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 10412, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_22);
          __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10412, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
          __pyx_t_5 = 1;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_3))) {
            __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
            assert(__pyx_t_4);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_4);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
            __pyx_t_5 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
            __pyx_t_9 = __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_4); __pyx_t_4 = 0;
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10412, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_9);
          }
          __pyx_t_3 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_deadline, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10412, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_XDECREF_SET(__pyx_v_remaining, __pyx_t_3);
          __pyx_t_3 = 0;
+10413:                         if remaining <= 0.0:
          __pyx_t_6 = __Pyx_PyObject_CompareBoolLe_object_float(__pyx_v_remaining, __pyx_mstate_global->__pyx_float_0_0, Py_LE); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 10413, __pyx_L54_error)
          if (unlikely(__pyx_t_6)) {
/* … */
          }
+10414:                             raise QuestDBError(
            __pyx_t_9 = NULL;
            __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10414, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_4);
+10415:                                 QuestDBErrorCode.InvalidApiCall,
            __Pyx_GetModuleGlobalName(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 10415, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_22);
            __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10415, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
+10416:                                 'close() stopped waiting after '
            __pyx_t_24 = 162;
            #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
            __pyx_t_24 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_23[1]);
            #endif
            __pyx_t_11 = 0;
            #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
            __pyx_t_11 |= __Pyx_PyUnicode_KIND_04(__pyx_t_23[1]);
            #endif
            __pyx_t_2 = __Pyx_PyUnicode_Join(__pyx_t_23, 3, __pyx_t_24, __pyx_t_11);
            if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10416, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
            __pyx_t_5 = 1;
            #if CYTHON_UNPACK_METHODS
            if (unlikely(PyMethod_Check(__pyx_t_4))) {
              __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_4);
              assert(__pyx_t_9);
              PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
              __Pyx_INCREF(__pyx_t_9);
              __Pyx_INCREF(__pyx__function);
              __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
              __pyx_t_5 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[3] = {__pyx_t_9, __pyx_t_1, __pyx_t_2};
              __pyx_t_3 = __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_9); __pyx_t_9 = 0;
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10414, __pyx_L54_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, 10414, __pyx_L54_error)
+10417:                                 f'{lease_limit:g}s for a concurrent '
            __pyx_t_22 = __Pyx_PyObject_Format(__pyx_v_lease_limit, __pyx_mstate_global->__pyx_n_u_g); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 10417, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_22);
            __pyx_t_23[0] = __pyx_mstate_global->__pyx_kp_u_close_stopped_waiting_after;
            __pyx_t_23[1] = __pyx_t_22;
            __pyx_t_23[2] = __pyx_mstate_global->__pyx_kp_u_s_for_a_concurrent_close_on_anot;
 10418:                                 'close() on another thread to finish '
 10419:                                 'the teardown. The handle stays '
 10420:                                 'closing; call close() again to '
 10421:                                 'resume waiting.')
+10422:                         wait_s = min(5.0, remaining)
          __Pyx_INCREF(__pyx_v_remaining);
          __pyx_t_3 = __pyx_v_remaining;

          __pyx_t_7 = 5.0;
          __pyx_t_2 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10422, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_6 = __Pyx_PyObject_CompareBoolLt_object_float(__pyx_t_3, __pyx_t_2, Py_LT); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 10422, __pyx_L54_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (__pyx_t_6) {
            __Pyx_INCREF(__pyx_t_3);
            __pyx_t_4 = __pyx_t_3;
          } else {
            __pyx_t_2 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10422, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_4 = __pyx_t_2;
            __pyx_t_2 = 0;
          }

          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __pyx_t_3 = __pyx_t_4;
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF_SET(__pyx_v_wait_s, __pyx_t_3);
          __pyx_t_3 = 0;
+10423:                     if (not self._state_cond.wait(timeout=wait_s)
        __pyx_t_4 = __pyx_v_self->_state_cond;
        __Pyx_INCREF(__pyx_t_4);
        __pyx_t_5 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_wait_s};
          #if CYTHON_VECTORCALL
          __pyx_t_2 = __pyx_mstate_global->__pyx_tuple[34];
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10423, __pyx_L54_error)
          __Pyx_INCREF(__pyx_t_2);
          #else
          {
            PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_timeout};
            __pyx_t_2 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
            if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10423, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_2);
          }
          #endif
          __pyx_t_3 = __Pyx_Object_VectorcallMethodKwds((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_2);
          __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, 10423, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        __pyx_t_21 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_21 < 0))) __PYX_ERR(0, 10423, __pyx_L54_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_10 = (!__pyx_t_21);


        if (__pyx_t_10) {

        } else {

          __pyx_t_6 = __pyx_t_10;

          goto __pyx_L61_bool_binop_done;
        }
/* … */
        if (__pyx_t_6) {
/* … */
        }
      }
+10424:                             and self._close_running):
        __pyx_t_6 = __pyx_v_self->_close_running;
        __pyx_L61_bool_binop_done:;
+10425:                         notice = True
          __pyx_v_notice = 1;
 10426:                 finally:
+10427:                     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, 10427, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
          }
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          goto __pyx_L55;
        }
        __pyx_L54_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_22); __pyx_t_22 = 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_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_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, 10427, __pyx_L66_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_13;
          goto __pyx_L1_error;
          __pyx_L66_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_L53_return: {
          __pyx_t_19 = __pyx_r;
          __pyx_r = 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, 10427, __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_L55:;
      }
+10428:                 if notice:
      if (__pyx_v_notice) {
/* … */
      }
    }
+10429:                     logging.getLogger('questdb').warning(
        __pyx_t_1 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10429, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_22 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 10429, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_22);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_5 = 1;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_22))) {
          __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_22);
          assert(__pyx_t_1);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_22);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_22, __pyx__function);
          __pyx_t_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_mstate_global->__pyx_n_u_questdb};
          __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_22, __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_22); __pyx_t_22 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10429, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
        }
        __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_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_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10429, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 10430:                         'QuestDB.close() is still waiting for '
 10431:                         'a concurrent close() on another '
 10432:                         'thread to finish.')
+10433:         try:
  /*try:*/ {
+10434:             _ensure_doesnt_have_gil(&gs)
    (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
 10435:             # `questdb_db_close` drains both the writer and reader free
 10436:             # lists in one shot (see `db.rs::DbInner::Drop`).
+10437:             questdb_db_close(db)
    questdb_db_close(__pyx_v_db);
+10438:             closed = True
    __pyx_v_closed = 1;
  }
 10439:         finally:
+10440:             _ensure_has_gil(&gs)
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
 10441:             # The close is published as finished before the callbacks
 10442:             # are released. Releasing them can run their finalizers
 10443:             # right here, on this thread: a finalizer that calls
 10444:             # close() on this handle, or that waits for a lock held by
 10445:             # a thread waiting for this close, finds the close already
 10446:             # finished instead of waiting for it. Nothing needs the
 10447:             # callbacks by now: `questdb_db_close` has joined the
 10448:             # dispatchers, so no callback can run any more.
 10449:             #
 10450:             # No Python code runs from the claim of the pointer to the
 10451:             # moment the close is published. A Ctrl-C during the native
 10452:             # close, which runs without the GIL, or between the claim
 10453:             # and it, is held as a pending signal and raised at the
 10454:             # first Python function called after it. `with
 10455:             # self._state_cond:` would be that call --
 10456:             # `Condition.__enter__` is written in Python -- and every
 10457:             # later close() would then wait for this one for good, with
 10458:             # the callbacks still pinned. So the lock is taken through
 10459:             # `acquire`, which is the RLock's own C method, and the
 10460:             # state is written by plain attribute assignment. A blocked
 10461:             # acquire can still be interrupted by a further signal; it
 10462:             # is retried, and the first interrupt is raised once
 10463:             # everything here is done.
+10464:             while not locked:
      while (1) {
        __pyx_t_6 = (!__pyx_v_locked);


        if (!__pyx_t_6) break;
+10465:                 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_L80_try_end;
          __pyx_L73_error:;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 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_L75_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_L74_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_L80_try_end:;
        }
      }
+10466:                     self._state_cond.acquire()
            __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_acquire, __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, 10466, __pyx_L73_error)
              __Pyx_GOTREF(__pyx_t_3);
            }
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+10467:                     locked = True
            __pyx_v_locked = 1;
+10468:                 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_4, &__pyx_t_2) < 0) __PYX_ERR(0, 10468, __pyx_L75_except_error)
            __Pyx_XGOTREF(__pyx_t_3);
            __Pyx_XGOTREF(__pyx_t_4);
            __Pyx_XGOTREF(__pyx_t_2);
            __Pyx_INCREF(__pyx_t_4);
            __pyx_v_exc = __pyx_t_4;
            /*try:*/ {
/* … */
            /*finally:*/ {
              /*normal exit:*/{
                __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
                goto __pyx_L87;
              }
              __pyx_L87:;
            }
            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            goto __pyx_L74_exception_handled;
          }
          goto __pyx_L75_except_error;
+10469:                     if interrupt is None:
              __pyx_t_6 = (__pyx_v_interrupt == Py_None);
              if (__pyx_t_6) {
/* … */
              }
            }
+10470:                         interrupt = exc
                __Pyx_INCREF(__pyx_v_exc);
                __Pyx_DECREF_SET(__pyx_v_interrupt, __pyx_v_exc);
+10471:             try:
      /*try:*/ {
+10472:                 if closed:
        if (__pyx_v_closed) {
/* … */
          goto __pyx_L92;
        }
+10473:                     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;
 10474:                 else:
 10475:                     # The native close did not run, so the pointer
 10476:                     # goes back for a later close() to claim. The
 10477:                     # handle stays closing either way.
+10478:                     self._db = db
        /*else*/ {
          __pyx_v_self->_db = __pyx_v_db;
        }
        __pyx_L92:;
+10479:                 self._close_running = False
        __pyx_v_self->_close_running = 0;
 10480:                 # The first Python code here, so a pending interrupt
 10481:                 # fires in it before anyone is woken. The interrupt
 10482:                 # has been taken by then, and a second call wakes the
 10483:                 # waiters; one that is still not woken rechecks within
 10484:                 # five seconds.
+10485:                 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_L98_try_end;
          __pyx_L93_error:;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 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_L95_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_L90_error;
          __pyx_L94_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_L98_try_end:;
        }
      }
+10486:                     self._state_cond.notify_all()
            __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_2 = __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_4); __pyx_t_4 = 0;
              if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10486, __pyx_L93_error)
              __Pyx_GOTREF(__pyx_t_2);
            }
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+10487:                 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_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 10487, __pyx_L95_except_error)
            __Pyx_XGOTREF(__pyx_t_2);
            __Pyx_XGOTREF(__pyx_t_4);
            __Pyx_XGOTREF(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_4);
            __pyx_v_exc = __pyx_t_4;
            /*try:*/ {
/* … */
            /*finally:*/ {
              /*normal exit:*/{
                __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
                goto __pyx_L105;
              }
              __pyx_L104_error:;
              /*exception exit:*/{
                __Pyx_PyThreadState_declare
                __Pyx_PyThreadState_assign
                __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0;
                __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
                __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
                 __Pyx_ExceptionSwap(&__pyx_t_25, &__pyx_t_26, &__pyx_t_27);
                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_25);
                __Pyx_XGOTREF(__pyx_t_26);
                __Pyx_XGOTREF(__pyx_t_27);
                __pyx_t_12 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
                {
                  __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
                }
                __Pyx_XGIVEREF(__pyx_t_25);
                __Pyx_XGIVEREF(__pyx_t_26);
                __Pyx_XGIVEREF(__pyx_t_27);
                __Pyx_ExceptionReset(__pyx_t_25, __pyx_t_26, __pyx_t_27);
                __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_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0;
                __pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_13;
                goto __pyx_L95_except_error;
              }
              __pyx_L105:;
            }
            __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_L94_exception_handled;
          }
          goto __pyx_L95_except_error;
+10488:                     if interrupt is None:
              __pyx_t_6 = (__pyx_v_interrupt == Py_None);
              if (__pyx_t_6) {
/* … */
              }
+10489:                         interrupt = exc
                __Pyx_INCREF(__pyx_v_exc);
                __Pyx_DECREF_SET(__pyx_v_interrupt, __pyx_v_exc);
+10490:                     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_L114_try_end;
                __pyx_L107_error:;
                __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
                __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
                __pyx_L109_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_L104_error;
                __pyx_L108_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_L114_try_end:;
              }
            }
+10491:                         self._state_cond.notify_all()
                  __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_22 = __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_1); __pyx_t_1 = 0;
                    if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 10491, __pyx_L107_error)
                    __Pyx_GOTREF(__pyx_t_22);
                  }
                  __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
+10492:                     except BaseException:
                __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
                if (__pyx_t_12) {
                  __Pyx_ErrRestore(0,0,0);
                  goto __pyx_L108_exception_handled;
                }
                goto __pyx_L109_except_error;
 10493:                         pass
 10494:             finally:
+10495:                 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, 10495, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
          }
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 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, 10495, __pyx_L123_error)
              __Pyx_GOTREF(__pyx_t_3);
            }
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+10496:                 if closed:
          if (__pyx_v_closed) {
/* … */
          }
          goto __pyx_L91;
        }
        __pyx_L90_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_27 = 0; __pyx_t_26 = 0; __pyx_t_25 = 0;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 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_27, &__pyx_t_26, &__pyx_t_25);
          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_27);
          __Pyx_XGOTREF(__pyx_t_26);
          __Pyx_XGOTREF(__pyx_t_25);
          __pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
          {
/* … */
            if (__pyx_v_closed) {
/* … */
            }
          }
          __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_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_27 = 0; __pyx_t_26 = 0; __pyx_t_25 = 0;
          __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
          goto __pyx_L1_error;
          __pyx_L123_error:;
          __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_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_27 = 0; __pyx_t_26 = 0; __pyx_t_25 = 0;
          goto __pyx_L1_error;
        }
        __pyx_L91:;
      }
+10497:                     _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, 10497, __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, 10497, __pyx_L123_error)
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+10498:                     self._cb_refs_key = 0
            __pyx_v_self->_cb_refs_key = 0;
/* … */
              __pyx_v_self->_cb_refs_key = 0;
+10499:                     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;
+10500:                     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;
+10501:                     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;
+10502:             if interrupt is not None:
      __pyx_t_6 = (__pyx_v_interrupt != Py_None);
      if (unlikely(__pyx_t_6)) {
/* … */
      }
      goto __pyx_L70;
    }
    __pyx_L70:;
  }
+10503:                 raise interrupt
        __Pyx_Raise(__pyx_v_interrupt, 0, 0, 0);
        __PYX_ERR(0, 10503, __pyx_L1_error)
 10504: 
+10505:     def __exit__(self, exc_type, exc_val, exc_tb):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_23__exit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_22__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_23__exit__ = {"__exit__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_23__exit__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_22__exit__};
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_23__exit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 10505, __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, 10505, __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, 10505, __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, 10505, __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, 10505, __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, 10505, __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, 10505, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 10505, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 10505, __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, 10505, __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_22__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_22__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_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_23__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[132])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 10505, __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_exit, __pyx_t_17) < (0)) __PYX_ERR(0, 10505, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 10506:         """
 10507:         Close the handle at the end of a ``with`` block.
 10508: 
 10509:         When the most recent :meth:`close` on the handle was given a
 10510:         number of seconds, this close waits only for what is left of
 10511:         that budget; otherwise it closes with the limits of a
 10512:         :meth:`close` with no arguments.
 10513: 
 10514:         Leaving the block on an exception still closes, but a close
 10515:         that cannot finish is reported through the ``questdb`` logger
 10516:         instead of raised: the frames unwinding here are often the
 10517:         ones holding the leases the close is waiting for, so raising
 10518:         would replace the exception being reported with a complaint
 10519:         that follows from it. Leaving the block normally raises as
 10520:         :meth:`close` does -- a lease left open there is a leak worth
 10521:         hearing about.
 10522:         """
 10523:         # Held through `acquire` and `release`, as in `close()`.
+10524:         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, 10524, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+10525:         try:
  /*try:*/ {
+10526:             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;
  }
 10527:         finally:
+10528:             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, 10528, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L5;
    }
    __pyx_L5:;
  }
+10529:         if deadline is None:
  __pyx_t_4 = (__pyx_v_deadline == Py_None);
  if (__pyx_t_4) {
/* … */
    goto __pyx_L6;
  }
+10530:             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, 10530, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_timeout = __pyx_t_1;
    __pyx_t_1 = 0;
 10531:         else:
+10532:             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, 10532, __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, 10532, __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, 10532, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_t_7 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_deadline, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 10532, __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, 10532, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyObject_CompareBoolGt_float_object(__pyx_t_2, __pyx_t_7, Py_GT); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 10532, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_4) {
      __pyx_t_2 = PyFloat_FromDouble(__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10532, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __pyx_t_2;
      __pyx_t_2 = 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:;
+10533:         if exc_type is None:
  __pyx_t_4 = (__pyx_v_exc_type == Py_None);
  if (__pyx_t_4) {
/* … */
  }
+10534:             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, 10534, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+10535:             return
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+10536:         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:;
  }
+10537:             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, 10537, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+10538:         except QuestDBError:
    __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_1, &__pyx_t_2);
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 10538, __pyx_L10_except_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_12 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_7, __pyx_t_6);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_ErrRestore(__pyx_t_7, __pyx_t_1, __pyx_t_2);
    __pyx_t_7 = 0; __pyx_t_1 = 0; __pyx_t_2 = 0;
    if (__pyx_t_12) {
      __Pyx_AddTraceback("questdb._client.QuestDB.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(0, 10538, __pyx_L10_except_error)
      __Pyx_XGOTREF(__pyx_t_2);
      __Pyx_XGOTREF(__pyx_t_1);
      __Pyx_XGOTREF(__pyx_t_7);
+10539:             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, 10539, __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, 10539, __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, 10539, __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_6 = __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_6)) __PYX_ERR(0, 10539, __pyx_L10_except_error)
        __Pyx_GOTREF(__pyx_t_6);
      }
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 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;
 10540:                 'QuestDB.close() could not finish while leaving a '
 10541:                 '`with` block that was already raising. The handle '
 10542:                 'stays closing; the original exception follows.')
 10543: 
+10544:     def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_7questdb_7_client_7QuestDB_25__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7questdb_7_client_7QuestDB_25__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_24__dealloc__(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self));

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

static void __pyx_pf_7questdb_7_client_7QuestDB_24__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();
}
 10545:         cdef questdb_db* db
+10546:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+10547:         if self._db != NULL:
  __pyx_t_1 = (__pyx_v_self->_db != NULL);

  if (__pyx_t_1) {
/* … */
  }
+10548:             db = self._db
    __pyx_t_2 = __pyx_v_self->_db;

    __pyx_v_db = __pyx_t_2;
+10549:             self._db = NULL
    __pyx_v_self->_db = NULL;
+10550:             _ensure_doesnt_have_gil(&gs)
    (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+10551:             questdb_db_close(db)
    questdb_db_close(__pyx_v_db);
+10552:             _ensure_has_gil(&gs)
    __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+10553:         _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, 10553, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+10554:         self._cb_refs_key = 0
  __pyx_v_self->_cb_refs_key = 0;
 10555: 
 10556: 
+10557: @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 *(*_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 line_sender_buffer *, int, int, int);
  __pyx_t_7questdb_7_client_void_int (*_check_not_in_own_callback)(struct __pyx_obj_7questdb_7_client_Sender *, PyObject *);
  __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 *);
  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 __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 *);
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 *);

 10558: cdef class Sender:
 10559:     """
 10560:     Ingest data into QuestDB over a single connection.
 10561: 
 10562:     This is the connection-level API: one sender drives exactly one
 10563:     connection (ILP/HTTP, ILP/TCP, QWP/UDP, or a single QWP/WebSocket
 10564:     connection) and carries the point-to-point capabilities the
 10565:     deployment-level handle does not: HTTP transactions, UDP datagrams,
 10566:     and manual ws progress and buffer control. For pooled ingestion and
 10567:     queries, prefer :func:`questdb.connect`.
 10568: 
 10569:     See the :ref:`sender` documentation for more information.
 10570:     """
 10571: 
 10572:     # We need the Buffer held by a Sender can hold a weakref to its Sender.
 10573:     # This avoids a circular reference that requires the GC to clean up.
 10574:     cdef object __weakref__
 10575: 
 10576:     cdef line_sender_protocol _c_protocol
 10577:     cdef line_sender_opts* _opts
 10578:     cdef line_sender* _impl
 10579:     cdef Buffer _buffer
 10580:     cdef object _thread_owner_token
 10581:     cdef object _dispatch_context
 10582:     cdef object _error_handler
 10583:     cdef object _connection_listener
 10584:     cdef auto_flush_mode_t _auto_flush_mode
 10585:     cdef bint _auto_flush_bytes_dynamic
 10586:     cdef int64_t* _last_flush_ms
 10587:     cdef size_t _init_buf_size
 10588:     cdef bint _in_txn
 10589:     cdef int64_t _slot_id
 10590:     # A clone of the fully-configured opts for QWP/WebSocket senders, retained
 10591:     # so dataframe() can open a poolless direct columnar connection per call
 10592:     # (carrying auth/TLS). NULL for other protocols.
 10593:     cdef line_sender_opts* _qwp_ws_opts
 10594:     cdef size_t _cb_refs_key
 10595: 
+10596:     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_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;
  __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_tls_roots);
  __Pyx_XDECREF(__pyx_v_auto_flush_bytes);
  __Pyx_XDECREF(__pyx_v_error_handler);

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 10597:             self,
 10598:             qdb_pystr_buf* b,
 10599:             object protocol,
 10600:             str bind_interface,
 10601:             str username,
 10602:             str password,
 10603:             str token,
 10604:             str token_x,
 10605:             str token_y,
 10606:             object auth_timeout,
 10607:             object tls_verify,
 10608:             object tls_ca,
 10609:             object tls_roots,
 10610:             object tls_roots_password,
 10611:             object max_buf_size,
 10612:             object retry_timeout,
 10613:             object retry_max_backoff,
 10614:             object request_min_throughput,
 10615:             object request_timeout,
 10616:             object auto_flush,
 10617:             object auto_flush_rows,
 10618:             object auto_flush_bytes,
 10619:             object auto_flush_interval,
 10620:             object max_datagram_size,
 10621:             object multicast_ttl,
 10622:             object protocol_version,
 10623:             object qwp_ws_progress,
 10624:             object error_handler,
 10625:             object connection_listener,
 10626:             object connection_event_inbox_capacity,
 10627:             object init_buf_size,
 10628:             object max_name_len) except -1:
 10629:         """
 10630:         Set optional parameters for the sender.
 10631:         """
+10632:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+10633:         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, 10633, __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, 10633, __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, 10633, __pyx_L1_error)
  __pyx_v_user_agent = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
 10634:         cdef line_sender_utf8 c_user_agent
 10635:         cdef line_sender_utf8 c_bind_interface
 10636:         cdef line_sender_utf8 c_username
 10637:         cdef line_sender_utf8 c_password
 10638:         cdef line_sender_utf8 c_token
 10639:         cdef line_sender_utf8 c_token_x
 10640:         cdef line_sender_utf8 c_token_y
 10641:         cdef uint64_t c_auth_timeout
 10642:         cdef bint c_tls_verify
 10643:         cdef line_sender_ca c_tls_ca
 10644:         cdef line_sender_utf8 c_tls_roots
 10645:         cdef line_sender_utf8 c_tls_roots_password
 10646:         cdef uint64_t c_max_buf_size
 10647:         cdef uint64_t c_retry_timeout
 10648:         cdef uint64_t c_retry_max_backoff
 10649:         cdef uint64_t c_request_min_throughput
 10650:         cdef uint64_t c_request_timeout
 10651:         cdef size_t c_max_name_len
+10652:         cdef size_t c_max_datagram_size = 0
  __pyx_v_c_max_datagram_size = 0;
+10653:         cdef uint32_t c_multicast_ttl = 0
  __pyx_v_c_multicast_ttl = 0;
 10654:         cdef line_sender_qwpws_progress c_qwp_ws_progress
 10655: 
+10656:         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, 10656, __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, 10656, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_self->_c_protocol = __pyx_t_3;
 10657: 
 10658:         # It's OK to override this setting.
+10659:         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, 10659, __pyx_L1_error)

+10660:         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)) {
/* … */
  }
+10661:             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, 10661, __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, 10661, __pyx_L1_error)
 10662: 
+10663:         if bind_interface is not None:
  __pyx_t_5 = (__pyx_v_bind_interface != ((PyObject*)Py_None));
  if (__pyx_t_5) {
/* … */
  }
+10664:             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, 10664, __pyx_L1_error)

+10665:             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)) {
/* … */
    }
 10666:                     self._opts, c_bind_interface, &err):
+10667:                 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, 10667, __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, 10667, __pyx_L1_error)
 10668: 
+10669:         if max_datagram_size is not None:
  __pyx_t_5 = (__pyx_v_max_datagram_size != Py_None);
  if (__pyx_t_5) {
/* … */
  }
+10670:             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, 10670, __pyx_L1_error)
    __pyx_t_6 = (!__pyx_t_5);


    if (unlikely(__pyx_t_6)) {
/* … */
    }
+10671:                 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, 10671, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
+10672:                     QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10672, __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, 10672, __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, 10671, __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, 10671, __pyx_L1_error)
 10673:                     '"max_datagram_size" is only supported for QWP/UDP senders.')
+10674:             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)) {
/* … */
    }
+10675:                 raise TypeError(
      __pyx_t_7 = NULL;
+10676:                     '"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, 10676, __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, 10675, __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, 10675, __pyx_L1_error)
+10677:                     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, 10677, __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, 10677, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+10678:             if max_datagram_size <= 0 or max_datagram_size > 65507:
    __pyx_t_11 = __Pyx_PyObject_CompareBoolLe_object_int(__pyx_v_max_datagram_size, __pyx_mstate_global->__pyx_int_0, Py_LE); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 10678, __pyx_L1_error)
    if (!__pyx_t_11) {

    } else {

      __pyx_t_6 = __pyx_t_11;

      goto __pyx_L12_bool_binop_done;
    }
    __pyx_t_11 = __Pyx_PyObject_CompareBoolGt_object_int(__pyx_v_max_datagram_size, __pyx_mstate_global->__pyx_int_65507, Py_GT); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 10678, __pyx_L1_error)

    __pyx_t_6 = __pyx_t_11;

    __pyx_L12_bool_binop_done:;
    if (unlikely(__pyx_t_6)) {
/* … */
    }
+10679:                 raise ValueError(
      __pyx_t_9 = NULL;
+10680:                     '"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, 10680, __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, 10679, __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, 10679, __pyx_L1_error)
+10681:                     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, 10681, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
+10682:             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, 10682, __pyx_L1_error)
    __pyx_v_c_max_datagram_size = __pyx_t_10;
+10683:             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)) {
/* … */
    }
 10684:                     self._opts, c_max_datagram_size, &err):
+10685:                 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, 10685, __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, 10685, __pyx_L1_error)
 10686: 
+10687:         if multicast_ttl is not None:
  __pyx_t_6 = (__pyx_v_multicast_ttl != Py_None);
  if (__pyx_t_6) {
/* … */
  }
+10688:             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, 10688, __pyx_L1_error)
    __pyx_t_11 = (!__pyx_t_6);


    if (unlikely(__pyx_t_11)) {
/* … */
    }
+10689:                 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, 10689, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
+10690:                     QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 10690, __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, 10690, __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, 10689, __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, 10689, __pyx_L1_error)
 10691:                     '"multicast_ttl" is only supported for QWP/UDP senders.')
+10692:             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)) {
/* … */
    }
+10693:                 raise TypeError(
      __pyx_t_9 = NULL;
+10694:                     '"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, 10694, __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, 10693, __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, 10693, __pyx_L1_error)
+10695:                     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, 10695, __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, 10695, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+10696:             if multicast_ttl < 0 or multicast_ttl > 255:
    __pyx_t_5 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_multicast_ttl, __pyx_mstate_global->__pyx_int_0, Py_LT); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 10696, __pyx_L1_error)
    if (!__pyx_t_5) {

    } else {

      __pyx_t_11 = __pyx_t_5;

      goto __pyx_L21_bool_binop_done;
    }
    __pyx_t_5 = __Pyx_PyObject_CompareBoolGt_object_int(__pyx_v_multicast_ttl, __pyx_mstate_global->__pyx_int_255, Py_GT); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 10696, __pyx_L1_error)

    __pyx_t_11 = __pyx_t_5;

    __pyx_L21_bool_binop_done:;
    if (unlikely(__pyx_t_11)) {
/* … */
    }
+10697:                 raise ValueError(
      __pyx_t_8 = NULL;
+10698:                     '"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, 10698, __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, 10697, __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, 10697, __pyx_L1_error)
+10699:                     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, 10699, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
+10700:             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, 10700, __pyx_L1_error)
    __pyx_v_c_multicast_ttl = __pyx_t_12;
+10701:             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)) {
/* … */
    }
 10702:                     self._opts, c_multicast_ttl, &err):
+10703:                 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, 10703, __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, 10703, __pyx_L1_error)
 10704: 
+10705:         if qwp_ws_progress is not None:
  __pyx_t_11 = (__pyx_v_qwp_ws_progress != Py_None);
  if (__pyx_t_11) {
/* … */
  }
+10706:             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, 10706, __pyx_L1_error)
    __pyx_t_5 = (!__pyx_t_11);


    if (unlikely(__pyx_t_5)) {
/* … */
    }
+10707:                 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, 10707, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
+10708:                     QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10708, __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, 10708, __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, 10707, __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, 10707, __pyx_L1_error)
 10709:                     '"qwp_ws_progress" is only supported for QWP/WebSocket senders.')
+10710:             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:;
    }
+10711:                 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, 10711, __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, 10711, __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, 10711, __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, 10711, __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, 10711, __pyx_L26_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_v_c_qwp_ws_progress = __pyx_t_16;
+10712:             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, 10712, __pyx_L28_except_error)
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_2);
        __Pyx_XGOTREF(__pyx_t_8);
+10713:                 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, 10713, __pyx_L28_except_error)
        __Pyx_GOTREF(__pyx_t_18);
+10714:                     QuestDBErrorCode.ConfigError,
        __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 10714, __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, 10714, __pyx_L28_except_error)
        __Pyx_GOTREF(__pyx_t_20);
        __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+10715:                     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, 10715, __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, 10715, __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, 10713, __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, 10713, __pyx_L28_except_error)
      }
      goto __pyx_L28_except_error;
+10716:             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)) {
/* … */
    }
 10717:                     self._opts, c_qwp_ws_progress, &err):
+10718:                 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, 10718, __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, 10718, __pyx_L1_error)
 10719: 
+10720:         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, 10720, __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)) {
/* … */
  }
+10721:             raise TypeError(
    __pyx_t_2 = NULL;
+10722:                 '"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, 10722, __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, 10721, __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, 10721, __pyx_L1_error)
+10723:                 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, 10723, __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, 10723, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+10724:         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, 10724, __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)) {
/* … */
  }
+10725:             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, 10725, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
+10726:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 10726, __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, 10726, __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, 10725, __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, 10725, __pyx_L1_error)
 10727:                 'error_handler is only supported for QWP/WebSocket senders.')
+10728:         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, 10728, __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)) {
/* … */
  }
 10729:                 connection_listener):
+10730:             raise TypeError(
    __pyx_t_2 = NULL;
+10731:                 '"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, 10731, __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, 10730, __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, 10730, __pyx_L1_error)
+10732:                 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, 10732, __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, 10732, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+10733:         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, 10733, __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)) {
/* … */
  }
 10734:                 self._c_protocol):
+10735:             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, 10735, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
+10736:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10736, __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, 10736, __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, 10735, __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, 10735, __pyx_L1_error)
 10737:                 'connection_listener is only supported for QWP/WebSocket '
 10738:                 'senders.')
 10739: 
+10740:         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, 10740, __pyx_L1_error)
  if (__pyx_t_5) {
/* … */
  }
+10741:             if error_handler is None:
    __pyx_t_5 = (__pyx_v_error_handler == Py_None);
    if (__pyx_t_5) {
/* … */
    }
+10742:                 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, 10742, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF_SET(__pyx_v_error_handler, __pyx_t_8);
      __pyx_t_8 = 0;
+10743:             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;
+10744:             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;
+10745:             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, 10745, __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;
+10746:                 self._thread_owner_token,
    __pyx_t_8 = __pyx_v_self->_thread_owner_token;
    __Pyx_INCREF(__pyx_t_8);
+10747:                 self._error_handler,
    __pyx_t_2 = __pyx_v_self->_error_handler;
    __Pyx_INCREF(__pyx_t_2);
+10748:                 self._connection_listener)
    __pyx_t_7 = __pyx_v_self->_connection_listener;
    __Pyx_INCREF(__pyx_t_7);
+10749:             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)) {
/* … */
    }
 10750:                     self._opts,
 10751:                     _sender_error_trampoline,
 10752:                     <void*>self._dispatch_context,
 10753:                     &err):
+10754:                 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, 10754, __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, 10754, __pyx_L1_error)
+10755:         if connection_listener is not None:
  __pyx_t_5 = (__pyx_v_connection_listener != Py_None);
  if (__pyx_t_5) {
/* … */
  }
+10756:             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)) {
/* … */
    }
 10757:                     self._opts,
 10758:                     _connection_event_trampoline,
 10759:                     <void*>self._dispatch_context,
+10760:                     <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, 10760, __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, 10760, __pyx_L1_error)
      __pyx_t_10 = __pyx_t_22;
      goto __pyx_L52_bool_binop_done;
    }

    __pyx_t_10 = 0;
    __pyx_L52_bool_binop_done:;
 10761:                     &err):
+10762:                 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, 10762, __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, 10762, __pyx_L1_error)
 10763: 
+10764:         if username is not None:
  __pyx_t_5 = (__pyx_v_username != ((PyObject*)Py_None));
  if (__pyx_t_5) {
/* … */
  }
+10765:             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, 10765, __pyx_L1_error)

+10766:             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)) {
/* … */
    }
+10767:                 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, 10767, __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, 10767, __pyx_L1_error)
 10768: 
+10769:         if password is not None:
  __pyx_t_5 = (__pyx_v_password != ((PyObject*)Py_None));
  if (__pyx_t_5) {
/* … */
  }
+10770:             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, 10770, __pyx_L1_error)

+10771:             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)) {
/* … */
    }
+10772:                 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, 10772, __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, 10772, __pyx_L1_error)
 10773: 
+10774:         if token is not None:
  __pyx_t_5 = (__pyx_v_token != ((PyObject*)Py_None));
  if (__pyx_t_5) {
/* … */
  }
+10775:             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, 10775, __pyx_L1_error)

+10776:             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)) {
/* … */
    }
+10777:                 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, 10777, __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, 10777, __pyx_L1_error)
 10778: 
+10779:         if token_x is not None:
  __pyx_t_5 = (__pyx_v_token_x != ((PyObject*)Py_None));
  if (__pyx_t_5) {
/* … */
  }
+10780:             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, 10780, __pyx_L1_error)

+10781:             if not line_sender_opts_token_x(self._opts, c_token_x, &err):
    __pyx_t_5 = (!line_sender_opts_token_x(__pyx_v_self->_opts, __pyx_v_c_token_x, (&__pyx_v_err)));

    if (unlikely(__pyx_t_5)) {
/* … */
    }
+10782:                 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, 10782, __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, 10782, __pyx_L1_error)
 10783: 
+10784:         if token_y is not None:
  __pyx_t_5 = (__pyx_v_token_y != ((PyObject*)Py_None));
  if (__pyx_t_5) {
/* … */
  }
+10785:             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, 10785, __pyx_L1_error)

+10786:             if not line_sender_opts_token_y(self._opts, c_token_y, &err):
    __pyx_t_5 = (!line_sender_opts_token_y(__pyx_v_self->_opts, __pyx_v_c_token_y, (&__pyx_v_err)));

    if (unlikely(__pyx_t_5)) {
/* … */
    }
+10787:                 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, 10787, __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, 10787, __pyx_L1_error)
 10788: 
+10789:         if protocol_version is not None:
  __pyx_t_5 = (__pyx_v_protocol_version != Py_None);
  if (__pyx_t_5) {
/* … */
  }
+10790:             if protocol_version == 'auto':
    __pyx_t_5 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_n_u_auto, Py_EQ); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 10790, __pyx_L1_error)
    if (__pyx_t_5) {

      goto __pyx_L65;
    }
 10791:                 pass
+10792:             elif (protocol_version == 1) or (protocol_version == '1'):
    __pyx_t_11 = (__Pyx_PyLong_BoolEqObjC(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_int_1, 1, 0)); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 10792, __pyx_L1_error)
    if (!__pyx_t_11) {

    } else {

      __pyx_t_5 = __pyx_t_11;

      goto __pyx_L66_bool_binop_done;
    }
    __pyx_t_11 = (__Pyx_PyObject_Equals_obj_ch49(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_kp_u_1, Py_EQ)); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 10792, __pyx_L1_error)

    __pyx_t_5 = __pyx_t_11;

    __pyx_L66_bool_binop_done:;
    if (__pyx_t_5) {
/* … */
      goto __pyx_L65;
    }
+10793:                 if not line_sender_opts_protocol_version(
      __pyx_t_5 = (!line_sender_opts_protocol_version(__pyx_v_self->_opts, line_sender_protocol_version_1, (&__pyx_v_err)));

      if (unlikely(__pyx_t_5)) {
/* … */
      }
 10794:                         self._opts, line_sender_protocol_version_1, &err):
+10795:                     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, 10795, __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, 10795, __pyx_L1_error)
+10796:             elif (protocol_version == 2) or (protocol_version == '2'):
    __pyx_t_11 = (__Pyx_PyLong_BoolEqObjC(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_int_2, 2, 0)); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 10796, __pyx_L1_error)
    if (!__pyx_t_11) {

    } else {

      __pyx_t_5 = __pyx_t_11;

      goto __pyx_L69_bool_binop_done;
    }
    __pyx_t_11 = (__Pyx_PyObject_Equals_obj_ch50(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_kp_u_2, Py_EQ)); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 10796, __pyx_L1_error)

    __pyx_t_5 = __pyx_t_11;

    __pyx_L69_bool_binop_done:;
    if (__pyx_t_5) {
/* … */
      goto __pyx_L65;
    }
+10797:                 if not line_sender_opts_protocol_version(
      __pyx_t_5 = (!line_sender_opts_protocol_version(__pyx_v_self->_opts, line_sender_protocol_version_2, (&__pyx_v_err)));

      if (unlikely(__pyx_t_5)) {
/* … */
      }
 10798:                         self._opts, line_sender_protocol_version_2, &err):
+10799:                     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, 10799, __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, 10799, __pyx_L1_error)
+10800:             elif (protocol_version == 3) or (protocol_version == '3'):
    __pyx_t_11 = (__Pyx_PyLong_BoolEqObjC(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_int_3, 3, 0)); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 10800, __pyx_L1_error)
    if (!__pyx_t_11) {

    } else {

      __pyx_t_5 = __pyx_t_11;

      goto __pyx_L72_bool_binop_done;
    }
    __pyx_t_11 = (__Pyx_PyObject_Equals_obj_ch51(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_kp_u_3, Py_EQ)); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 10800, __pyx_L1_error)

    __pyx_t_5 = __pyx_t_11;

    __pyx_L72_bool_binop_done:;
    if (likely(__pyx_t_5)) {
/* … */
      goto __pyx_L65;
    }
+10801:                 if not line_sender_opts_protocol_version(
      __pyx_t_5 = (!line_sender_opts_protocol_version(__pyx_v_self->_opts, line_sender_protocol_version_3, (&__pyx_v_err)));

      if (unlikely(__pyx_t_5)) {
/* … */
      }
 10802:                         self._opts, line_sender_protocol_version_3, &err):
+10803:                     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, 10803, __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, 10803, __pyx_L1_error)
 10804:             else:
+10805:                 raise QuestDBError(
    /*else*/ {
      __pyx_t_7 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10805, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
+10806:                     QuestDBErrorCode.ConfigError,
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10806, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10806, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+10807:                     '"protocol_version" must be None, "auto", 1-3' +
      __pyx_t_8 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_protocol_version_must_be_None_a, __pyx_t_21); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10807, __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_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[3] = {__pyx_t_7, __pyx_t_1, __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_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__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_18)) __PYX_ERR(0, 10805, __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, 10805, __pyx_L1_error)
    }
    __pyx_L65:;
+10808:                     f' not {protocol_version!r}')
      __pyx_t_8 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_protocol_version), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10808, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_21 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_not_2, __pyx_t_8); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 10808, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_21);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 10809: 
+10810:         if auth_timeout is not None:
  __pyx_t_5 = (__pyx_v_auth_timeout != Py_None);
  if (__pyx_t_5) {
/* … */
  }
+10811:             if _is_int_not_bool(auth_timeout):
    __pyx_t_5 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_auth_timeout); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 10811, __pyx_L1_error)
    if (__pyx_t_5) {
/* … */
      goto __pyx_L76;
    }
+10812:                 c_auth_timeout = auth_timeout
      __pyx_t_23 = __Pyx_PyLong_As_uint64_t(__pyx_v_auth_timeout); if (unlikely((__pyx_t_23 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 10812, __pyx_L1_error)
      __pyx_v_c_auth_timeout = __pyx_t_23;
+10813:             elif isinstance(auth_timeout, cp_timedelta):
    __pyx_t_5 = __Pyx_TypeCheck(__pyx_v_auth_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta); 
    if (likely(__pyx_t_5)) {
/* … */
      goto __pyx_L76;
    }
+10814:                 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, 10814, __pyx_L1_error)
      __pyx_t_23 = __pyx_f_7questdb_7_client__timedelta_to_millis(((PyDateTime_Delta *)__pyx_v_auth_timeout)); if (unlikely(__pyx_t_23 == ((uint64_t)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 10814, __pyx_L1_error)
      __pyx_v_c_auth_timeout = __pyx_t_23;
 10815:             else:
+10816:                 raise TypeError(
    /*else*/ {
      __pyx_t_2 = NULL;
+10817:                     '"auth_timeout" must be an int or a timedelta, '
      __pyx_t_8 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auth_timeout_must_be_an_int_or, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10817, __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_2, __pyx_t_8};
        __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_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10816, __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, 10816, __pyx_L1_error)
    }
    __pyx_L76:;
+10818:                     f'not {_fqn(type(auth_timeout))}')
      __pyx_t_8 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_auth_timeout)))); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10818, __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, 10818, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+10819:             if not line_sender_opts_auth_timeout(self._opts, c_auth_timeout, &err):
    __pyx_t_5 = (!line_sender_opts_auth_timeout(__pyx_v_self->_opts, __pyx_v_c_auth_timeout, (&__pyx_v_err)));

    if (unlikely(__pyx_t_5)) {
/* … */
    }
+10820:                 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, 10820, __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, 10820, __pyx_L1_error)
 10821: 
+10822:         if tls_verify is not None:
  __pyx_t_5 = (__pyx_v_tls_verify != Py_None);
  if (__pyx_t_5) {
/* … */
  }
+10823:             if (tls_verify is True) or (tls_verify == 'on'):
    __pyx_t_11 = (__pyx_v_tls_verify == Py_True);
    if (!__pyx_t_11) {

    } else {

      __pyx_t_5 = __pyx_t_11;

      goto __pyx_L80_bool_binop_done;
    }
    __pyx_t_11 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_tls_verify, __pyx_mstate_global->__pyx_n_u_on, Py_EQ); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 10823, __pyx_L1_error)

    __pyx_t_5 = __pyx_t_11;

    __pyx_L80_bool_binop_done:;
    if (__pyx_t_5) {
/* … */
      goto __pyx_L79;
    }
+10824:                 c_tls_verify = True
      __pyx_v_c_tls_verify = 1;
+10825:             elif (tls_verify is False) or (tls_verify == 'unsafe_off'):
    __pyx_t_11 = (__pyx_v_tls_verify == Py_False);
    if (!__pyx_t_11) {

    } else {

      __pyx_t_5 = __pyx_t_11;

      goto __pyx_L82_bool_binop_done;
    }
    __pyx_t_11 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_tls_verify, __pyx_mstate_global->__pyx_n_u_unsafe_off, Py_EQ); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 10825, __pyx_L1_error)

    __pyx_t_5 = __pyx_t_11;

    __pyx_L82_bool_binop_done:;
    if (likely(__pyx_t_5)) {
/* … */
      goto __pyx_L79;
    }
+10826:                 c_tls_verify = False
      __pyx_v_c_tls_verify = 0;
 10827:             else:
+10828:                 raise ValueError(
    /*else*/ {
      __pyx_t_8 = NULL;
+10829:                     '"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, 10829, __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_8, __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_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10828, __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, 10828, __pyx_L1_error)
    }
    __pyx_L79:;
+10830:                     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, 10830, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
+10831:             if not line_sender_opts_tls_verify(self._opts, c_tls_verify, &err):
    __pyx_t_5 = (!line_sender_opts_tls_verify(__pyx_v_self->_opts, __pyx_v_c_tls_verify, (&__pyx_v_err)));

    if (unlikely(__pyx_t_5)) {
/* … */
    }
+10832:                 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, 10832, __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, 10832, __pyx_L1_error)
 10833: 
+10834:         if tls_roots is not None:
  __pyx_t_5 = (__pyx_v_tls_roots != Py_None);
  if (__pyx_t_5) {
/* … */
  }
+10835:             tls_roots = str(tls_roots)
    __pyx_t_18 = __Pyx_PyObject_Unicode(__pyx_v_tls_roots); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10835, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_18);
    __Pyx_DECREF_SET(__pyx_v_tls_roots, __pyx_t_18);
    __pyx_t_18 = 0;
+10836:             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, 10836, __pyx_L1_error)

+10837:             if not line_sender_opts_tls_roots(self._opts, c_tls_roots, &err):
    __pyx_t_5 = (!line_sender_opts_tls_roots(__pyx_v_self->_opts, __pyx_v_c_tls_roots, (&__pyx_v_err)));

    if (unlikely(__pyx_t_5)) {
/* … */
    }
+10838:                 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, 10838, __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, 10838, __pyx_L1_error)
 10839: 
+10840:         if tls_roots_password is not None:
  __pyx_t_5 = (__pyx_v_tls_roots_password != Py_None);
  if (__pyx_t_5) {
/* … */
  }
+10841:             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, 10841, __pyx_L1_error)

+10842:             if not line_sender_opts_tls_roots_password(
    __pyx_t_5 = (!line_sender_opts_tls_roots_password(__pyx_v_self->_opts, __pyx_v_c_tls_roots_password, (&__pyx_v_err)));

    if (unlikely(__pyx_t_5)) {
/* … */
    }
 10843:                     self._opts, c_tls_roots_password, &err):
+10844:                 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, 10844, __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, 10844, __pyx_L1_error)
 10845: 
+10846:         if tls_ca is not None:
  __pyx_t_5 = (__pyx_v_tls_ca != Py_None);
  if (__pyx_t_5) {
/* … */
    goto __pyx_L89;
  }
+10847:             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_L95_try_end;
      __pyx_L90_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_L92_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_L95_try_end:;
    }
+10848:                 c_tls_ca = TlsCa.parse(tls_ca).c_value
        __pyx_t_1 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_TlsCa); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10848, __pyx_L90_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_parse); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10848, __pyx_L90_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 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, 10848, __pyx_L90_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, 10848, __pyx_L90_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        __pyx_t_24 = ((enum line_sender_ca)__Pyx_PyLong_As_enum__line_sender_ca(__pyx_t_2)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10848, __pyx_L90_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_v_c_tls_ca = __pyx_t_24;
+10849:             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, 10849, __pyx_L92_except_error)
        __Pyx_XGOTREF(__pyx_t_2);
        __Pyx_XGOTREF(__pyx_t_18);
        __Pyx_XGOTREF(__pyx_t_1);
+10850:                 raise QuestDBError(
        __pyx_t_7 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 10850, __pyx_L92_except_error)
        __Pyx_GOTREF(__pyx_t_21);
+10851:                     QuestDBErrorCode.ConfigError,
        __Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 10851, __pyx_L92_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, 10851, __pyx_L92_except_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+10852:                     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, 10852, __pyx_L92_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, 10852, __pyx_L92_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_7 = PyMethod_GET_SELF(__pyx_t_21);
          assert(__pyx_t_7);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_21);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_21, __pyx__function);
          __pyx_t_10 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_9, __pyx_t_19};
          __pyx_t_8 = __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_7); __pyx_t_7 = 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_8)) __PYX_ERR(0, 10850, __pyx_L92_except_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, 10850, __pyx_L92_except_error)
      }
      goto __pyx_L92_except_error;
+10853:             if not line_sender_opts_tls_ca(self._opts, c_tls_ca, &err):
    __pyx_t_5 = (!line_sender_opts_tls_ca(__pyx_v_self->_opts, __pyx_v_c_tls_ca, (&__pyx_v_err)));

    if (unlikely(__pyx_t_5)) {
/* … */
    }
+10854:                 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, 10854, __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, 10854, __pyx_L1_error)
+10855:         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, 10855, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 10855, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_11) {

  } else {

    __pyx_t_5 = __pyx_t_11;

    goto __pyx_L99_bool_binop_done;
  }
  __pyx_t_11 = (__pyx_v_tls_roots == Py_None);

  __pyx_t_5 = __pyx_t_11;

  __pyx_L99_bool_binop_done:;
  if (__pyx_t_5) {
/* … */
  }
  __pyx_L89:;
 10856:             # Set different default for Python than the the Rust default.
 10857:             # We don't set it if `tls_roots` is set, as it would override it.
+10858:             c_tls_ca = line_sender_ca_webpki_and_os_roots
    __pyx_v_c_tls_ca = line_sender_ca_webpki_and_os_roots;
+10859:             if not line_sender_opts_tls_ca(self._opts, c_tls_ca, &err):
    __pyx_t_5 = (!line_sender_opts_tls_ca(__pyx_v_self->_opts, __pyx_v_c_tls_ca, (&__pyx_v_err)));

    if (unlikely(__pyx_t_5)) {
/* … */
    }
+10860:                 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, 10860, __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, 10860, __pyx_L1_error)
 10861: 
+10862:         if max_buf_size is not None:
  __pyx_t_5 = (__pyx_v_max_buf_size != Py_None);
  if (__pyx_t_5) {
/* … */
  }
+10863:             if not _is_int_not_bool(max_buf_size):
    __pyx_t_5 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_max_buf_size); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 10863, __pyx_L1_error)
    __pyx_t_11 = (!__pyx_t_5);


    if (unlikely(__pyx_t_11)) {
/* … */
    }
+10864:                 raise TypeError(
      __pyx_t_18 = NULL;
+10865:                     '"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_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10865, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 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, 10864, __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, 10864, __pyx_L1_error)
+10866:                     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, 10866, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10866, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+10867:             c_max_buf_size = max_buf_size
    __pyx_t_23 = __Pyx_PyLong_As_uint64_t(__pyx_v_max_buf_size); if (unlikely((__pyx_t_23 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 10867, __pyx_L1_error)
    __pyx_v_c_max_buf_size = __pyx_t_23;
+10868:             if not line_sender_opts_max_buf_size(self._opts, c_max_buf_size, &err):
    __pyx_t_11 = (!line_sender_opts_max_buf_size(__pyx_v_self->_opts, __pyx_v_c_max_buf_size, (&__pyx_v_err)));

    if (unlikely(__pyx_t_11)) {
/* … */
    }
+10869:                 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, 10869, __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, 10869, __pyx_L1_error)
 10870: 
+10871:         if retry_timeout is not None:
  __pyx_t_11 = (__pyx_v_retry_timeout != Py_None);
  if (__pyx_t_11) {
/* … */
  }
+10872:             if _is_int_not_bool(retry_timeout):
    __pyx_t_11 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_retry_timeout); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 10872, __pyx_L1_error)
    if (__pyx_t_11) {
/* … */
      goto __pyx_L106;
    }
+10873:                 c_retry_timeout = retry_timeout
      __pyx_t_23 = __Pyx_PyLong_As_uint64_t(__pyx_v_retry_timeout); if (unlikely((__pyx_t_23 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 10873, __pyx_L1_error)
      __pyx_v_c_retry_timeout = __pyx_t_23;
+10874:                 if not line_sender_opts_retry_timeout(self._opts, c_retry_timeout, &err):
      __pyx_t_11 = (!line_sender_opts_retry_timeout(__pyx_v_self->_opts, __pyx_v_c_retry_timeout, (&__pyx_v_err)));

      if (unlikely(__pyx_t_11)) {
/* … */
      }
+10875:                     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, 10875, __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, 10875, __pyx_L1_error)
+10876:             elif isinstance(retry_timeout, cp_timedelta):
    __pyx_t_11 = __Pyx_TypeCheck(__pyx_v_retry_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta); 
    if (likely(__pyx_t_11)) {
/* … */
      goto __pyx_L106;
    }
+10877:                 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, 10877, __pyx_L1_error)
      __pyx_t_23 = __pyx_f_7questdb_7_client__timedelta_to_millis(((PyDateTime_Delta *)__pyx_v_retry_timeout)); if (unlikely(__pyx_t_23 == ((uint64_t)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 10877, __pyx_L1_error)
      __pyx_v_c_retry_timeout = __pyx_t_23;
+10878:                 if not line_sender_opts_retry_timeout(self._opts, c_retry_timeout, &err):
      __pyx_t_11 = (!line_sender_opts_retry_timeout(__pyx_v_self->_opts, __pyx_v_c_retry_timeout, (&__pyx_v_err)));

      if (unlikely(__pyx_t_11)) {
/* … */
      }
+10879:                     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, 10879, __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, 10879, __pyx_L1_error)
 10880:             else:
+10881:                 raise TypeError(
    /*else*/ {
      __pyx_t_2 = NULL;
+10882:                     '"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_8); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10882, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 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, 10881, __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, 10881, __pyx_L1_error)
    }
    __pyx_L106:;
+10883:                     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, 10883, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_18); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10883, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 10884: 
+10885:         if retry_max_backoff is not None:
  __pyx_t_11 = (__pyx_v_retry_max_backoff != Py_None);
  if (__pyx_t_11) {
/* … */
  }
+10886:             if _is_int_not_bool(retry_max_backoff):
    __pyx_t_11 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_retry_max_backoff); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 10886, __pyx_L1_error)
    if (__pyx_t_11) {
/* … */
      goto __pyx_L110;
    }
+10887:                 c_retry_max_backoff = retry_max_backoff
      __pyx_t_23 = __Pyx_PyLong_As_uint64_t(__pyx_v_retry_max_backoff); if (unlikely((__pyx_t_23 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 10887, __pyx_L1_error)
      __pyx_v_c_retry_max_backoff = __pyx_t_23;
+10888:                 if not line_sender_opts_retry_max_backoff(
      __pyx_t_11 = (!line_sender_opts_retry_max_backoff(__pyx_v_self->_opts, __pyx_v_c_retry_max_backoff, (&__pyx_v_err)));

      if (unlikely(__pyx_t_11)) {
/* … */
      }
 10889:                         self._opts, c_retry_max_backoff, &err):
+10890:                     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, 10890, __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, 10890, __pyx_L1_error)
+10891:             elif isinstance(retry_max_backoff, cp_timedelta):
    __pyx_t_11 = __Pyx_TypeCheck(__pyx_v_retry_max_backoff, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta); 
    if (likely(__pyx_t_11)) {
/* … */
      goto __pyx_L110;
    }
+10892:                 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, 10892, __pyx_L1_error)
      __pyx_t_23 = __pyx_f_7questdb_7_client__timedelta_to_millis(((PyDateTime_Delta *)__pyx_v_retry_max_backoff)); if (unlikely(__pyx_t_23 == ((uint64_t)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 10892, __pyx_L1_error)
      __pyx_v_c_retry_max_backoff = __pyx_t_23;
+10893:                 if not line_sender_opts_retry_max_backoff(
      __pyx_t_11 = (!line_sender_opts_retry_max_backoff(__pyx_v_self->_opts, __pyx_v_c_retry_max_backoff, (&__pyx_v_err)));

      if (unlikely(__pyx_t_11)) {
/* … */
      }
 10894:                         self._opts, c_retry_max_backoff, &err):
+10895:                     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, 10895, __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, 10895, __pyx_L1_error)
 10896:             else:
+10897:                 raise TypeError(
    /*else*/ {
      __pyx_t_18 = NULL;
+10898:                     '"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_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10898, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 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, 10897, __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, 10897, __pyx_L1_error)
    }
    __pyx_L110:;
+10899:                     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, 10899, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10899, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 10900: 
+10901:         if request_min_throughput is not None:
  __pyx_t_11 = (__pyx_v_request_min_throughput != Py_None);
  if (__pyx_t_11) {
/* … */
  }
+10902:             if not _is_int_not_bool(request_min_throughput):
    __pyx_t_11 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_request_min_throughput); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 10902, __pyx_L1_error)
    __pyx_t_5 = (!__pyx_t_11);


    if (unlikely(__pyx_t_5)) {
/* … */
    }
+10903:                 raise TypeError(
      __pyx_t_2 = NULL;
+10904:                     '"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_8); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10904, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 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, 10903, __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, 10903, __pyx_L1_error)
+10905:                     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, 10905, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_18); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10905, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+10906:             c_request_min_throughput = request_min_throughput
    __pyx_t_23 = __Pyx_PyLong_As_uint64_t(__pyx_v_request_min_throughput); if (unlikely((__pyx_t_23 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 10906, __pyx_L1_error)
    __pyx_v_c_request_min_throughput = __pyx_t_23;
+10907:             if not line_sender_opts_request_min_throughput(self._opts, c_request_min_throughput, &err):
    __pyx_t_5 = (!line_sender_opts_request_min_throughput(__pyx_v_self->_opts, __pyx_v_c_request_min_throughput, (&__pyx_v_err)));

    if (unlikely(__pyx_t_5)) {
/* … */
    }
+10908:                 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, 10908, __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, 10908, __pyx_L1_error)
 10909: 
+10910:         if max_name_len is not None:
  __pyx_t_5 = (__pyx_v_max_name_len != Py_None);
  if (__pyx_t_5) {
/* … */
  }
+10911:             if not _is_int_not_bool(max_name_len):
    __pyx_t_5 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_max_name_len); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 10911, __pyx_L1_error)
    __pyx_t_11 = (!__pyx_t_5);


    if (unlikely(__pyx_t_11)) {
/* … */
    }
+10912:                 raise TypeError(
      __pyx_t_18 = NULL;
+10913:                     '"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_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10913, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 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, 10912, __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, 10912, __pyx_L1_error)
+10914:                     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, 10914, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10914, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+10915:             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, 10915, __pyx_L1_error)
    __pyx_v_c_max_name_len = __pyx_t_10;
+10916:             if not line_sender_opts_max_name_len(self._opts, c_max_name_len, &err):
    __pyx_t_11 = (!line_sender_opts_max_name_len(__pyx_v_self->_opts, __pyx_v_c_max_name_len, (&__pyx_v_err)));

    if (unlikely(__pyx_t_11)) {
/* … */
    }
+10917:                 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, 10917, __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, 10917, __pyx_L1_error)
 10918: 
+10919:         if request_timeout is not None:
  __pyx_t_11 = (__pyx_v_request_timeout != Py_None);
  if (__pyx_t_11) {
/* … */
  }
+10920:             if _is_int_not_bool(request_timeout):
    __pyx_t_11 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_request_timeout); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 10920, __pyx_L1_error)
    if (__pyx_t_11) {
/* … */
      goto __pyx_L120;
    }
+10921:                 c_request_timeout = request_timeout
      __pyx_t_23 = __Pyx_PyLong_As_uint64_t(__pyx_v_request_timeout); if (unlikely((__pyx_t_23 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 10921, __pyx_L1_error)
      __pyx_v_c_request_timeout = __pyx_t_23;
+10922:                 if not line_sender_opts_request_timeout(self._opts, c_request_timeout, &err):
      __pyx_t_11 = (!line_sender_opts_request_timeout(__pyx_v_self->_opts, __pyx_v_c_request_timeout, (&__pyx_v_err)));

      if (unlikely(__pyx_t_11)) {
/* … */
      }
+10923:                     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, 10923, __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, 10923, __pyx_L1_error)
+10924:             elif isinstance(request_timeout, cp_timedelta):
    __pyx_t_11 = __Pyx_TypeCheck(__pyx_v_request_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta); 
    if (likely(__pyx_t_11)) {
/* … */
      goto __pyx_L120;
    }
+10925:                 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, 10925, __pyx_L1_error)
      __pyx_t_23 = __pyx_f_7questdb_7_client__timedelta_to_millis(((PyDateTime_Delta *)__pyx_v_request_timeout)); if (unlikely(__pyx_t_23 == ((uint64_t)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 10925, __pyx_L1_error)
      __pyx_v_c_request_timeout = __pyx_t_23;
+10926:                 if not line_sender_opts_request_timeout(self._opts, c_request_timeout, &err):
      __pyx_t_11 = (!line_sender_opts_request_timeout(__pyx_v_self->_opts, __pyx_v_c_request_timeout, (&__pyx_v_err)));

      if (unlikely(__pyx_t_11)) {
/* … */
      }
+10927:                     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, 10927, __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, 10927, __pyx_L1_error)
 10928:             else:
+10929:                 raise TypeError(
    /*else*/ {
      __pyx_t_2 = NULL;
+10930:                     '"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_8); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10930, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 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, 10929, __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, 10929, __pyx_L1_error)
    }
    __pyx_L120:;
+10931:                     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, 10931, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_18); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10931, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 10932: 
+10933:         if _is_qwp_ws_protocol(self._c_protocol) and auto_flush_bytes is None:
  __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, 10933, __pyx_L1_error)
  if (__pyx_t_5) {

  } else {

    __pyx_t_11 = __pyx_t_5;

    goto __pyx_L124_bool_binop_done;
  }
  __pyx_t_5 = (__pyx_v_auto_flush_bytes == Py_None);

  __pyx_t_11 = __pyx_t_5;

  __pyx_L124_bool_binop_done:;
  if (__pyx_t_11) {
/* … */
  }
 10934:             # As on a pooled lease, the byte threshold derives from the
 10935:             # connection's frame cap, read on every check. The placeholder
 10936:             # lets the byte trigger alone turn auto-flush on.
+10937:             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);
+10938:             self._auto_flush_bytes_dynamic = True
    __pyx_v_self->_auto_flush_bytes_dynamic = 1;
+10939:         _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, 10939, __pyx_L1_error)

 10940:             self._c_protocol,
 10941:             auto_flush,
 10942:             auto_flush_rows,
 10943:             auto_flush_bytes,
 10944:             auto_flush_interval,
 10945:             &self._auto_flush_mode,
 10946:             c_max_datagram_size)
 10947: 
+10948:         self._init_buf_size = init_buf_size or 65536
  __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_v_init_buf_size); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 10948, __pyx_L1_error)
  if (!__pyx_t_11) {
  } 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, 10948, __pyx_L1_error)
    __pyx_t_10 = __pyx_t_22;
    goto __pyx_L126_bool_binop_done;
  }

  __pyx_t_10 = 0x10000;
  __pyx_L126_bool_binop_done:;
  __pyx_v_self->_init_buf_size = __pyx_t_10;
+10949:         self._last_flush_ms = <int64_t*>calloc(1, sizeof(int64_t))
  __pyx_v_self->_last_flush_ms = ((int64_t *)calloc(1, (sizeof(int64_t))));
+10950:         if self._last_flush_ms == NULL:
  __pyx_t_11 = (__pyx_v_self->_last_flush_ms == NULL);

  if (unlikely(__pyx_t_11)) {
/* … */
  }
+10951:             raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 10951, __pyx_L1_error)
 10952: 
 10953:         # Retain a clone of the fully-configured opts (auth/TLS included) so a
 10954:         # ws sender's dataframe() can open a poolless direct columnar
 10955:         # connection per call, independent of how it was built.
+10956:         if _is_qwp_ws_protocol(self._c_protocol) and self._opts != NULL:
  __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, 10956, __pyx_L1_error)
  if (__pyx_t_5) {

  } else {

    __pyx_t_11 = __pyx_t_5;

    goto __pyx_L130_bool_binop_done;
  }
  __pyx_t_5 = (__pyx_v_self->_opts != NULL);


  __pyx_t_11 = __pyx_t_5;

  __pyx_L130_bool_binop_done:;
  if (__pyx_t_11) {
/* … */
  }
+10957:             self._qwp_ws_opts = line_sender_opts_clone(self._opts)
    __pyx_v_self->_qwp_ws_opts = line_sender_opts_clone(__pyx_v_self->_opts);
 10958: 
+10959:     def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_6Sender_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_6Sender_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL_TPNEW
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if !CYTHON_VECTORCALL_TPNEW
  #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
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__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_FASTCALL_TPNEW(__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___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___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;
}
+10960:         self._c_protocol = line_sender_protocol_tcp
  __pyx_v_self->_c_protocol = line_sender_protocol_tcp;
+10961:         self._opts = NULL
  __pyx_v_self->_opts = NULL;
+10962:         self._impl = NULL
  __pyx_v_self->_impl = NULL;
+10963:         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);
+10964:         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, 10964, __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;
+10965:         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;
+10966:         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;
+10967:         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;
+10968:         self._auto_flush_mode.enabled = False
  __pyx_v_self->_auto_flush_mode.enabled = 0;
+10969:         self._auto_flush_bytes_dynamic = False
  __pyx_v_self->_auto_flush_bytes_dynamic = 0;
+10970:         self._last_flush_ms = NULL
  __pyx_v_self->_last_flush_ms = NULL;
+10971:         self._init_buf_size = 0
  __pyx_v_self->_init_buf_size = 0;
+10972:         self._in_txn = False
  __pyx_v_self->_in_txn = 0;
+10973:         self._slot_id = -1
  __pyx_v_self->_slot_id = -1L;
+10974:         self._qwp_ws_opts = NULL
  __pyx_v_self->_qwp_ws_opts = NULL;
+10975:         self._cb_refs_key = 0
  __pyx_v_self->_cb_refs_key = 0;
 10976: 
+10977:     def __init__(
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_6Sender_3__init__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_6Sender_3__init__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  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_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_VECTORCALL_TPNEW
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  #if !CYTHON_VECTORCALL_TPNEW
  #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
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__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_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_TPNEW(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 10977, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 10977, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 10977, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 10977, __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, 10977, __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_2__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_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;
}
 10978:             self,
 10979:             object protocol,
 10980:             str host,
 10981:             object port,
 10982:             *,
+10983:             str bind_interface=None,
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None));
+10984:             str username=None,
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject*)Py_None));
+10985:             str password=None,
      if (!values[5]) values[5] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
      if (!values[5]) values[5] = __Pyx_NewRef(((PyObject*)Py_None));
+10986:             str token=None,
      if (!values[6]) values[6] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
      if (!values[6]) values[6] = __Pyx_NewRef(((PyObject*)Py_None));
+10987:             str token_x=None,
      if (!values[7]) values[7] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
      if (!values[7]) values[7] = __Pyx_NewRef(((PyObject*)Py_None));
+10988:             str token_y=None,
      if (!values[8]) values[8] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
      if (!values[8]) values[8] = __Pyx_NewRef(((PyObject*)Py_None));
+10989:             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));
+10990:             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));
+10991:             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));
+10992:             object tls_roots=None,
      if (!values[12]) values[12] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[12]) values[12] = __Pyx_NewRef(((PyObject *)Py_None));
+10993:             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));
+10994:             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));
+10995:             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));
+10996:             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));
+10997:             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));
+10998:             object request_timeout=None,
      if (!values[18]) values[18] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[18]) values[18] = __Pyx_NewRef(((PyObject *)Py_None));
+10999:             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));
+11000:             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));
+11001:             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));
+11002:             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));
+11003:             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));
+11004:             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));
+11005:             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));
+11006:             object error_handler=None,
      if (!values[26]) values[26] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[26]) values[26] = __Pyx_NewRef(((PyObject *)Py_None));
+11007:             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));
 11008:             object connection_event_inbox_capacity=0,
+11009:             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));
+11010:             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));
+11011:             object max_name_len=None):  # 127
      if (!values[31]) values[31] = __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, 10977, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 10977, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 10977, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 10977, __pyx_L3_error)
/* … */
      if (!values[31]) values[31] = __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_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("__init__", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 10977, __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, 10980, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_bind_interface), (&PyUnicode_Type), 1, "bind_interface", 1))) __PYX_ERR(0, 10983, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_username), (&PyUnicode_Type), 1, "username", 1))) __PYX_ERR(0, 10984, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_password), (&PyUnicode_Type), 1, "password", 1))) __PYX_ERR(0, 10985, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 1, "token", 1))) __PYX_ERR(0, 10986, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token_x), (&PyUnicode_Type), 1, "token_x", 1))) __PYX_ERR(0, 10987, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token_y), (&PyUnicode_Type), 1, "token_y", 1))) __PYX_ERR(0, 10988, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tls_roots_password), (&PyUnicode_Type), 1, "tls_roots_password", 1))) __PYX_ERR(0, 10993, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_2__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_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);
 11012: 
 11013:         cdef line_sender_utf8 c_host
 11014:         cdef str port_str
 11015:         cdef line_sender_protocol c_protocol
 11016:         cdef line_sender_utf8 c_port
 11017:         cdef qdb_pystr_buf* b
+11018:         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)) {
/* … */
  }
+11019:                 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:;
+11020:             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, 11020, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+11021:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11021, __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, 11021, __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, 11020, __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, 11020, __pyx_L1_error)
 11022:                 'Sender is already initialized.')
+11023:         b = qdb_pystr_buf_new()
  __pyx_v_b = qdb_pystr_buf_new();
+11024:         try:
  /*try:*/ {
+11025:             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, 11025, __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, 11025, __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, 11025, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_DECREF_SET(__pyx_v_protocol, __pyx_t_3);
    __pyx_t_3 = 0;
+11026:             if protocol is None:
    __pyx_t_1 = (__pyx_v_protocol == Py_None);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+11027:                 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, 11027, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_5);
+11028:                     QuestDBErrorCode.ConfigError,
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11028, __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, 11028, __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, 11027, __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, 11027, __pyx_L8_error)
 11029:                     '"protocol" is required and cannot be None.')
+11030:             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, 11030, __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, 11030, __pyx_L8_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_c_protocol = __pyx_t_9;
+11031:             if PyLong_CheckExact(<PyObject*>port):
    __pyx_t_1 = PyLong_CheckExact(((PyObject *)__pyx_v_port));

    if (__pyx_t_1) {
/* … */
      goto __pyx_L11;
    }
+11032:                 port_str = str(port)
      __pyx_t_3 = __Pyx_PyObject_Unicode(__pyx_v_port); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11032, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_v_port_str = ((PyObject*)__pyx_t_3);
      __pyx_t_3 = 0;
+11033:             elif PyUnicode_CheckExact(<PyObject*>port):
    __pyx_t_1 = PyUnicode_CheckExact(((PyObject *)__pyx_v_port));

    if (likely(__pyx_t_1)) {
/* … */
      goto __pyx_L11;
    }
+11034:                 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, 11034, __pyx_L8_error)
      __pyx_v_port_str = ((PyObject*)__pyx_t_3);
      __pyx_t_3 = 0;
 11035:             else:
+11036:                 raise TypeError(
    /*else*/ {
      __pyx_t_5 = NULL;
+11037:                     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, 11037, __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, 11037, __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, 11037, __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, 11036, __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, 11036, __pyx_L8_error)
    }
    __pyx_L11:;
+11038:             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, 11038, __pyx_L8_error)

+11039:             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, 11039, __pyx_L8_error)

+11040:             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);
 11041: 
+11042:             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_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, 11042, __pyx_L8_error)

  }
 11043:                 b,
 11044:                 protocol,
 11045:                 bind_interface,
 11046:                 username,
 11047:                 password,
 11048:                 token,
 11049:                 token_x,
 11050:                 token_y,
 11051:                 auth_timeout,
 11052:                 tls_verify,
 11053:                 tls_ca,
 11054:                 tls_roots,
 11055:                 tls_roots_password,
 11056:                 max_buf_size,
 11057:                 retry_timeout,
 11058:                 retry_max_backoff,
 11059:                 request_min_throughput,
 11060:                 request_timeout,
 11061:                 auto_flush,
 11062:                 auto_flush_rows,
 11063:                 auto_flush_bytes,
 11064:                 auto_flush_interval,
 11065:                 max_datagram_size,
 11066:                 multicast_ttl,
 11067:                 protocol_version,
 11068:                 qwp_ws_progress,
 11069:                 error_handler,
 11070:                 connection_listener,
 11071:                 connection_event_inbox_capacity,
 11072:                 init_buf_size,
 11073:                 max_name_len)
 11074:         finally:
+11075:             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:;
  }
 11076: 
+11077:     @staticmethod
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_5from_conf(CYTHON_UNUSED PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_4from_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        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_5from_conf = {"from_conf", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_5from_conf, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_4from_conf};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_5from_conf(CYTHON_UNUSED PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_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_VECTORCALL
  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_VECTORCALL
  #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_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[30] = {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, 11077, __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, 11077, __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, 11077, __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_2generator9(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
static PyObject *__pyx_pf_7questdb_7_client_6Sender_4from_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_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_2generator9 = 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_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_XDECREF(__pyx_t_37);
  __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_2generator9);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_PyDict_NewPresized(29); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 11077, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
/* … */
  __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_5from_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[135])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 11077, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20);
  #endif
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_20, __pyx_t_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_20) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __pyx_t_17 = NULL;
  __Pyx_GetNameInClass(__pyx_t_19, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_from_conf); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11077, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_t_19};
    __pyx_t_20 = __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_19); __pyx_t_19 = 0;
    if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 11077, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_20);
  }
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_from_conf, __pyx_t_20) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 11078:     def from_conf(
 11079:             str conf_str,
 11080:             *,
+11081:             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, 11077, __pyx_L1_error)
+11082:             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, 11077, __pyx_L1_error)
+11083:             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, 11077, __pyx_L1_error)
+11084:             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, 11077, __pyx_L1_error)
+11085:             str token_x=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_token_x, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11086:             str token_y=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_token_y, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11087:             object auth_timeout=None,  # default: 15000 milliseconds
      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_auth_timeout, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11088:             object tls_verify=None,  # default: True
      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_tls_verify, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11089:             object tls_ca=None,  # TLS default: TlsCa.WebpkiAndOsRoots
      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_tls_ca, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11090:             object tls_roots=None,
      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_roots, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11091:             str tls_roots_password=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_17, __pyx_mstate_global->__pyx_n_u_tls_roots_password, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11092:             object max_buf_size=None,  # 100 * 1024 * 1024 - 100MiB
      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_max_buf_size, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11093:             object retry_timeout=None,  # default: 10000 milliseconds
      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_retry_timeout, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11094:             object retry_max_backoff=None,  # default: 1000 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_17, __pyx_mstate_global->__pyx_n_u_retry_max_backoff, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11095:             object request_min_throughput=None, # default: 100 * 1024 - 100KiB/s
      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_request_min_throughput, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11096:             object request_timeout=None,
      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_request_timeout, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11097:             object auto_flush=None,  # Default True
      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_auto_flush, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11098:             object auto_flush_rows=None,  # Default 75000 (HTTP) or 600 (TCP)
      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_auto_flush_rows, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11099:             object auto_flush_bytes=None,  # Default off (90% of the frame cap for ws and wss)
      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_bytes, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11100:             object auto_flush_interval=None,  # Default 1000 milliseconds
      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_interval, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11101:             object max_datagram_size=None,  # Default 1400 for QWP/UDP
      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_max_datagram_size, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11102:             object multicast_ttl=None,  # Default 1 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_17, __pyx_mstate_global->__pyx_n_u_multicast_ttl, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11103:             object qwp_ws_progress=None,  # Default background for QWP/WebSocket
      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_qwp_ws_progress, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11104:             object error_handler=None,
      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_error_handler, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11105:             object connection_listener=None,
      if (!values[25]) values[25] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[26]) values[26] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
/* … */
      if (!values[25]) values[25] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[26]) values[26] = __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, 11077, __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, 11077, __pyx_L1_error)
 11106:             object connection_event_inbox_capacity=0,
+11107:             object protocol_version=None,  # Default auto
      if (!values[27]) values[27] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[27]) values[27] = __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, 11077, __pyx_L1_error)
+11108:             object init_buf_size=None,  # 64KiB
      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_17, __pyx_mstate_global->__pyx_n_u_init_buf_size, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11109:             object max_name_len=None):  # 127
      if (!values[29]) values[29] = __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, 11077, __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, 11077, __pyx_L3_error)
/* … */
      if (!values[29]) values[29] = __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_token_x = ((PyObject*)values[5]);
    __pyx_v_token_y = ((PyObject*)values[6]);
    __pyx_v_auth_timeout = values[7];
    __pyx_v_tls_verify = values[8];
    __pyx_v_tls_ca = values[9];
    __pyx_v_tls_roots = values[10];
    __pyx_v_tls_roots_password = ((PyObject*)values[11]);
    __pyx_v_max_buf_size = values[12];
    __pyx_v_retry_timeout = values[13];
    __pyx_v_retry_max_backoff = values[14];
    __pyx_v_request_min_throughput = values[15];
    __pyx_v_request_timeout = values[16];
    __pyx_v_auto_flush = values[17];
    __pyx_v_auto_flush_rows = values[18];
    __pyx_v_auto_flush_bytes = values[19];
    __pyx_v_auto_flush_interval = values[20];
    __pyx_v_max_datagram_size = values[21];
    __pyx_v_multicast_ttl = values[22];
    __pyx_v_qwp_ws_progress = values[23];
    __pyx_v_error_handler = values[24];
    __pyx_v_connection_listener = values[25];
    __pyx_v_connection_event_inbox_capacity = values[26];
    __pyx_v_protocol_version = values[27];
    __pyx_v_init_buf_size = values[28];
    __pyx_v_max_name_len = values[29];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("from_conf", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 11077, __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, 11079, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_bind_interface), (&PyUnicode_Type), 1, "bind_interface", 1))) __PYX_ERR(0, 11081, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_username), (&PyUnicode_Type), 1, "username", 1))) __PYX_ERR(0, 11082, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_password), (&PyUnicode_Type), 1, "password", 1))) __PYX_ERR(0, 11083, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 1, "token", 1))) __PYX_ERR(0, 11084, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token_x), (&PyUnicode_Type), 1, "token_x", 1))) __PYX_ERR(0, 11085, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token_y), (&PyUnicode_Type), 1, "token_y", 1))) __PYX_ERR(0, 11086, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tls_roots_password), (&PyUnicode_Type), 1, "tls_roots_password", 1))) __PYX_ERR(0, 11091, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_4from_conf(__pyx_v_conf_str, __pyx_v_bind_interface, __pyx_v_username, __pyx_v_password, __pyx_v_token, __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, 11077, __pyx_L1_error)
 11110:         """
 11111:         Construct a sender from a :ref:`configuration string <sender_conf>`.
 11112: 
 11113:         The additional arguments are used to specify additional parameters
 11114:         which are not present in the configuration string.
 11115: 
 11116:         Note that any parameters already present in the configuration string
 11117:         cannot be overridden.
 11118:         """
 11119: 
+11120:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 11121:         cdef object protocol
 11122:         cdef Sender sender
 11123:         cdef str synthetic_conf_str
 11124:         cdef line_sender_utf8 c_synthetic_conf_str
 11125:         cdef dict params
+11126:         cdef qdb_pystr_buf* b = qdb_pystr_buf_new()
  __pyx_v_b = qdb_pystr_buf_new();
+11127:         try:
  /*try:*/ {
+11128:             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, 11128, __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, 11128, __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_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11128, __pyx_L4_error)
        __Pyx_XGOTREF(__pyx_t_2);
        __pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11128, __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, 11128, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11128, __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, 11128, __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, 11128, __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, 11128, __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, 11128, __pyx_L4_error)
    __pyx_v_protocol = __pyx_t_2;
    __pyx_t_2 = 0;
    __pyx_v_params = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
 11129: 
+11130:             addr = params.get('addr')
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 11130, __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, 11130, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_addr = __pyx_t_1;
    __pyx_t_1 = 0;
+11131:             if addr is None:
    __pyx_t_6 = (__pyx_v_addr == Py_None);
    if (unlikely(__pyx_t_6)) {
/* … */
    }
+11132:                 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, 11132, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
+11133:                     QuestDBErrorCode.ConfigError,
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11133, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11133, __pyx_L4_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_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_8 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_7, __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_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_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11132, __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, 11132, __pyx_L4_error)
 11134:                     'Missing "addr" parameter in config string')
 11135: 
 11136:             # add fields to the dictionary, so long as they aren't already
 11137:             # present in the params dictionary
+11138:             for override_key, override_value in {
    __pyx_t_9 = 0;
/* … */
    while (1) {
/* … */
      __Pyx_XDECREF_SET(__pyx_v_override_key, __pyx_t_7);
      __pyx_t_7 = 0;
      __Pyx_XDECREF_SET(__pyx_v_override_value, __pyx_t_2);
      __pyx_t_2 = 0;
+11139:                 'bind_interface': bind_interface,
    __pyx_t_2 = __Pyx_PyDict_NewPresized(26); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11139, __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, 11139, __pyx_L4_error)
/* … */
    __pyx_t_7 = __Pyx_dict_iterator(__pyx_t_2, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_10), (&__pyx_t_11)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11139, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_1);
    __pyx_t_1 = __pyx_t_7;
    __pyx_t_7 = 0;
/* … */
      __pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_10, &__pyx_t_9, &__pyx_t_7, &__pyx_t_2, NULL, __pyx_t_11);
      if (unlikely(__pyx_t_12 == 0)) break;
      if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 11139, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_2);
+11140:                 'username': username,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_username, __pyx_v_username) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
+11141:                 'password': password,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_password, __pyx_v_password) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
+11142:                 'token': token,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_token, __pyx_v_token) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
+11143:                 '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, 11139, __pyx_L4_error)
+11144:                 '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, 11139, __pyx_L4_error)
+11145:                 '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, 11139, __pyx_L4_error)
+11146:                 '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, 11139, __pyx_L4_error)
+11147:                 '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, 11139, __pyx_L4_error)
+11148:                 '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, 11139, __pyx_L4_error)
+11149:                 '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, 11139, __pyx_L4_error)
+11150:                 '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, 11139, __pyx_L4_error)
+11151:                 '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, 11139, __pyx_L4_error)
+11152:                 '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, 11139, __pyx_L4_error)
+11153:                 '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, 11139, __pyx_L4_error)
+11154:                 '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, 11139, __pyx_L4_error)
+11155:                 '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, 11139, __pyx_L4_error)
+11156:                 '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, 11139, __pyx_L4_error)
+11157:                 '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, 11139, __pyx_L4_error)
+11158:                 '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, 11139, __pyx_L4_error)
+11159:                 '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, 11139, __pyx_L4_error)
+11160:                 '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, 11139, __pyx_L4_error)
+11161:                 '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, 11139, __pyx_L4_error)
+11162:                 '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, 11139, __pyx_L4_error)
+11163:                 '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, 11139, __pyx_L4_error)
+11164:                 '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, 11139, __pyx_L4_error)
 11165:             }.items():
+11166:                 if override_value is None:
      __pyx_t_6 = (__pyx_v_override_value == Py_None);
      if (__pyx_t_6) {
/* … */
      }
+11167:                     continue
        goto __pyx_L9_continue;
+11168:                 if override_key in params:
      if (unlikely(__pyx_v_params == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not iterable");
        __PYX_ERR(0, 11168, __pyx_L4_error)
      }
      __pyx_t_6 = (__Pyx_PyDict_ContainsTF(__pyx_v_override_key, __pyx_v_params, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 11168, __pyx_L4_error)
      if (unlikely(__pyx_t_6)) {
/* … */
      }
+11169:                     raise ValueError(
        __pyx_t_7 = NULL;
+11170:                         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, 11170, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_13[0] = __pyx_mstate_global->__pyx_kp_u__38;
        __pyx_t_13[1] = __pyx_t_3;
        __pyx_t_13[2] = __pyx_mstate_global->__pyx_kp_u_is_already_present_in_the_conf;
        __pyx_t_14 = 63;
        #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
        __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13[1]);
        #endif
        __pyx_t_12 = 0;
        #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
        __pyx_t_12 |= __Pyx_PyUnicode_KIND_04(__pyx_t_13[1]);
        #endif
        __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_13, 3, __pyx_t_14, __pyx_t_12);
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11170, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_8 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_4};
          __pyx_t_2 = __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_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11169, __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, 11169, __pyx_L4_error)
 11171:                         'and cannot be overridden.')
+11172:                 params[override_key] = override_value
      if (unlikely(__pyx_v_params == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
        __PYX_ERR(0, 11172, __pyx_L4_error)
      }
      if (unlikely((PyDict_SetItem(__pyx_v_params, __pyx_v_override_key, __pyx_v_override_value) < 0))) __PYX_ERR(0, 11172, __pyx_L4_error)
      __pyx_L9_continue:;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 11173: 
+11174:             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, 11174, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_sender = ((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_t_1);
    __pyx_t_1 = 0;
 11175: 
 11176:             python_handled_keys = {
+11177:                 'addr',
    __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11177, __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, 11177, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_bind_interface) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_username) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_password) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_token) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_token_x) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_token_y) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auth_timeout) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_verify) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_ca) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_roots) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_roots_password) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_max_buf_size) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_retry_timeout) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_retry_max_backoff_millis) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_request_min_throughput) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_request_timeout) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_rows) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_interval) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_max_datagram_size) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_multicast_ttl) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_qwp_ws_progress) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_protocol_version) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_init_buf_size) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_max_name_len) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error)
    __pyx_v_python_handled_keys = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
 11178:                 'bind_interface',
 11179:                 'username',
 11180:                 'password',
 11181:                 'token',
 11182:                 'token_x',
 11183:                 'token_y',
 11184:                 'auth_timeout',
 11185:                 'tls_verify',
 11186:                 'tls_ca',
 11187:                 'tls_roots',
 11188:                 'tls_roots_password',
 11189:                 'max_buf_size',
 11190:                 'retry_timeout',
 11191:                 'retry_max_backoff_millis',
 11192:                 'request_min_throughput',
 11193:                 'request_timeout',
 11194:                 'auto_flush',
 11195:                 'auto_flush_rows',
 11196:                 'auto_flush_bytes',
 11197:                 'auto_flush_interval',
 11198:                 'max_datagram_size',
 11199:                 'multicast_ttl',
 11200:                 'qwp_ws_progress',
 11201:                 'protocol_version',
 11202:                 'init_buf_size',
 11203:                 'max_name_len',
 11204:             }
+11205:             synthetic_params = {'addr': addr}
    __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11205, __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, 11205, __pyx_L4_error)
    __pyx_v_synthetic_params = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
+11206:             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, 11206, __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, 11206, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_15 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_1, __pyx_t_4, Py_EQ); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 11206, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (!__pyx_t_15) {

    } else {

      __pyx_t_6 = __pyx_t_15;

      goto __pyx_L14_bool_binop_done;
    }
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_Protocol); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11206, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_Wss); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11206, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_15 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_1, __pyx_t_2, Py_EQ); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 11206, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    __pyx_t_6 = __pyx_t_15;

    __pyx_L14_bool_binop_done:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_15 = __pyx_t_6;


    if (__pyx_t_15) {
/* … */
    }
+11207:                 for key, value in params.items():
      __pyx_t_10 = 0;
      if (unlikely(__pyx_v_params == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
        __PYX_ERR(0, 11207, __pyx_L4_error)
      }
      __pyx_t_2 = __Pyx_dict_iterator(__pyx_v_params, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_9), (&__pyx_t_11)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11207, __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_12 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_9, &__pyx_t_10, &__pyx_t_2, &__pyx_t_4, NULL, __pyx_t_11);
        if (unlikely(__pyx_t_12 == 0)) break;
        if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 11207, __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;
+11208:                     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, 11208, __pyx_L4_error)
        if (__pyx_t_15) {
/* … */
        }
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+11209:                         synthetic_params[key] = value
          if (unlikely((PyDict_SetItem(__pyx_v_synthetic_params, __pyx_v_key, __pyx_v_value) < 0))) __PYX_ERR(0, 11209, __pyx_L4_error)
+11210:             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, 11210, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = PyNumber_Add(__pyx_t_1, __pyx_mstate_global->__pyx_kp_u__35); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11210, __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, 11210, __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__6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11210, __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, 11210, __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, 11210, __pyx_L4_error)
    __pyx_v_synthetic_conf_str = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
+11211:                 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_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, 11211, __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_2generator9, ((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, 11211, __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_2generator9(__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, 11211, __pyx_L1_error)
  __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 11211, __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, 11211, __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, 11211, __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, 11211, __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__34;
    __pyx_t_9[2] = __pyx_t_8;
    __pyx_t_9[3] = __pyx_mstate_global->__pyx_kp_u__28;
    __pyx_t_10 = 2;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9[0]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9[2]);
    #endif
    __pyx_t_7 = 0;
    #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
    __pyx_t_7 |= __Pyx_PyUnicode_KIND_04(__pyx_t_9[0]) | __Pyx_PyUnicode_KIND_04(__pyx_t_9[2]);
    #endif
    __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_9, 4, __pyx_t_10, __pyx_t_7);
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11211, __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;
    __Pyx_GIVEREF(__pyx_t_5);
    if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_r, __pyx_t_5))) __PYX_ERR(0, 11211, __pyx_L1_error)
    __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, 11211, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_14_genexpr {
  PyObject_HEAD
  PyObject *__pyx_genexpr_arg_0;
  PyObject *__pyx_v_key;
  PyObject *__pyx_v_value;
};

+11212:                 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, 11212, __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, 11212, __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, 11212, __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;
+11213:             str_to_utf8(b, <PyObject*>synthetic_conf_str, &c_synthetic_conf_str)
    __pyx_t_16 = __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_16 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11213, __pyx_L4_error)

+11214:             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));
 11215:                 c_synthetic_conf_str, &err)
+11216:             if sender._opts == NULL:
    __pyx_t_15 = (__pyx_v_sender->_opts == NULL);

    if (unlikely(__pyx_t_15)) {
/* … */
    }
+11217:                 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, 11217, __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, 11217, __pyx_L4_error)
 11218: 
+11219:             sender._set_sender_fields(
    __pyx_t_16 = ((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_7), ((PyObject*)__pyx_t_3), ((PyObject*)__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_t_35, __pyx_v_error_handler, __pyx_v_connection_listener, __pyx_v_connection_event_inbox_capacity, __pyx_t_36, __pyx_t_37); if (unlikely(__pyx_t_16 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11219, __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_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 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;
    __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;

 11220:                 b,
 11221:                 protocol,
+11222:                 params.get('bind_interface'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 11222, __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, 11222, __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, 11222, __pyx_L4_error)
+11223:                 params.get('username'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 11223, __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, 11223, __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, 11223, __pyx_L4_error)
+11224:                 params.get('password'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 11224, __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, 11224, __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, 11224, __pyx_L4_error)
+11225:                 params.get('token'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 11225, __pyx_L4_error)
    }
    __pyx_t_7 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_token, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11225, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (!(likely(PyUnicode_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_7))) __PYX_ERR(0, 11225, __pyx_L4_error)
+11226:                 params.get('token_x'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 11226, __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, 11226, __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, 11226, __pyx_L4_error)
+11227:                 params.get('token_y'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 11227, __pyx_L4_error)
    }
    __pyx_t_17 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_token_y, Py_None); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 11227, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_17);
    if (!(likely(PyUnicode_CheckExact(__pyx_t_17))||((__pyx_t_17) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_17))) __PYX_ERR(0, 11227, __pyx_L4_error)
+11228:                 params.get('auth_timeout'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 11228, __pyx_L4_error)
    }
    __pyx_t_18 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auth_timeout, Py_None); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11228, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_18);
+11229:                 params.get('tls_verify'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 11229, __pyx_L4_error)
    }
    __pyx_t_19 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_tls_verify, Py_None); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11229, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_19);
+11230:                 params.get('tls_ca'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 11230, __pyx_L4_error)
    }
    __pyx_t_20 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_tls_ca, Py_None); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 11230, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_20);
+11231:                 params.get('tls_roots'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 11231, __pyx_L4_error)
    }
    __pyx_t_21 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_tls_roots, Py_None); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 11231, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_21);
+11232:                 params.get('tls_roots_password'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 11232, __pyx_L4_error)
    }
    __pyx_t_22 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_tls_roots_password, Py_None); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 11232, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_22);
+11233:                 params.get('max_buf_size'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 11233, __pyx_L4_error)
    }
    __pyx_t_23 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_max_buf_size, Py_None); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 11233, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_23);
+11234:                 params.get('retry_timeout'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 11234, __pyx_L4_error)
    }
    __pyx_t_24 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_retry_timeout, Py_None); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 11234, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_24);
+11235:                 params.get('retry_max_backoff_millis'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 11235, __pyx_L4_error)
    }
    __pyx_t_25 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_retry_max_backoff_millis, Py_None); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 11235, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_25);
+11236:                 params.get('request_min_throughput'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 11236, __pyx_L4_error)
    }
    __pyx_t_26 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_request_min_throughput, Py_None); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 11236, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_26);
+11237:                 params.get('request_timeout'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 11237, __pyx_L4_error)
    }
    __pyx_t_27 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_request_timeout, Py_None); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 11237, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_27);
+11238:                 params.get('auto_flush'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 11238, __pyx_L4_error)
    }
    __pyx_t_28 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auto_flush, Py_None); if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 11238, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_28);
+11239:                 params.get('auto_flush_rows'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 11239, __pyx_L4_error)
    }
    __pyx_t_29 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auto_flush_rows, Py_None); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 11239, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_29);
+11240:                 params.get('auto_flush_bytes'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 11240, __pyx_L4_error)
    }
    __pyx_t_30 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes, Py_None); if (unlikely(!__pyx_t_30)) __PYX_ERR(0, 11240, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_30);
+11241:                 params.get('auto_flush_interval'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 11241, __pyx_L4_error)
    }
    __pyx_t_31 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auto_flush_interval, Py_None); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 11241, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_31);
+11242:                 params.get('max_datagram_size'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 11242, __pyx_L4_error)
    }
    __pyx_t_32 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_max_datagram_size, Py_None); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 11242, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_32);
+11243:                 params.get('multicast_ttl'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 11243, __pyx_L4_error)
    }
    __pyx_t_33 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_multicast_ttl, Py_None); if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 11243, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_33);
+11244:                 params.get('protocol_version'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 11244, __pyx_L4_error)
    }
    __pyx_t_34 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_protocol_version, Py_None); if (unlikely(!__pyx_t_34)) __PYX_ERR(0, 11244, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_34);
+11245:                 params.get('qwp_ws_progress'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 11245, __pyx_L4_error)
    }
    __pyx_t_35 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_qwp_ws_progress, Py_None); if (unlikely(!__pyx_t_35)) __PYX_ERR(0, 11245, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_35);
 11246:                 error_handler,
 11247:                 connection_listener,
 11248:                 connection_event_inbox_capacity,
+11249:                 params.get('init_buf_size'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 11249, __pyx_L4_error)
    }
    __pyx_t_36 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_init_buf_size, Py_None); if (unlikely(!__pyx_t_36)) __PYX_ERR(0, 11249, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_36);
+11250:                 params.get('max_name_len'))
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
      __PYX_ERR(0, 11250, __pyx_L4_error)
    }
    __pyx_t_37 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_max_name_len, Py_None); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 11250, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_37);
 11251: 
+11252:             return sender
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF((PyObject *)__pyx_v_sender);
        __pyx_r = ((PyObject *)__pyx_v_sender);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L3_return;
  }
 11253:         finally:
+11254:             qdb_pystr_buf_free(b)
  /*finally:*/ {
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_39 = 0; __pyx_t_40 = 0; __pyx_t_41 = 0; __pyx_t_42 = 0; __pyx_t_43 = 0; __pyx_t_44 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 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_37); __pyx_t_37 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_42, &__pyx_t_43, &__pyx_t_44);
      if ( unlikely(__Pyx_GetException(&__pyx_t_39, &__pyx_t_40, &__pyx_t_41) < 0)) __Pyx_ErrFetch(&__pyx_t_39, &__pyx_t_40, &__pyx_t_41);
      __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_XGOTREF(__pyx_t_44);
      __pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_38 = __pyx_filename;
      {
        qdb_pystr_buf_free(__pyx_v_b);
      }
      __Pyx_XGIVEREF(__pyx_t_42);
      __Pyx_XGIVEREF(__pyx_t_43);
      __Pyx_XGIVEREF(__pyx_t_44);
      __Pyx_ExceptionReset(__pyx_t_42, __pyx_t_43, __pyx_t_44);
      __Pyx_XGIVEREF(__pyx_t_39);
      __Pyx_XGIVEREF(__pyx_t_40);
      __Pyx_XGIVEREF(__pyx_t_41);
      __Pyx_ErrRestore(__pyx_t_39, __pyx_t_40, __pyx_t_41);
      __pyx_t_39 = 0; __pyx_t_40 = 0; __pyx_t_41 = 0; __pyx_t_42 = 0; __pyx_t_43 = 0; __pyx_t_44 = 0;
      __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_38;
      goto __pyx_L1_error;
    }
    __pyx_L3_return: {
      __pyx_t_44 = __pyx_r;
      __pyx_r = 0;
      qdb_pystr_buf_free(__pyx_v_b);
      __pyx_r = __pyx_t_44;
      __pyx_t_44 = 0;
      goto __pyx_L0;
    }
  }
 11255: 
+11256:     @staticmethod
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_7from_env(CYTHON_UNUSED PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_6from_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        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_7from_env = {"from_env", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_7from_env, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_6from_env};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_7from_env(CYTHON_UNUSED PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
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_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_VECTORCALL
  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_VECTORCALL
  #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_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[29] = {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, 11256, __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, 11256, __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_6from_env(PyObject *__pyx_v_bind_interface, PyObject *__pyx_v_username, PyObject *__pyx_v_password, PyObject *__pyx_v_token, 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_20 = __Pyx_PyDict_NewPresized(29); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 11256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
/* … */
  __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_7from_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[136])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_19, __pyx_t_20);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_from_env, __pyx_t_19) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __pyx_t_20 = 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, 11256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_20, __pyx_t_17};
    __pyx_t_19 = __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_20); __pyx_t_20 = 0;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11256, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_19);
  }
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_from_env, __pyx_t_19) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 11257:     def from_env(
 11258:             *,
+11259:             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_20, __pyx_mstate_global->__pyx_n_u_bind_interface, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11260:             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_20, __pyx_mstate_global->__pyx_n_u_username, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11261:             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_20, __pyx_mstate_global->__pyx_n_u_password, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11262:             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_20, __pyx_mstate_global->__pyx_n_u_token, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11263:             str token_x=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_20, __pyx_mstate_global->__pyx_n_u_token_x, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11264:             str token_y=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_20, __pyx_mstate_global->__pyx_n_u_token_y, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11265:             object auth_timeout=None,  # default: 15000 milliseconds
      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_20, __pyx_mstate_global->__pyx_n_u_auth_timeout, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11266:             object tls_verify=None,  # default: True
      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_20, __pyx_mstate_global->__pyx_n_u_tls_verify, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11267:             object tls_ca=None,  # TLS default: TlsCa.WebpkiAndOsRoots
      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_20, __pyx_mstate_global->__pyx_n_u_tls_ca, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11268:             object tls_roots=None,
      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_20, __pyx_mstate_global->__pyx_n_u_tls_roots, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11269:             str tls_roots_password=None,
      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_20, __pyx_mstate_global->__pyx_n_u_tls_roots_password, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11270:             object max_buf_size=None,  # 100 * 1024 * 1024 - 100MiB
      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_20, __pyx_mstate_global->__pyx_n_u_max_buf_size, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11271:             object retry_timeout=None,  # default: 10000 milliseconds
      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_20, __pyx_mstate_global->__pyx_n_u_retry_timeout, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11272:             object retry_max_backoff=None,  # default: 1000 milliseconds
      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_20, __pyx_mstate_global->__pyx_n_u_retry_max_backoff, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11273:             object request_min_throughput=None, # default: 100 * 1024 - 100KiB/s
      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_20, __pyx_mstate_global->__pyx_n_u_request_min_throughput, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11274:             object request_timeout=None,
      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_20, __pyx_mstate_global->__pyx_n_u_request_timeout, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11275:             object auto_flush=None,  # Default True
      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_20, __pyx_mstate_global->__pyx_n_u_auto_flush, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11276:             object auto_flush_rows=None,  # Default 75000 (HTTP) or 600 (TCP)
      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_20, __pyx_mstate_global->__pyx_n_u_auto_flush_rows, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11277:             object auto_flush_bytes=None,  # Default off (90% of the frame cap for ws and wss)
      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_20, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11278:             object auto_flush_interval=None,  # Default 1000 milliseconds
      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_20, __pyx_mstate_global->__pyx_n_u_auto_flush_interval, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11279:             object max_datagram_size=None,  # Default 1400 for QWP/UDP
      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_20, __pyx_mstate_global->__pyx_n_u_max_datagram_size, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11280:             object multicast_ttl=None,  # Default 1 for QWP/UDP
      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_20, __pyx_mstate_global->__pyx_n_u_multicast_ttl, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11281:             object qwp_ws_progress=None,  # Default background for QWP/WebSocket
      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_20, __pyx_mstate_global->__pyx_n_u_qwp_ws_progress, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11282:             object error_handler=None,
      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_20, __pyx_mstate_global->__pyx_n_u_error_handler, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11283:             object connection_listener=None,
      if (!values[24]) values[24] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[25]) values[25] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
/* … */
      if (!values[24]) values[24] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[25]) values[25] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
/* … */
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_connection_listener, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_connection_event_inbox_capacity, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
 11284:             object connection_event_inbox_capacity=0,
+11285:             object protocol_version=None,  # Default auto
      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_20, __pyx_mstate_global->__pyx_n_u_protocol_version, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11286:             object init_buf_size=None,  # 64KiB
      if (!values[27]) values[27] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[27]) values[27] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_init_buf_size, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11287:             object max_name_len=None):  # 127
      if (!values[28]) values[28] = __Pyx_NewRef(((PyObject *)Py_None));
    } else if (unlikely(__pyx_nargs != 0)) {
      goto __pyx_L5_argtuple_error;
    } else {
/* … */
      if (!values[28]) values[28] = __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_token_x = ((PyObject*)values[4]);
    __pyx_v_token_y = ((PyObject*)values[5]);
    __pyx_v_auth_timeout = values[6];
    __pyx_v_tls_verify = values[7];
    __pyx_v_tls_ca = values[8];
    __pyx_v_tls_roots = values[9];
    __pyx_v_tls_roots_password = ((PyObject*)values[10]);
    __pyx_v_max_buf_size = values[11];
    __pyx_v_retry_timeout = values[12];
    __pyx_v_retry_max_backoff = values[13];
    __pyx_v_request_min_throughput = values[14];
    __pyx_v_request_timeout = values[15];
    __pyx_v_auto_flush = values[16];
    __pyx_v_auto_flush_rows = values[17];
    __pyx_v_auto_flush_bytes = values[18];
    __pyx_v_auto_flush_interval = values[19];
    __pyx_v_max_datagram_size = values[20];
    __pyx_v_multicast_ttl = values[21];
    __pyx_v_qwp_ws_progress = values[22];
    __pyx_v_error_handler = values[23];
    __pyx_v_connection_listener = values[24];
    __pyx_v_connection_event_inbox_capacity = values[25];
    __pyx_v_protocol_version = values[26];
    __pyx_v_init_buf_size = values[27];
    __pyx_v_max_name_len = values[28];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("from_env", 1, 0, 0, __pyx_nargs); __PYX_ERR(0, 11256, __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, 11259, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_username), (&PyUnicode_Type), 1, "username", 1))) __PYX_ERR(0, 11260, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_password), (&PyUnicode_Type), 1, "password", 1))) __PYX_ERR(0, 11261, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 1, "token", 1))) __PYX_ERR(0, 11262, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token_x), (&PyUnicode_Type), 1, "token_x", 1))) __PYX_ERR(0, 11263, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token_y), (&PyUnicode_Type), 1, "token_y", 1))) __PYX_ERR(0, 11264, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tls_roots_password), (&PyUnicode_Type), 1, "tls_roots_password", 1))) __PYX_ERR(0, 11269, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_6from_env(__pyx_v_bind_interface, __pyx_v_username, __pyx_v_password, __pyx_v_token, __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_20, __pyx_mstate_global->__pyx_n_u_max_name_len, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
 11288:         """
 11289:         Construct a sender from the ``QDB_CLIENT_CONF`` environment variable.
 11290: 
 11291:         The environment variable must be set to a valid
 11292:         :ref:`configuration string <sender_conf>`.
 11293: 
 11294:         The additional arguments are used to specify additional parameters
 11295:         which are not present in the configuration string.
 11296: 
 11297:         Note that any parameters already present in the configuration string
 11298:         cannot be overridden.
 11299:         """
+11300:         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, 11300, __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, 11300, __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, 11300, __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, 11300, __pyx_L1_error)
  __pyx_v_conf_str = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+11301:         if conf_str is None:
  __pyx_t_6 = (__pyx_v_conf_str == ((PyObject*)Py_None));
  if (unlikely(__pyx_t_6)) {
/* … */
  }
+11302:             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, 11302, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
+11303:                 QuestDBErrorCode.ConfigError,
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11303, __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, 11303, __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, 11302, __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, 11302, __pyx_L1_error)
 11304:                 'Environment variable QDB_CLIENT_CONF is not set.')
+11305:         return Sender.from_conf(
  __pyx_t_2 = ((PyObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender);
  __Pyx_INCREF(__pyx_t_2);
/* … */
  {
    PyObject* __pyx_temp[29] = {__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_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};
    __pyx_mstate_global->__pyx_tuple[35] = __Pyx_PyTuple_FromArray(__pyx_temp, 29); if (unlikely(!__pyx_mstate_global->__pyx_tuple[35])) __PYX_ERR(0, 11305, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[35]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[35]);
 11306:             conf_str,
 11307:             bind_interface=bind_interface,
 11308:             username=username,
 11309:             password=password,
 11310:             token=token,
 11311:             token_x=token_x,
 11312:             token_y=token_y,
 11313:             auth_timeout=auth_timeout,
 11314:             tls_verify=tls_verify,
 11315:             tls_ca=tls_ca,
 11316:             tls_roots=tls_roots,
 11317:             tls_roots_password=tls_roots_password,
 11318:             max_buf_size=max_buf_size,
 11319:             retry_timeout=retry_timeout,
 11320:             retry_max_backoff=retry_max_backoff,
 11321:             request_min_throughput=request_min_throughput,
 11322:             request_timeout=request_timeout,
 11323:             auto_flush=auto_flush,
 11324:             auto_flush_rows=auto_flush_rows,
 11325:             auto_flush_bytes=auto_flush_bytes,
 11326:             auto_flush_interval=auto_flush_interval,
 11327:             max_datagram_size=max_datagram_size,
 11328:             multicast_ttl=multicast_ttl,
 11329:             qwp_ws_progress=qwp_ws_progress,
 11330:             error_handler=error_handler,
 11331:             connection_listener=connection_listener,
 11332:             connection_event_inbox_capacity=connection_event_inbox_capacity,
 11333:             protocol_version=protocol_version,
 11334:             init_buf_size=init_buf_size,
+11335:             max_name_len=max_name_len)
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[31] = {__pyx_t_2, __pyx_v_conf_str, __pyx_v_bind_interface, __pyx_v_username, __pyx_v_password, __pyx_v_token, __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 CYTHON_VECTORCALL
    __pyx_t_7 = __pyx_mstate_global->__pyx_tuple[35];
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11305, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_7);
    #else
    {
      PyObject *__pyx_temp[29] = {__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_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};
      __pyx_t_7 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 29);
      if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11305, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
    }
    #endif
    __pyx_t_1 = __Pyx_Object_VectorcallMethodKwds((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, 11305, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 11336: 
 11337: 
+11338:     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;
}
+11339:         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, 11339, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_buf = ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_1);
  __pyx_t_1 = 0;
+11340:         buf._impl = line_sender_buffer_new_for_sender(self._impl)
  __pyx_v_buf->_impl = line_sender_buffer_new_for_sender(__pyx_v_self->_impl);
+11341:         buf._b = qdb_pystr_buf_new()
  __pyx_v_buf->_b = qdb_pystr_buf_new();
+11342:         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, 11342, __pyx_L1_error)

+11343:         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;
+11344:         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);
+11345:         buf._qwp = (
  __pyx_v_buf->_qwp = __pyx_t_4;
+11346:             _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, 11346, __pyx_L1_error)
  if (!__pyx_t_5) {

  } else {

    __pyx_t_4 = __pyx_t_5;

    goto __pyx_L3_bool_binop_done;
  }
+11347:             _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, 11347, __pyx_L1_error)

  __pyx_t_4 = __pyx_t_5;

  __pyx_L3_bool_binop_done:;
+11348:         return buf
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF((PyObject *)__pyx_v_buf);
      __pyx_r = ((PyObject *)__pyx_v_buf);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 11349: 
+11350:     def new_buffer(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_9new_buffer(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_8new_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\047s 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_9new_buffer = {"new_buffer", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_9new_buffer, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_8new_buffer};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_9new_buffer(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_8new_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_8new_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_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.new_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_9new_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[137])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_new_buffer, __pyx_t_19) < (0)) __PYX_ERR(0, 11350, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 11351:         """
 11352:         Make a new configured buffer.
 11353: 
 11354:         The buffer is set up with the configured `init_buf_size` and
 11355:         `max_name_len`, and matches the sender's protocol.
 11356: 
 11357:         Must be called after :func:`Sender.establish` and before
 11358:         :func:`Sender.close`; otherwise raises
 11359:         :class:`QuestDBError` (``InvalidApiCall``).
 11360:         """
+11361:         if self._impl == NULL:
  __pyx_t_1 = (__pyx_v_self->_impl == NULL);

  if (__pyx_t_1) {
/* … */
  }
+11362:             if self._opts == NULL:
    __pyx_t_1 = (__pyx_v_self->_opts == NULL);

    if (unlikely(__pyx_t_1)) {
/* … */
    }
+11363:                 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, 11363, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
+11364:                     QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11364, __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, 11364, __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_new_buffer_can_t_be_called_Sende};
        __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, 11363, __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, 11363, __pyx_L1_error)
 11365:                     'new_buffer() can\'t be called: Sender is closed.')
+11366:             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, 11366, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
+11367:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11367, __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, 11367, __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_new_buffer_can_t_be_called_befor};
      __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, 11366, __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, 11366, __pyx_L1_error)
 11368:                 'new_buffer() can\'t be called before establish().')
+11369:         return self._new_buffer_for_sender()
  __pyx_t_2 = __pyx_f_7questdb_7_client_6Sender__new_buffer_for_sender(__pyx_v_self); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11369, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_2;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_2 = 0;
  goto __pyx_L0;
 11370: 
+11371:     @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;
}
 11372:     def init_buf_size(self) -> int:
 11373:         """The initial capacity of the sender's internal buffer."""
+11374:         return self._init_buf_size
  __pyx_t_1 = __Pyx_PyLong_FromSize_t(__pyx_v_self->_init_buf_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11374, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 11375: 
+11376:     @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_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.max_name_len.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 11377:     def max_name_len(self) -> int:
 11378:         """Maximum length of a table or column name."""
+11379:         if self._impl == NULL:
  __pyx_t_1 = (__pyx_v_self->_impl == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+11380:             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, 11380, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+11381:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11381, __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, 11381, __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_max_name_len_can_t_be_called_Sen};
      __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, 11380, __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, 11380, __pyx_L1_error)
 11382:                 'max_name_len() can\'t be called: Sender is closed.')
+11383:         return line_sender_get_max_name_len(self._impl)
  __pyx_t_2 = __Pyx_PyLong_FromSize_t(line_sender_get_max_name_len(__pyx_v_self->_impl)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11383, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_2;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_2 = 0;
  goto __pyx_L0;
 11384: 
+11385:     @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;
}
 11386:     def auto_flush(self) -> bint:
 11387:         """
 11388:         Auto-flushing is enabled.
 11389: 
 11390:         Consult the `.auto_flush_rows`, `.auto_flush_bytes` and
 11391:         `.auto_flush_interval` properties for the current active thresholds.
 11392: 
 11393:         Over ``ws`` and ``wss`` the byte threshold is on by default, so
 11394:         auto-flush stays on with ``auto_flush_rows`` and
 11395:         ``auto_flush_interval`` both off. Pass ``auto_flush=off`` to batch
 11396:         by hand.
 11397:         """
+11398:         return self._auto_flush_mode.enabled
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->_auto_flush_mode.enabled); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11398, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 11399: 
+11400:     @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;
}
 11401:     def auto_flush_rows(self) -> Optional[int]:
 11402:         """
 11403:         Row count threshold for the auto-flush logic, or None if disabled.
 11404:         """
+11405:         if not self._auto_flush_mode.enabled:
  __pyx_t_1 = (!__pyx_v_self->_auto_flush_mode.enabled);

  if (__pyx_t_1) {
/* … */
  }
+11406:             return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+11407:         if self._auto_flush_mode.row_count == -1:
  __pyx_t_1 = (__pyx_v_self->_auto_flush_mode.row_count == -1L);

  if (__pyx_t_1) {
/* … */
  }
+11408:             return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+11409:         return self._auto_flush_mode.row_count
  __pyx_t_2 = __Pyx_PyLong_From_int64_t(__pyx_v_self->_auto_flush_mode.row_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11409, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_2;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_2 = 0;
  goto __pyx_L0;
 11410: 
+11411:     @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;
}
 11412:     def auto_flush_bytes(self) -> Optional[int]:
 11413:         """
 11414:         Byte-count threshold for the auto-flush logic, or None if disabled or
 11415:         not yet known.
 11416: 
 11417:         Over ``ws`` and ``wss`` the threshold is at most 90% of the
 11418:         connection's frame cap, and by default it is 90% of that cap. The
 11419:         cap is known once :func:`Sender.establish` has connected, so before
 11420:         that the default reports ``None``. A server that does not advertise
 11421:         a cap counts as having QuestDB's default, 2 MiB less 14 bytes,
 11422:         unless the local limit is lower. An explicit threshold reads as
 11423:         configured before :func:`Sender.establish` and after
 11424:         :func:`Sender.close`; the cap lowers it only between the two.
 11425: 
 11426:         Raises :class:`QuestDBError <questdb.QuestDBError>`
 11427:         (``InvalidApiCall``) when read over ``ws`` or ``wss`` from this
 11428:         sender's own ``error_handler`` or ``connection_listener``.
 11429:         """
+11430:         cdef size_t hard_cap = 0
  __pyx_v_hard_cap = 0;
+11431:         cdef cbool server_cap_known = False
  __pyx_v_server_cap_known = 0;
+11432:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+11433:         if not self._auto_flush_mode.enabled:
  __pyx_t_1 = (!__pyx_v_self->_auto_flush_mode.enabled);

  if (__pyx_t_1) {
/* … */
  }
+11434:             return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+11435:         if self._auto_flush_mode.byte_count == -1:
  __pyx_t_1 = (__pyx_v_self->_auto_flush_mode.byte_count == -1L);

  if (__pyx_t_1) {
/* … */
  }
+11436:             return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+11437:         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, 11437, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);


  if (__pyx_t_2) {
/* … */
  }
+11438:             return self._auto_flush_mode.byte_count
    __pyx_t_3 = __Pyx_PyLong_From_int64_t(__pyx_v_self->_auto_flush_mode.byte_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11438, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_3;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_3 = 0;
    goto __pyx_L0;
+11439:         if self._impl == NULL:
  __pyx_t_2 = (__pyx_v_self->_impl == NULL);

  if (__pyx_t_2) {
/* … */
  }
+11440:             if self._auto_flush_bytes_dynamic:
    if (__pyx_v_self->_auto_flush_bytes_dynamic) {
/* … */
    }
+11441:                 return None
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __pyx_r = Py_None; __Pyx_INCREF(Py_None);
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      goto __pyx_L0;
+11442:             return self._auto_flush_mode.byte_count
    __pyx_t_3 = __Pyx_PyLong_From_int64_t(__pyx_v_self->_auto_flush_mode.byte_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11442, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_3;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_3 = 0;
    goto __pyx_L0;
+11443:         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); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11443, __pyx_L1_error)

+11444:         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)) {
/* … */
  }
 11445:                 self._impl, &hard_cap, &server_cap_known, &err):
+11446:             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, 11446, __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, 11446, __pyx_L1_error)
+11447:         return _qwp_row_byte_limit(
  __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, 11447, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_3;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_3 = 0;
  goto __pyx_L0;
 11448:             &self._auto_flush_mode,
 11449:             self._auto_flush_bytes_dynamic,
 11450:             _qwp_row_planning_cap(hard_cap, server_cap_known))
 11451: 
+11452:     @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;
}
 11453:     def auto_flush_interval(self) -> Optional[datetime.timedelta]:
 11454:         """
 11455:         Time interval threshold for the auto-flush logic, or None if disabled.
 11456:         """
+11457:         if not self._auto_flush_mode.enabled:
  __pyx_t_1 = (!__pyx_v_self->_auto_flush_mode.enabled);

  if (__pyx_t_1) {
/* … */
  }
+11458:             return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+11459:         if self._auto_flush_mode.interval == -1:
  __pyx_t_1 = (__pyx_v_self->_auto_flush_mode.interval == -1L);

  if (__pyx_t_1) {
/* … */
  }
+11460:             return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+11461:         return cp_timedelta(milliseconds=self._auto_flush_mode.interval)
  __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, 11461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_4};
    #if CYTHON_VECTORCALL
    __pyx_t_6 = __pyx_mstate_global->__pyx_tuple[36];
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11461, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_6);
    #else
    {
      PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_milliseconds};
      __pyx_t_6 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11461, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
    }
    #endif
    __pyx_t_2 = __Pyx_Object_VectorcallKwds((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, 11461, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_2);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = ((PyObject *)__pyx_t_2);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_2 = 0;
  goto __pyx_L0;
/* … */
  {
    PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_milliseconds};
    __pyx_mstate_global->__pyx_tuple[36] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[36])) __PYX_ERR(0, 11461, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[36]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[36]);
 11462: 
+11463:     @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_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.protocol_version.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 11464:     def protocol_version(self) -> int:
 11465:         """
 11466:         The protocol version used by the sender.
 11467: 
 11468:         Protocol version 1 is retained for backwards compatibility with
 11469:         older QuestDB versions.
 11470: 
 11471:         Protocol version 2 introduces binary floating point support and
 11472:         the array datatype.
 11473:         """
+11474:         if self._impl == NULL:
  __pyx_t_1 = (__pyx_v_self->_impl == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+11475:             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, 11475, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+11476:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11476, __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, 11476, __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_protocol_version_can_t_be_called};
      __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, 11475, __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, 11475, __pyx_L1_error)
 11477:                 'protocol_version() can\'t be called: Sender is closed.')
+11478:         if _is_qwp_udp_protocol(self._c_protocol):
  __pyx_t_1 = __pyx_f_7questdb_7_client__is_qwp_udp_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11478, __pyx_L1_error)
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+11479:             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, 11479, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
+11480:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11480, __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, 11480, __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_protocol_version_is_not_applicab};
      __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, 11479, __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, 11479, __pyx_L1_error)
 11481:                 'protocol_version is not applicable for QWP/UDP senders.')
+11482:         return <int>line_sender_get_protocol_version(self._impl)
  __pyx_t_2 = __Pyx_PyLong_From_int(((int)line_sender_get_protocol_version(__pyx_v_self->_impl))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11482, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_2;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_2 = 0;
  goto __pyx_L0;
 11483: 
+11484:     def establish(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_11establish(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_10establish, "\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_11establish = {"establish", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_11establish, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_10establish};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_11establish(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_10establish(((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_10establish(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_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_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.establish", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;




  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_11establish, __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[138])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11484, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_establish, __pyx_t_19) < (0)) __PYX_ERR(0, 11484, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 11485:         """
 11486:         Prepare the sender for use.
 11487: 
 11488:         If using ILP/HTTP this will initialize the HTTP connection pool.
 11489: 
 11490:         If using ILP/TCP this will cause connection to the server and
 11491:         block until the connection is established.
 11492: 
 11493:         If the TCP connection is set up with authentication and/or TLS, this
 11494:         method will return only *after* the handshake(s) is/are complete.
 11495:         """
+11496:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+11497:         cdef PyThreadState * gs = NULL
  __pyx_v_gs = NULL;
+11498:         cdef line_sender* failed_impl = NULL
  __pyx_v_failed_impl = NULL;
+11499:         if self._opts == NULL:
  __pyx_t_1 = (__pyx_v_self->_opts == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+11500:             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, 11500, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+11501:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11501, __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, 11501, __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_establish_can_t_be_called_after};
      __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, 11500, __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, 11500, __pyx_L1_error)
 11502:                 'establish() can\'t be called after close().')
 11503: 
 11504:         # We disable the GIL when calling `line_sender_build` since for HTTP
 11505:         # it can make HTTP requests to auto-detect the protocol version.
+11506:         _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+11507:         self._impl = line_sender_build(self._opts, &err)
  __pyx_v_self->_impl = line_sender_build(__pyx_v_self->_opts, (&__pyx_v_err));
+11508:         _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
 11509: 
+11510:         if self._impl == NULL:
  __pyx_t_1 = (__pyx_v_self->_impl == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+11511:             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, 11511, __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, 11511, __pyx_L1_error)
 11512: 
+11513:         if self._buffer is None:
  __pyx_t_1 = (((PyObject *)__pyx_v_self->_buffer) == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+11514:             try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      goto __pyx_L11_try_end;
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
      __pyx_L8_except_error:;
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      goto __pyx_L1_error;
      __pyx_L11_try_end:;
    }
+11515:                 self._buffer = self._new_buffer_for_sender()
        __pyx_t_2 = __pyx_f_7questdb_7_client_6Sender__new_buffer_for_sender(__pyx_v_self); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11515, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_2);
        if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer))))) __PYX_ERR(0, 11515, __pyx_L6_error)
        __Pyx_GIVEREF(__pyx_t_2);
        __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_2);
        __pyx_t_2 = 0;
+11516:             except:
      /*except:*/ {
        __Pyx_AddTraceback("questdb._client.Sender.establish", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_6) < 0) __PYX_ERR(0, 11516, __pyx_L8_except_error)
        __Pyx_XGOTREF(__pyx_t_2);
        __Pyx_XGOTREF(__pyx_t_4);
        __Pyx_XGOTREF(__pyx_t_6);
+11517:                 failed_impl = self._impl
        __pyx_t_11 = __pyx_v_self->_impl;

        __pyx_v_failed_impl = __pyx_t_11;
+11518:                 self._impl = NULL
        __pyx_v_self->_impl = NULL;
+11519:                 _ensure_doesnt_have_gil(&gs)
        (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+11520:                 line_sender_close(failed_impl)
        line_sender_close(__pyx_v_failed_impl);
+11521:                 _ensure_has_gil(&gs)
        __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+11522:                 raise
        __Pyx_GIVEREF(__pyx_t_2);
        __Pyx_GIVEREF(__pyx_t_4);
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_4, __pyx_t_6);
        __pyx_t_2 = 0;  __pyx_t_4 = 0;  __pyx_t_6 = 0; 
        __PYX_ERR(0, 11522, __pyx_L8_except_error)
      }
 11523: 
+11524:         line_sender_opts_free(self._opts)
  line_sender_opts_free(__pyx_v_self->_opts);
+11525:         self._opts = NULL
  __pyx_v_self->_opts = NULL;
 11526: 
+11527:         if self._dispatch_context is not None:
  __pyx_t_1 = (__pyx_v_self->_dispatch_context != Py_None);
  if (__pyx_t_1) {
/* … */
  }
+11528:             self._cb_refs_key = _retain_callback_refs(
    __pyx_t_7 = __pyx_f_7questdb_7_client__retain_callback_refs(((PyObject *)__pyx_v_self), __pyx_t_6); if (unlikely(__pyx_t_7 == ((size_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 11528, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_v_self->_cb_refs_key = __pyx_t_7;
+11529:                 self, self._dispatch_context)
    __pyx_t_6 = __pyx_v_self->_dispatch_context;
    __Pyx_INCREF(__pyx_t_6);
 11530: 
 11531:         # Request callbacks when rows are complete.
+11532:         self._buffer._row_complete_sender = PyWeakref_NewRef(self, None)
  __pyx_t_6 = PyWeakref_NewRef(((PyObject *)__pyx_v_self), Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11532, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_6);
  __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_6;
  __pyx_t_6 = 0;
+11533:         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);
 11534: 
 11535:         # Track and warn about overly quick reconnections to the server.
+11536:         cdef bint warn = False
  __pyx_v_warn = 0;
+11537:         if WARN_HIGH_RECONNECTS:
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_WARN_HIGH_RECONNECTS); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11537, __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, 11537, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (__pyx_t_1) {
/* … */
  }
+11538:             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)));
+11539:             if warn:
    if (__pyx_v_warn) {
/* … */
    }
+11540:                 warnings.warn(
      __pyx_t_4 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_warnings); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11540, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_warn); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11540, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 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[4] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_questdb_Sender_Detected_a_burst, ((PyObject *)(((PyTypeObject*)PyExc_UserWarning))), __pyx_mstate_global->__pyx_int_1};
        #if CYTHON_VECTORCALL
        __pyx_t_2 = __pyx_mstate_global->__pyx_tuple[20];
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11540, __pyx_L1_error)
        __Pyx_INCREF(__pyx_t_2);
        #else
        {
          PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_stacklevel};
          __pyx_t_2 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+3, 1);
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11540, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        #endif
        __pyx_t_6 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__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;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11540, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
      }
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 11541:                     "questdb.Sender: "
 11542:                     f"Detected a burst of reconnections. "
 11543:                     "This may indicate an inefficient coding pattern where the sender is "
 11544:                     "frequently created and destroyed. "
 11545:                     "Consider reusing sender instance whenever possible."
 11546:                     "See: https://py-questdb-client.readthedocs.io/en/latest/sender.html#reuse-sender-objects",
 11547:                     UserWarning,
 11548:                     stacklevel=1
 11549:                 )
 11550: 
+11551:     def __enter__(self) -> Sender:
/* Python wrapper */
static struct __pyx_obj_7questdb_7_client_Sender *__pyx_pw_7questdb_7_client_6Sender_13__enter__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_12__enter__, "Call :func:`Sender.establish` at the start of a ``with`` block.");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_13__enter__ = {"__enter__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_13__enter__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_12__enter__};
static struct __pyx_obj_7questdb_7_client_Sender *__pyx_pw_7questdb_7_client_6Sender_13__enter__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_12__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_12__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_19 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11551, __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_Sender) < (0)) __PYX_ERR(0, 11551, __pyx_L1_error)
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_13__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[139])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 11551, __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_19);
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 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, 11551, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 11552:         """Call :func:`Sender.establish` at the start of a ``with`` block."""
+11553:         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, 11553, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+11554:         return self
  {
    struct __pyx_obj_7questdb_7_client_Sender *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF((PyObject *)__pyx_v_self);
      __pyx_r = __pyx_v_self;
    }
    __Pyx_XDECREF((PyObject *)__pyx_temp);
  }
  goto __pyx_L0;
 11555: 
+11556:     def __bytes__(self) -> bytes:
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_15__bytes__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_14__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\047\047`` 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_15__bytes__ = {"__bytes__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_15__bytes__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_14__bytes__};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_15__bytes__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_14__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_14__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, 11556, __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, 11556, __pyx_L1_error)
  __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_15__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[140])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11556, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_19, __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_19) < (0)) __PYX_ERR(0, 11556, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 11557:         """
 11558:         Inspect the contents of the internal buffer.
 11559: 
 11560:         The ``bytes`` value returned represents the unsent data.
 11561: 
 11562:         For QWP/UDP senders this always returns ``b''`` because encoding
 11563:         is deferred to flush. Use :func:`Sender.__len__` instead for a
 11564:         size estimate.
 11565: 
 11566:         Read from inside a part-written row this returns the buffer as
 11567:         it stands, with the last line unterminated; see
 11568:         :func:`Buffer.__bytes__` for why that is allowed where every
 11569:         call that acts on the buffer is refused.
 11570: 
 11571:         Also see :func:`Sender.__len__`.
 11572:         """
+11573:         if self._buffer is None:
  __pyx_t_1 = (((PyObject *)__pyx_v_self->_buffer) == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+11574:             return b''
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_b__6);
        __pyx_r = __pyx_mstate_global->__pyx_kp_b__6;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
 11575:         else:
+11576:             return bytes(self._buffer)
  /*else*/ {
    __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, 11576, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = ((PyObject*)__pyx_t_2);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }
 11577: 
+11578:     def __len__(self) -> int:
/* Python wrapper */
static Py_ssize_t __pyx_pw_7questdb_7_client_6Sender_17__len__(PyObject *__pyx_v_self); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_16__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_16__len__;
#endif
static Py_ssize_t __pyx_pw_7questdb_7_client_6Sender_17__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_16__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_16__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;
}
 11579:         """
 11580:         Number of bytes of unsent data in the internal buffer.
 11581: 
 11582:         Equivalent (but cheaper) to ``len(bytes(sender))`` over ILP.
 11583: 
 11584:         For QWP/UDP senders this returns an estimated size hint, not the
 11585:         exact serialized byte count. For QWP/WebSocket senders it is an
 11586:         estimate that is never below the size of the frame a flush
 11587:         encodes, unless store-and-forward has fallen back to sending full
 11588:         symbol dictionaries.
 11589:         """
+11590:         if self._buffer is None:
  __pyx_t_1 = (((PyObject *)__pyx_v_self->_buffer) == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+11591:             return 0
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
 11592:         else:
+11593:             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, 11593, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    {
      __pyx_r = __pyx_t_3;
    }
    goto __pyx_L0;
  }
 11594: 
+11595:     def transaction(self, table_name: str):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_19transaction(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_18transaction, "\n        Start a :ref:`sender_transaction` block.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_19transaction = {"transaction", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_19transaction, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_18transaction};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_19transaction(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 11595, __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, 11595, __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, 11595, __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, 11595, __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, 11595, __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, 11595, __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, 11595, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_18transaction(((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_18transaction(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_19 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11595, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_table_name, __pyx_mstate_global->__pyx_n_u_str_2) < (0)) __PYX_ERR(0, 11595, __pyx_L1_error)
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_19transaction, __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[141])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 11595, __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_19);
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 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, 11595, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 11596:         """
 11597:         Start a :ref:`sender_transaction` block.
 11598:         """
 11599:         # The guard that protects a row in progress sits on
 11600:         # `SenderTransaction.__enter__` and `rollback()`, where the
 11601:         # transaction acts on the buffer: a transaction made earlier, or
 11602:         # constructed directly, reaches those without passing through
 11603:         # here. Refusing here as well names the call the caller made.
+11604:         if self._buffer is not None:
  __pyx_t_1 = (((PyObject *)__pyx_v_self->_buffer) != Py_None);
  if (__pyx_t_1) {
/* … */
  }
+11605:             self._buffer._check_not_in_row('transaction')
    __pyx_t_2 = __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_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11605, __pyx_L1_error)

+11606:         return SenderTransaction(self, table_name)
  __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, 11606, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_3);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = ((PyObject *)__pyx_t_3);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_3 = 0;
  goto __pyx_L0;
 11607: 
+11608:     def row(self,
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_21row(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_20row, "\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\047s records through this sender. Such a ``dataframe()``\n        writes the frame into this sender\047s 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`` with auto-flush on, it also raises\n        ``InvalidApiCall``, without adding the row, when called from this\n        sender\047s own ``error_handler`` or ``connection_listener``. That\n        includes a logging handler that writes the ``questdb`` logger\047s\n        records through this sender while no ``error_handler`` is set, since\n        server rejections are then logged from inside that callback.\n\n        Over ``ws`` and ``wss``, auto-flush also publishes a buffer whose size\n        estimate reaches the connection\047s 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_21row = {"row", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_21row, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_20row};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_21row(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 11608, __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, 11608, __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, 11608, __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_20row(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, 11608, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
/* … */
  __pyx_t_19 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11608, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_table_name, __pyx_mstate_global->__pyx_n_u_str_2) < (0)) __PYX_ERR(0, 11608, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_Optional_str) < (0)) __PYX_ERR(0, 11608, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_columns, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_Union_None_boo_2) < (0)) __PYX_ERR(0, 11608, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_TimestampNanos_datetime_da) < (0)) __PYX_ERR(0, 11608, __pyx_L1_error)
  __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_21row, __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[142])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 11608, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20);
  #endif
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_20, __pyx_t_17);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_20, __pyx_t_19);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_row_2, __pyx_t_20) < (0)) __PYX_ERR(0, 11608, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 11609:             table_name: str,
 11610:             *,
+11611:             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, 11608, __pyx_L1_error)
 11612:             columns: Optional[Dict[
 11613:                 str,
 11614:                 Union[None, bool, int, float, str, TimestampMicros,
 11615:                       TimestampNanos, datetime.datetime, numpy.ndarray,
 11616:                       Decimal, uuid.UUID, ipaddress.IPv4Address, bytes,
 11617:                       bytearray, memoryview, Char, DateMillis, Long256,
+11618:                       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, 11608, __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, 11608, __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, 11608, __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, 11608, __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, 11609, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_symbols), (&PyDict_Type), 1, "symbols", 2))) __PYX_ERR(0, 11611, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_columns), (&PyDict_Type), 1, "columns", 2))) __PYX_ERR(0, 11612, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_20row(((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, 11608, __pyx_L1_error)
 11619:             at: Union[TimestampNanos, datetime.datetime, ServerTimestampType]):
 11620:         """
 11621:         Write a row to the internal buffer.
 11622: 
 11623:         This may be sent automatically depending on the ``auto_flush`` setting
 11624:         in the constructor.
 11625: 
 11626:         See :func:`Buffer.row <questdb.ingress.Buffer.row>` for supported
 11627:         column types, protocol restrictions, server requirements, and
 11628:         ``NULL``-sentinel behavior.
 11629: 
 11630:         Raises :class:`QuestDBError <questdb.QuestDBError>`
 11631:         (``InvalidApiCall``) if called while another ``row()`` on this
 11632:         sender is still in progress, or a ``dataframe()`` over ``tcp``,
 11633:         ``http`` or ``udp``: from a column value whose conversion runs
 11634:         Python code, or from a logging handler that writes the ``questdb``
 11635:         logger's records through this sender. Such a ``dataframe()``
 11636:         writes the frame into this sender's buffer, and a row written while
 11637:         it runs could not be flushed until it returned. Over ``ws`` and
 11638:         ``wss`` the frame goes out on a connection of its own, so a row
 11639:         written from inside it is accepted and flushed as usual.
 11640: 
 11641:         Over ``ws`` and ``wss`` with auto-flush on, it also raises
 11642:         ``InvalidApiCall``, without adding the row, when called from this
 11643:         sender's own ``error_handler`` or ``connection_listener``. That
 11644:         includes a logging handler that writes the ``questdb`` logger's
 11645:         records through this sender while no ``error_handler`` is set, since
 11646:         server rejections are then logged from inside that callback.
 11647: 
 11648:         Over ``ws`` and ``wss``, auto-flush also publishes a buffer whose size
 11649:         estimate reaches the connection's frame cap, even with
 11650:         ``auto_flush_bytes=off``. Every published frame fits the frame cap:
 11651:         when the whole buffer does not, or its size estimate is past the
 11652:         cap, the rows buffered before this one go out as a frame of their
 11653:         own and this row starts the next batch, so one call publishes at
 11654:         most two frames. Re-adding the row converts its values a second
 11655:         time.
 11656: 
 11657:         Over ``ws`` and ``wss``, whatever this method raises, the row was not
 11658:         added. :class:`QuestDBError <questdb.QuestDBError>`
 11659:         (``BatchTooLarge``) means either it does not fit in a frame on its
 11660:         own, or the rows buffered before it do not fit even without it,
 11661:         which can happen after the frame cap shrinks, for example on
 11662:         reconnect; those rows are then discarded, and the error says how
 11663:         many. Any other error raised by a publish also clears the rows
 11664:         buffered before it, as :func:`Sender.flush` does.
 11665:         """
+11666:         if self._in_txn:
  if (unlikely(__pyx_v_self->_in_txn)) {
/* … */
  }
+11667:             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, 11667, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
+11668:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11668, __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, 11668, __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, 11667, __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, 11667, __pyx_L1_error)
 11669:                 'Cannot append rows explicitly inside a transaction')
+11670:         if at is None:
  __pyx_t_7 = (__pyx_v_at == Py_None);
  if (unlikely(__pyx_t_7)) {
/* … */
  }
+11671:             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, 11671, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+11672:                 QuestDBErrorCode.InvalidTimestamp,
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11672, __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, 11672, __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, 11671, __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, 11671, __pyx_L1_error)
 11673:                 "`at` must be of type TimestampNanos, datetime, or ServerTimestamp"
 11674:             )
+11675:         if self._buffer is None:
  __pyx_t_7 = (((PyObject *)__pyx_v_self->_buffer) == Py_None);
  if (unlikely(__pyx_t_7)) {
/* … */
  }
+11676:             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, 11676, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+11677:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11677, __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, 11677, __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, 11676, __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, 11676, __pyx_L1_error)
 11678:                 "row() can\'t be called: Sender is closed."
 11679:             )
 11680:         # A row-serializing `dataframe()` holds this buffer from the
 11681:         # moment it starts and runs caller Python before its first row:
 11682:         # the `questdb` logger, an object column's sniff. A row written
 11683:         # there has an auto-flush that cannot run until that call
 11684:         # returns, so the row is refused before anything is written.
+11685:         self._buffer._check_not_in_row(
  __pyx_t_9.__pyx_n = 1;
  __pyx_t_9.hint = __pyx_mstate_global->__pyx_kp_u_A_logging_handler_that_writes_th;
  __pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self->_buffer, __pyx_mstate_global->__pyx_n_u_row_2, &__pyx_t_9); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11685, __pyx_L1_error)

 11686:             'row',
 11687:             "A logging handler that writes the `questdb` logger's records "
 11688:             "through this same sender arrives here too; give it a Sender "
 11689:             "of its own.")
+11690:         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, 11690, __pyx_L1_error)
  if (__pyx_t_7) {
/* … */
    goto __pyx_L6;
  }
+11691:             if self._auto_flush_mode.enabled:
    if (__pyx_v_self->_auto_flush_mode.enabled) {
/* … */
    }
 11692:                 # Auto-flush reads the frame cap from the native sender on
 11693:                 # every row, so a call from this sender's own callback is
 11694:                 # refused before the row is added.
+11695:                 self._check_not_in_own_callback('row')
      __pyx_t_8 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__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, 11695, __pyx_L1_error)

+11696:             _qwp_row_append(
    __pyx_t_8 = __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, ((PyObject*)__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, 11696, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

+11697:                 self, None, self._buffer, table_name, symbols, columns, at)
    __pyx_t_1 = ((PyObject *)__pyx_v_self->_buffer);
    __Pyx_INCREF(__pyx_t_1);
 11698:         else:
+11699:             self._buffer.row(
  /*else*/ {
    __pyx_t_4 = ((PyObject *)__pyx_v_self->_buffer);
    __Pyx_INCREF(__pyx_t_4);
/* … */
  {
    PyObject* __pyx_temp[3] = {__pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_n_u_columns, __pyx_mstate_global->__pyx_n_u_at};
    __pyx_mstate_global->__pyx_tuple[37] = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_mstate_global->__pyx_tuple[37])) __PYX_ERR(0, 11699, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[37]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[37]);
+11700:                 table_name, symbols=symbols, columns=columns, at=at)
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[5] = {__pyx_t_4, __pyx_v_table_name, __pyx_v_symbols, __pyx_v_columns, __pyx_v_at};
      #if CYTHON_VECTORCALL
      __pyx_t_2 = __pyx_mstate_global->__pyx_tuple[37];
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11699, __pyx_L1_error)
      __Pyx_INCREF(__pyx_t_2);
      #else
      {
        PyObject *__pyx_temp[3] = {__pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_n_u_columns, __pyx_mstate_global->__pyx_n_u_at};
        __pyx_t_2 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 3);
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11699, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      #endif
      __pyx_t_1 = __Pyx_Object_VectorcallMethodKwds((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, 11699, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __pyx_L6:;
+11701:         return self
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF((PyObject *)__pyx_v_self);
      __pyx_r = ((PyObject *)__pyx_v_self);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 11702: 
+11703:     def dataframe(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_23dataframe(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_22dataframe, "\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\047s configuration for the call (the same direct path as\n        :meth:`QuestDB.dataframe`, carrying the sender\047s 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                \047car\047: pd.Categorical([\047Nic 42\047, \047Eddi\047, \047Nic 42\047, \047Eddi\047]),\n                \047position\047: [1, 2, 1, 2],\n                \047speed\047: [89.3, 98.2, 3, 4],\n                \047lat_gforce\047: [0.1, -0.2, -0.6, 0.4],\n                \047accelleration\047: [0.1, -0.2, 0.6, 4.4],\n                \047tyre_pressure\047: [2.6, 2.5, 2.6, 2.5],\n                \047ts\047: [\n                    pd.Timestamp(\0472022-08-09 13:56:00\047),\n                    pd.Timestamp(\0472022-08-09 13:56:01\047),\n                    pd.Timestamp(\0472022-08-09 13:56:02\047),\n        ""            pd.Timestamp(\0472022-08-09 13:56:03\047)]})\n\n            with qi.Sender.from_env() as sender:\n                sender.dataframe(df, table_name=\047race_metrics\047, at=\047ts\047)\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[\047questdb\047]``. 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``\047s ``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_23dataframe = {"dataframe", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_23dataframe, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_22dataframe};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_23dataframe(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 11703, __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, 11703, __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, 11703, __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_22dataframe(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;
  PyThreadState *__pyx_v_gs;
  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_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_20 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 11703, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
/* … */
  __pyx_t_19 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11703, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_table_name, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 11703, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_table_name_col, __pyx_mstate_global->__pyx_kp_u_Union_None_int_str) < (0)) __PYX_ERR(0, 11703, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Union_str_bool_List_int_List_str) < (0)) __PYX_ERR(0, 11703, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_ServerTimestampType_int_st) < (0)) __PYX_ERR(0, 11703, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_max_rows_per_batch, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 11703, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_schema_overrides_2, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_object) < (0)) __PYX_ERR(0, 11703, __pyx_L1_error)
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_23dataframe, __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[143])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 11703, __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_20);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_17, __pyx_t_19);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 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, 11703, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 11704:             self,
 11705:             df,  # : pd.DataFrame
 11706:             *,
+11707:             table_name: Optional[str] = None,
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_table_name, Py_None) < (0)) __PYX_ERR(0, 11703, __pyx_L1_error)
+11708:             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__39);
/* … */
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_table_name_col, Py_None) < (0)) __PYX_ERR(0, 11703, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_n_u_auto) < (0)) __PYX_ERR(0, 11703, __pyx_L1_error)
 11709:             symbols: Union[str, bool, List[int], List[str]] = 'auto',
 11710:             at: Union[ServerTimestampType, int, str, TimestampNanos, datetime.datetime],
+11711:             max_rows_per_batch: int = DEFAULT_MAX_CHUNK_ROWS,
  __Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_DEFAULT_MAX_CHUNK_ROWS); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 11711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_20, NULL, 1) < (0)) __PYX_ERR(0, 11711, __pyx_L1_error)
  __pyx_mstate_global->__pyx_k__39 = ((PyObject*)__pyx_t_20);
  __Pyx_GIVEREF(__pyx_t_20);
  __pyx_t_20 = 0;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_DEFAULT_MAX_CHUNK_ROWS); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_19, NULL, 1) < (0)) __PYX_ERR(0, 11711, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_max_rows_per_batch, __pyx_t_19) < (0)) __PYX_ERR(0, 11703, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+11712:             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, 11703, __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, 11703, __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, 11703, __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, 11711, __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, 11703, __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, 11707, __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, 11711, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema_overrides), (&PyDict_Type), 1, "schema_overrides", 2))) __PYX_ERR(0, 11712, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_22dataframe(((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_20, __pyx_mstate_global->__pyx_n_u_schema_overrides_2, Py_None) < (0)) __PYX_ERR(0, 11703, __pyx_L1_error)
 11713:         """
 11714:         Write a Pandas DataFrame to QuestDB.
 11715: 
 11716:         Over ILP/HTTP and ILP/TCP the frame is serialized into the internal
 11717:         row buffer; over QWP/UDP into fire-and-forget datagrams, with the
 11718:         same delivery caveats as ``row()``. Over QWP/WebSocket the frame is
 11719:         bulk-loaded through a poolless direct columnar connection opened from
 11720:         this sender's configuration for the call (the same direct path as
 11721:         :meth:`QuestDB.dataframe`, carrying the sender's auth/TLS regardless
 11722:         of how it was constructed); ``max_rows_per_batch`` applies only on
 11723:         that path, and passing ``schema_overrides`` on any other protocol
 11724:         raises. The direct load has no
 11725:         ordering relationship with rows buffered via :meth:`row` and does not
 11726:         flush them.
 11727: 
 11728:         ``table_name_col`` follows the same split. The row-serializing
 11729:         protocols accept it, because they can change table between rows.
 11730:         QWP/WebSocket writes one table per call and rejects it with
 11731:         :class:`UnsupportedDataFrameShapeError
 11732:         <questdb.UnsupportedDataFrameShapeError>`; split the frame and make
 11733:         one call per table, or send those rows with :meth:`row`.
 11734: 
 11735:         Example:
 11736: 
 11737:         .. code-block:: python
 11738: 
 11739:             import pandas as pd
 11740:             import questdb as qi
 11741: 
 11742:             df = pd.DataFrame({
 11743:                 'car': pd.Categorical(['Nic 42', 'Eddi', 'Nic 42', 'Eddi']),
 11744:                 'position': [1, 2, 1, 2],
 11745:                 'speed': [89.3, 98.2, 3, 4],
 11746:                 'lat_gforce': [0.1, -0.2, -0.6, 0.4],
 11747:                 'accelleration': [0.1, -0.2, 0.6, 4.4],
 11748:                 'tyre_pressure': [2.6, 2.5, 2.6, 2.5],
 11749:                 'ts': [
 11750:                     pd.Timestamp('2022-08-09 13:56:00'),
 11751:                     pd.Timestamp('2022-08-09 13:56:01'),
 11752:                     pd.Timestamp('2022-08-09 13:56:02'),
 11753:                     pd.Timestamp('2022-08-09 13:56:03')]})
 11754: 
 11755:             with qi.Sender.from_env() as sender:
 11756:                 sender.dataframe(df, table_name='race_metrics', at='ts')
 11757: 
 11758:         Over QWP/WebSocket, supported column types and arguments mirror
 11759:         :meth:`QuestDB.dataframe <questdb.QuestDB.dataframe>`, including
 11760:         UUID, IPV4, BINARY, GEOHASH, LONG256, CHAR, DATE,
 11761:         ``schema_overrides`` and round-trip claims in
 11762:         ``df.attrs['questdb']``. Over ILP and QWP/UDP, see
 11763:         :func:`Buffer.dataframe <questdb.ingress.Buffer.dataframe>` for the
 11764:         row-serializing mappings; ``max_rows_per_batch`` and
 11765:         ``schema_overrides`` do not apply on those protocols.
 11766: 
 11767:         Additionally, this method also supports auto-flushing the buffer
 11768:         as specified in the ``Sender``'s ``auto_flush`` constructor argument.
 11769:         Auto-flushing is implemented incrementally, meanting that when
 11770:         calling ``sender.dataframe(df)`` with a large ``df``, the sender may
 11771:         have sent some of the rows to the server already whist the rest of the
 11772:         rows are going to be sent at the next auto-flush or next explicit call
 11773:         to :func:`Sender.flush`.
 11774: 
 11775:         In case of data errors with auto-flushing enabled, some of the rows
 11776:         may have been transmitted to the server already.
 11777:         """
+11778:         cdef auto_flush_t af = auto_flush_blank()
  __pyx_v_af = __pyx_f_7questdb_7_client_auto_flush_blank();
 11779:         cdef direct_conn_source_t src
+11780:         cdef qdb_pystr_buf* ws_b = NULL
  __pyx_v_ws_b = NULL;
 11781:         cdef dataframe_plan_t ws_plan
+11782:         cdef line_sender_opts* ws_opts = NULL
  __pyx_v_ws_opts = NULL;
+11783:         cdef object ws_dispatch_context = None
  __Pyx_INCREF(Py_None);
  __pyx_v_ws_dispatch_context = Py_None;
+11784:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
 11785:         # The QWP/WebSocket branch below goes straight to its own
 11786:         # connection and never reaches `_dataframe`, where the same
 11787:         # check stands for every other route. Without it here, a frame
 11788:         # re-entered from a half-written row publishes ahead of the row
 11789:         # it interrupted and the order of the two silently inverts.
+11790:         if self._buffer is not None:
  __pyx_t_1 = (((PyObject *)__pyx_v_self->_buffer) != Py_None);
  if (__pyx_t_1) {
/* … */
  }
+11791:             self._buffer._check_not_in_row('dataframe')
    __pyx_t_2 = __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_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11791, __pyx_L1_error)

+11792:         if _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, 11792, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+11793:             if self._qwp_ws_opts == NULL:
    __pyx_t_1 = (__pyx_v_self->_qwp_ws_opts == NULL);

    if (unlikely(__pyx_t_1)) {
/* … */
    }
+11794:                 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, 11794, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
+11795:                     QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11795, __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, 11795, __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, 11794, __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, 11794, __pyx_L1_error)
 11796:                     "dataframe() can't be called: Sender is closed.")
 11797:             # The cloned opts below contain a borrowed pointer to this
 11798:             # context. Caller Python run while planning may close the Sender,
 11799:             # so keep the clone's callback target rooted in this frame until
 11800:             # the direct connection and its dispatchers have been torn down.
+11801:             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;
+11802:             src.db = NULL
    __pyx_v_src.db = NULL;
 11803:             # The call owns its options for its whole length. The plan
 11804:             # build below runs caller Python -- reading `attrs`,
 11805:             # sniffing object cells, pulling an Arrow stream -- and any
 11806:             # of that can call `close()`, which frees the sender's own
 11807:             # options struct while `_direct_conn_open` has still to
 11808:             # read it. Owning a clone is what makes that harmless,
 11809:             # rather than a guard that has to name every route a close
 11810:             # can arrive through, and it leaves the row buffer's own
 11811:             # bookkeeping to mean only what it says.
+11812:             ws_opts = line_sender_opts_clone(self._qwp_ws_opts)
    __pyx_v_ws_opts = line_sender_opts_clone(__pyx_v_self->_qwp_ws_opts);
+11813:             if ws_opts == NULL:
    __pyx_t_1 = (__pyx_v_ws_opts == NULL);

    if (unlikely(__pyx_t_1)) {
/* … */
    }
+11814:                 raise MemoryError()
      PyErr_NoMemory(); __PYX_ERR(0, 11814, __pyx_L1_error)
+11815:             src.opts = ws_opts
    __pyx_v_src.opts = __pyx_v_ws_opts;
+11816:             ws_b = qdb_pystr_buf_new()
    __pyx_v_ws_b = qdb_pystr_buf_new();
+11817:             ws_plan = dataframe_plan_blank()
    __pyx_v_ws_plan = __pyx_f_7questdb_7_client_dataframe_plan_blank();
+11818:             try:
    /*try:*/ {
+11819:                 _direct_dataframe_run(
      __pyx_t_2 = __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); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11819, __pyx_L8_error)


 11820:                     &src,
 11821:                     0.0,
 11822:                     ws_b,
 11823:                     &ws_plan,
 11824:                     df,
 11825:                     table_name,
 11826:                     table_name_col,
 11827:                     symbols,
 11828:                     at,
+11829:                     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, 11829, __pyx_L8_error)
 11830:                     schema_overrides)
+11831:                 return self
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __Pyx_INCREF((PyObject *)__pyx_v_self);
          __pyx_r = ((PyObject *)__pyx_v_self);
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      goto __pyx_L7_return;
    }
 11832:             finally:
+11833:                 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);
+11834:                 if ws_opts != NULL:
          __pyx_t_1 = (__pyx_v_ws_opts != NULL);

          if (__pyx_t_1) {
/* … */
          }
        }
        __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_L7_return: {
        __pyx_t_17 = __pyx_r;
        __pyx_r = 0;
/* … */
        __pyx_t_1 = (__pyx_v_ws_opts != NULL);

        if (__pyx_t_1) {
/* … */
        }
        __pyx_r = __pyx_t_17;
        __pyx_t_17 = 0;
        goto __pyx_L0;
      }
    }
 11835:                     # The clone shares the sender's callback dispatcher
 11836:                     # threads. After a `close()` during this call it is
 11837:                     # their last owner, and freeing it joins them; a
 11838:                     # callback still running needs the GIL to finish, so
 11839:                     # the free runs without it, as in `Sender._close()`.
+11840:                     _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)));
+11841:                     line_sender_opts_free(ws_opts)
            line_sender_opts_free(__pyx_v_ws_opts);
/* … */
          line_sender_opts_free(__pyx_v_ws_opts);
+11842:                     _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));
+11843:         if schema_overrides is not None:
  __pyx_t_1 = (__pyx_v_schema_overrides != ((PyObject*)Py_None));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+11844:             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, 11844, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
+11845:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11845, __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, 11845, __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, 11844, __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, 11844, __pyx_L1_error)
 11846:                 'schema_overrides is applied when a frame is written a '
 11847:                 'column at a time, which is Sender.dataframe() over '
 11848:                 'ws:: / wss:: and QuestDB.dataframe(). This sender '
 11849:                 'writes a row at a time. Drop the argument, or connect '
 11850:                 'over ws:: / wss::.')
+11851:         if self._in_txn:
  if (unlikely(__pyx_v_self->_in_txn)) {
/* … */
  }
+11852:             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, 11852, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
+11853:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11853, __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, 11853, __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, 11852, __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, 11852, __pyx_L1_error)
 11854:                 'Cannot append rows explicitly inside a transaction')
+11855:         if at is None:
  __pyx_t_1 = (__pyx_v_at == Py_None);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+11856:             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, 11856, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+11857:                 QuestDBErrorCode.InvalidTimestamp,
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11857, __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, 11857, __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, 11856, __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, 11856, __pyx_L1_error)
 11858:                 "`at` must be of type TimestampNanos, datetime, or ServerTimestamp"
 11859:             )
+11860:         if self._auto_flush_mode.enabled:
  if (__pyx_v_self->_auto_flush_mode.enabled) {
/* … */
  }
 11861:             # The field, not its contents: see `auto_flush_t`. `self` is
 11862:             # this call's receiver and outlives the run, so the address
 11863:             # stays good even when a mid-frame `close()` empties it.
+11864:             af.sender_slot = &self._impl
    __pyx_v_af.sender_slot = (&__pyx_v_self->_impl);
+11865:             af.mode = self._auto_flush_mode
    __pyx_t_18 = __pyx_v_self->_auto_flush_mode;

    __pyx_v_af.mode = __pyx_t_18;
+11866:             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;
 11867: 
+11868:         if self._buffer is None:
  __pyx_t_1 = (((PyObject *)__pyx_v_self->_buffer) == Py_None);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+11869:             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, 11869, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+11870:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11870, __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, 11870, __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, 11869, __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, 11869, __pyx_L1_error)
 11871:                 "dataframe() can\'t be called: Sender is closed."
 11872:             )
+11873:         _dataframe(
  __pyx_t_2 = __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_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11873, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

+11874:             self._buffer,
  __pyx_t_3 = ((PyObject *)__pyx_v_self->_buffer);
  __Pyx_INCREF(__pyx_t_3);
 11875:             af,
 11876:             self._buffer._impl,
 11877:             df,
 11878:             table_name,
 11879:             table_name_col,
 11880:             symbols,
 11881:             at)
+11882:         return self
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF((PyObject *)__pyx_v_self);
      __pyx_r = ((PyObject *)__pyx_v_self);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 11883: 
+11884:     cpdef flush(
static PyObject *__pyx_pw_7questdb_7_client_6Sender_25flush(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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 (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #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, 11884, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7questdb_7_client_6Sender_25flush)) {
        __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, 11884, __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, 11884, __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, 11884, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        {
          PyObject *__pyx_temp;
          {
            __pyx_temp = __pyx_r;
            __pyx_r = __pyx_t_2;
          }
          __Pyx_XDECREF(__pyx_temp);
        }
        __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_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_25flush(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_24flush, "\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\047s 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_25flush = {"flush", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_25flush, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_24flush};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_25flush(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 11884, __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, 11884, __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, 11884, __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, 11884, __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, 11884, __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_24flush(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_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, 11884, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __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_25flush, __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[144])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 11884, __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[71]);
  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, 11884, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
/* … */
  {
    PyObject* __pyx_temp[3] = {Py_None, Py_True, Py_False};
    __pyx_mstate_global->__pyx_tuple[71] = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_mstate_global->__pyx_tuple[71])) __PYX_ERR(0, 11884, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[71]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[71]);
/* … */
struct __pyx_opt_args_7questdb_7_client_6Sender_flush {
  int __pyx_n;
  struct __pyx_obj_7questdb_7_client_Buffer *buffer;
  int clear;
  int transactional;
};
 11885:             self,
+11886:             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, 11884, __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, 11884, __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, 11884, __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, 11887, __pyx_L3_error)
    } else {
+11887:             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, 11888, __pyx_L3_error)
    } else {
+11888:             bint transactional=False):
  int __pyx_v_transactional = ((int)0);
  struct line_sender_buffer *__pyx_v_c_buf;
  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, 11884, __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, 11886, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_24flush(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_buffer, __pyx_v_clear, __pyx_v_transactional);
 11889:         """
 11890:         If called with no arguments, immediately flushes the internal buffer.
 11891: 
 11892:         Alternatively you can flush a buffer that was constructed explicitly
 11893:         by passing ``buffer``.
 11894: 
 11895:         The buffer will be cleared by default, unless ``clear`` is set to
 11896:         ``False``.
 11897: 
 11898:         This method does nothing if the provided or internal buffer is empty.
 11899: 
 11900:         :param buffer: The buffer to flush. If ``None``, the internal buffer
 11901:             is flushed.
 11902: 
 11903:         With QWP/WebSocket, this publishes the buffer into the local sender
 11904:         queue and returns before the server necessarily ACKs the frame. Later
 11905:         terminal diagnostics fail subsequent sender calls and are available as
 11906:         :attr:`QuestDBError.sender_error`. Server diagnostics are also
 11907:         available through :func:`Sender.poll_error`.
 11908: 
 11909:         :param clear: If ``True``, the flushed buffer is cleared (default).
 11910:             If ``False``, the flushed buffer is left in the internal buffer.
 11911:             Note that ``clear=False`` is only supported if ``buffer`` is also
 11912:             specified.
 11913: 
 11914:         :param transactional: If ``True`` ensures that the flushed buffer
 11915:             contains row for a single table, ensuring all data can be written
 11916:             transactionally. This feature requires ILP/HTTP and is not available
 11917:             when connecting over TCP. *Default: False.*
 11918: 
 11919:         If the flush fails, the internal buffer is cleared, rows and all; a
 11920:         buffer passed as ``buffer`` is left as it is. Over QWP/WebSocket a
 11921:         buffer is published as one frame, and one whose encoded frame
 11922:         exceeds the connection's frame cap raises
 11923:         :class:`QuestDBError <questdb.QuestDBError>` (``BatchTooLarge``)
 11924:         without publishing anything.
 11925: 
 11926:         The Python GIL is released during the network IO operation.
 11927:         """
+11928:         cdef line_sender_buffer* c_buf = NULL
  __pyx_v_c_buf = NULL;
 11929: 
+11930:         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); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11930, __pyx_L1_error)

 11931: 
+11932:         if self._in_txn:
  if (unlikely(__pyx_v_self->_in_txn)) {
/* … */
  }
+11933:             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, 11933, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+11934:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11934, __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, 11934, __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, 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)
 11935:                 'Cannot flush explicitly inside a transaction')
 11936: 
+11937:         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)) {
/* … */
  }
+11938:             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, 11938, __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, 11938, __pyx_L1_error)
 11939: 
+11940:         if self._impl == NULL:
  __pyx_t_9 = (__pyx_v_self->_impl == NULL);

  if (unlikely(__pyx_t_9)) {
/* … */
  }
+11941:             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, 11941, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+11942:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11942, __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, 11942, __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, 11941, __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, 11941, __pyx_L1_error)
 11943:                 'flush() can\'t be called: Sender is closed.')
+11944:         if buffer is not None:
  __pyx_t_9 = (((PyObject *)__pyx_v_buffer) != Py_None);
  if (__pyx_t_9) {
/* … */
    goto __pyx_L8;
  }
+11945:             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, 11945, __pyx_L1_error)

+11946:             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, 11946, __pyx_L1_error)

+11947:             c_buf = buffer._impl
    __pyx_t_11 = __pyx_v_buffer->_impl;

    __pyx_v_c_buf = __pyx_t_11;
 11948:         else:
+11949:             c_buf = self._buffer._impl
  /*else*/ {
    __pyx_t_11 = __pyx_v_self->_buffer->_impl;

    __pyx_v_c_buf = __pyx_t_11;
  }
  __pyx_L8:;
 11950:         # Refused before the flush is attempted, and before the GIL is
 11951:         # released: a flush of a half-written row cannot succeed, and
 11952:         # the failure path clears the internal buffer, which would take
 11953:         # every finished row already in it with the part-written one.
+11954:         (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, 11954, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

 11955:             'flush')
+11956:         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_L10_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, 11956, __pyx_L1_error)
  __pyx_t_12 = (!__pyx_t_10);



  __pyx_t_9 = __pyx_t_12;

  __pyx_L10_bool_binop_done:;
  if (__pyx_t_9) {
/* … */
  }
+11957:             return
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+11958:         self._flush_c_buf(c_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_c_buf, __pyx_v_clear, __pyx_v_transactional, 0); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11958, __pyx_L1_error)

 11959: 
+11960:     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 line_sender_buffer *__pyx_v_c_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_error *__pyx_v_err;
  PyThreadState *__pyx_v_gs;
  int __pyx_v_ok;
  PyObject *__pyx_v_exc = 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_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._flush_c_buf", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;




  __Pyx_XDECREF(__pyx_v_exc);

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 11961:             self,
 11962:             line_sender_buffer* c_buf,
 11963:             bint clear,
 11964:             bint transactional,
 11965:             bint keep_on_batch_too_large) except -1:
 11966:         """
 11967:         Flush `c_buf`, which the caller has checked against this sender,
 11968:         with the GIL released.
 11969: 
 11970:         A failed flush of the internal buffer clears it. With
 11971:         `keep_on_batch_too_large`, a `BatchTooLarge` refusal leaves it
 11972:         intact instead: that refusal publishes nothing and leaves the sender
 11973:         usable, so the caller can rewind the row it just added and publish
 11974:         the rest.
 11975:         """
+11976:         cdef line_sender* sender = self._impl
  __pyx_t_1 = __pyx_v_self->_impl;

  __pyx_v_sender = __pyx_t_1;
+11977:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+11978:         cdef PyThreadState* gs = NULL  # GIL state. NULL means we have the GIL.
  __pyx_v_gs = NULL;
+11979:         cdef bint ok = False
  __pyx_v_ok = 0;
 11980:         cdef object exc
 11981: 
 11982:         # Every publish of this sender's rows comes through here, including
 11983:         # auto-flush from `row()`, so the re-entry guard lives here too.
+11984:         self._check_not_in_own_callback('flush')
  __pyx_t_2 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11984, __pyx_L1_error)

+11985:         if sender == NULL:
  __pyx_t_3 = (__pyx_v_sender == NULL);

  if (unlikely(__pyx_t_3)) {
/* … */
  }
+11986:             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, 11986, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
+11987:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11987, __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, 11987, __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_flush_can_t_be_called_Sender_is};
      __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, 11986, __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, 11986, __pyx_L1_error)
 11988:                 'flush() can\'t be called: Sender is closed.')
 11989: 
 11990:         # We might be blocking on IO, so temporarily release the GIL.
+11991:         _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+11992:         if transactional:
  if (__pyx_v_transactional) {
/* … */
    goto __pyx_L4;
  }
+11993:             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));
 11994:                     sender,
 11995:                     c_buf,
 11996:                     transactional,
 11997:                     &err)
+11998:             if ok and clear:
    if (__pyx_v_ok) {
    } else {

      __pyx_t_3 = __pyx_v_ok;
      goto __pyx_L6_bool_binop_done;
    }

    __pyx_t_3 = __pyx_v_clear;
    __pyx_L6_bool_binop_done:;
    if (__pyx_t_3) {
/* … */
    }
+11999:                 line_sender_buffer_clear(c_buf)
      line_sender_buffer_clear(__pyx_v_c_buf);
+12000:         elif clear:
  if (__pyx_v_clear) {
/* … */
    goto __pyx_L4;
  }
+12001:             ok = line_sender_flush(sender, c_buf, &err)
    __pyx_v_ok = line_sender_flush(__pyx_v_sender, __pyx_v_c_buf, (&__pyx_v_err));
 12002:         else:
+12003:             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:;
+12004:         _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+12005:         if ok and c_buf == self._buffer._impl:
  if (__pyx_v_ok) {
  } else {

    __pyx_t_3 = __pyx_v_ok;
    goto __pyx_L9_bool_binop_done;
  }
  __pyx_t_10 = (__pyx_v_c_buf == __pyx_v_self->_buffer->_impl);


  __pyx_t_3 = __pyx_t_10;

  __pyx_L9_bool_binop_done:;
  if (__pyx_t_3) {
/* … */
  }
+12006:             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);
+12007:         if not ok:
  __pyx_t_3 = (!__pyx_v_ok);

  if (__pyx_t_3) {
/* … */
  }
+12008:             if _is_tcp_protocol(self._c_protocol):
    __pyx_t_3 = __pyx_f_7questdb_7_client__is_tcp_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_3 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12008, __pyx_L1_error)
    if (__pyx_t_3) {
/* … */
      goto __pyx_L12;
    }
 12009:                 # Provide further context pointing to the logs.
+12010:                 exc = c_err_to_py_fmt(err, _FLUSH_FMT)
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_FLUSH_FMT); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12010, __pyx_L1_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, 12010, __pyx_L1_error)
      __pyx_t_6 = __pyx_f_7questdb_7_client_c_err_to_py_fmt(__pyx_v_err, ((PyObject*)__pyx_t_4)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12010, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_v_exc = __pyx_t_6;
      __pyx_t_6 = 0;
 12011:             else:
+12012:                 exc = c_err_to_py(err)
    /*else*/ {
      __pyx_t_6 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12012, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_v_exc = __pyx_t_6;
      __pyx_t_6 = 0;
    }
    __pyx_L12:;
+12013:             if c_buf == self._buffer._impl and not (
    __pyx_t_10 = (__pyx_v_c_buf == __pyx_v_self->_buffer->_impl);

    if (__pyx_t_10) {

    } else {

      __pyx_t_3 = __pyx_t_10;

      goto __pyx_L14_bool_binop_done;
    }
/* … */
    __pyx_t_11 = (!__pyx_t_10);



    __pyx_t_3 = __pyx_t_11;

    __pyx_L14_bool_binop_done:;
    if (__pyx_t_3) {
/* … */
    }
+12014:                     keep_on_batch_too_large and
    if (__pyx_v_keep_on_batch_too_large) {
    } else {

      __pyx_t_10 = __pyx_v_keep_on_batch_too_large;
      goto __pyx_L16_bool_binop_done;
    }
+12015:                     exc.code == QuestDBErrorCode.BatchTooLarge):
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12015, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12015, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_BatchTooLarge); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12015, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_11 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_6, __pyx_t_8, Py_EQ); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 12015, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

    __pyx_t_10 = __pyx_t_11;

    __pyx_L16_bool_binop_done:;
 12016:                 # Prevent a follow-up call to `.close(flush=True)` (as is
 12017:                 # usually called from `__exit__`) to raise after the sender
 12018:                 # entered an error state following a failed call to `.flush()`.
 12019:                 # Note: In this case `clear` is always `True`.
+12020:                 line_sender_buffer_clear(c_buf)
      line_sender_buffer_clear(__pyx_v_c_buf);
+12021:             raise exc
    __Pyx_Raise(__pyx_v_exc, 0, 0, 0);
    __PYX_ERR(0, 12021, __pyx_L1_error)
 12022: 
+12023:     cdef inline void_int _check_not_in_own_callback(self, str method) except -1:
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) {
  __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_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __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;
}
 12024:         # Native QWP/WebSocket callback dispatch keeps this sender borrowed.
 12025:         # Reentering the exact owner from either of its callbacks would alias
 12026:         # or free the live sender and abort the process. A callback function
 12027:         # shared with another sender does not carry this owner's token.
+12028:         if _dispatching_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__dispatching_for(__pyx_t_1);

  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+12029:             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, 12029, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+12030:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12030, __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, 12030, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+12031:                 f'{method}() cannot be called from within this sender\'s own '
    __pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12031, __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_cannot_be_called_from_within_th); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12031, __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_1 = __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_1)) __PYX_ERR(0, 12029, __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, 12029, __pyx_L1_error)
 12032:                 'error_handler or connection_listener callback.')
 12033: 
+12034:     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;
}
+12035:         if self._impl == NULL:
  __pyx_t_1 = (__pyx_v_self->_impl == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+12036:             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, 12036, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+12037:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12037, __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, 12037, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+12038:                 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, 12038, __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, 12038, __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, 12036, __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, 12036, __pyx_L1_error)
+12039:         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, 12039, __pyx_L1_error)
  __pyx_t_9 = (!__pyx_t_1);


  if (unlikely(__pyx_t_9)) {
/* … */
  }
+12040:             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, 12040, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
+12041:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12041, __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, 12041, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+12042:                 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, 12042, __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, 12042, __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, 12040, __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, 12040, __pyx_L1_error)
+12043:         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); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12043, __pyx_L1_error)

 12044: 
+12045:     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;
}
 12046:         cdef bint need_qwp = (
+12047:             _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, 12047, __pyx_L1_error)
  if (!__pyx_t_2) {

  } else {

    __pyx_t_1 = __pyx_t_2;

    goto __pyx_L3_bool_binop_done;
  }
+12048:             _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, 12048, __pyx_L1_error)

  __pyx_t_1 = __pyx_t_2;

  __pyx_L3_bool_binop_done:;
  __pyx_v_need_qwp = __pyx_t_1;
+12049:         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)) {
/* … */
  }
+12050:             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, 12050, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+12051:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12051, __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, 12051, __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, 12050, __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, 12050, __pyx_L1_error)
 12052:                 'QWP sender requires a QWP buffer. Use Sender.new_buffer() '
 12053:                 'to build a matching buffer.')
+12054:         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)) {
/* … */
  }
+12055:             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, 12055, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
+12056:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12056, __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, 12056, __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, 12055, __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, 12055, __pyx_L1_error)
 12057:                 'ILP sender requires an ILP buffer. Use Sender.new_buffer() '
 12058:                 'to build a matching buffer.')
 12059: 
+12060:     def flush_and_get_fsn(self, Buffer buffer=None):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_27flush_and_get_fsn(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_26flush_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_27flush_and_get_fsn = {"flush_and_get_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_27flush_and_get_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_26flush_and_get_fsn};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_27flush_and_get_fsn(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 12060, __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, 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, "flush_and_get_fsn", 0) < (0)) __PYX_ERR(0, 12060, __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, 12060, __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, 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.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, 12060, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_26flush_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_26flush_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;
  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.Sender.flush_and_get_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_27flush_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[145])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12060, __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[49]);
  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, 12060, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 12061:         """
 12062:         Publish a QWP/WebSocket buffer locally, clear it on success, and return
 12063:         the assigned frame sequence number.
 12064:         """
+12065:         cdef line_sender* sender = self._impl
  __pyx_t_1 = __pyx_v_self->_impl;

  __pyx_v_sender = __pyx_t_1;
+12066:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+12067:         cdef line_sender_buffer* c_buf = NULL
  __pyx_v_c_buf = NULL;
 12068:         cdef line_sender_qwpws_fsn fsn
+12069:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+12070:         cdef bint ok = False
  __pyx_v_ok = 0;
 12071: 
+12072:         if self._in_txn:
  if (unlikely(__pyx_v_self->_in_txn)) {
/* … */
  }
+12073:             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, 12073, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+12074:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12074, __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, 12074, __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, 12073, __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, 12073, __pyx_L1_error)
 12075:                 'Cannot flush explicitly inside a transaction')
+12076:         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, 12076, __pyx_L1_error)

+12077:         if buffer is not None:
  __pyx_t_9 = (((PyObject *)__pyx_v_buffer) != Py_None);
  if (__pyx_t_9) {
/* … */
    goto __pyx_L4;
  }
+12078:             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, 12078, __pyx_L1_error)

+12079:             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, 12079, __pyx_L1_error)

+12080:             c_buf = buffer._impl
    __pyx_t_10 = __pyx_v_buffer->_impl;

    __pyx_v_c_buf = __pyx_t_10;
 12081:         else:
+12082:             c_buf = self._buffer._impl
  /*else*/ {
    __pyx_t_10 = __pyx_v_self->_buffer->_impl;

    __pyx_v_c_buf = __pyx_t_10;
  }
  __pyx_L4:;
+12083:         (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, 12083, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

 12084:             'flush_and_get_fsn')
 12085: 
+12086:         _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+12087:         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));
+12088:         _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+12089:         if not ok:
  __pyx_t_9 = (!__pyx_v_ok);

  if (__pyx_t_9) {
/* … */
  }
+12090:             if c_buf == self._buffer._impl:
    __pyx_t_9 = (__pyx_v_c_buf == __pyx_v_self->_buffer->_impl);

    if (__pyx_t_9) {
/* … */
    }
+12091:                 line_sender_buffer_clear(c_buf)
      line_sender_buffer_clear(__pyx_v_c_buf);
+12092:             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, 12092, __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, 12092, __pyx_L1_error)
+12093:         if c_buf == self._buffer._impl:
  __pyx_t_9 = (__pyx_v_c_buf == __pyx_v_self->_buffer->_impl);

  if (__pyx_t_9) {
/* … */
  }
+12094:             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);
+12095:         if fsn.has_value:
  __pyx_t_9 = (__pyx_v_fsn.has_value != 0);

  if (__pyx_t_9) {
/* … */
  }
+12096:             return fsn.value
    __pyx_t_2 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12096, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+12097:         return None
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 12098: 
+12099:     def flush_and_keep_and_get_fsn(self, Buffer buffer=None):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_29flush_and_keep_and_get_fsn(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_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_29flush_and_keep_and_get_fsn = {"flush_and_keep_and_get_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_29flush_and_keep_and_get_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_28flush_and_keep_and_get_fsn};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_29flush_and_keep_and_get_fsn(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 12099, __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, 12099, __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, 12099, __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, 12099, __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, 12099, __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, 12099, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_28flush_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_28flush_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;
  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.Sender.flush_and_keep_and_get_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_29flush_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[146])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12099, __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[49]);
  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, 12099, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 12100:         """
 12101:         Publish a QWP/WebSocket buffer locally without clearing it and return
 12102:         the assigned frame sequence number.
 12103:         """
+12104:         cdef line_sender* sender = self._impl
  __pyx_t_1 = __pyx_v_self->_impl;

  __pyx_v_sender = __pyx_t_1;
+12105:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+12106:         cdef line_sender_buffer* c_buf = NULL
  __pyx_v_c_buf = NULL;
 12107:         cdef line_sender_qwpws_fsn fsn
+12108:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+12109:         cdef bint ok = False
  __pyx_v_ok = 0;
 12110: 
+12111:         if self._in_txn:
  if (unlikely(__pyx_v_self->_in_txn)) {
/* … */
  }
+12112:             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, 12112, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+12113:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12113, __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, 12113, __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, 12112, __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, 12112, __pyx_L1_error)
 12114:                 'Cannot flush explicitly inside a transaction')
+12115:         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, 12115, __pyx_L1_error)

+12116:         if buffer is not None:
  __pyx_t_9 = (((PyObject *)__pyx_v_buffer) != Py_None);
  if (__pyx_t_9) {
/* … */
    goto __pyx_L4;
  }
+12117:             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, 12117, __pyx_L1_error)

+12118:             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, 12118, __pyx_L1_error)

+12119:             c_buf = buffer._impl
    __pyx_t_10 = __pyx_v_buffer->_impl;

    __pyx_v_c_buf = __pyx_t_10;
 12120:         else:
+12121:             c_buf = self._buffer._impl
  /*else*/ {
    __pyx_t_10 = __pyx_v_self->_buffer->_impl;

    __pyx_v_c_buf = __pyx_t_10;
  }
  __pyx_L4:;
+12122:         (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, 12122, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

 12123:             'flush_and_keep_and_get_fsn')
 12124: 
+12125:         _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+12126:         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));
 12127:             sender, c_buf, &fsn, &err)
+12128:         _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+12129:         if not ok:
  __pyx_t_9 = (!__pyx_v_ok);

  if (__pyx_t_9) {
/* … */
  }
+12130:             if c_buf == self._buffer._impl:
    __pyx_t_9 = (__pyx_v_c_buf == __pyx_v_self->_buffer->_impl);

    if (__pyx_t_9) {
/* … */
    }
+12131:                 line_sender_buffer_clear(c_buf)
      line_sender_buffer_clear(__pyx_v_c_buf);
+12132:             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, 12132, __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, 12132, __pyx_L1_error)
+12133:         if c_buf == self._buffer._impl:
  __pyx_t_9 = (__pyx_v_c_buf == __pyx_v_self->_buffer->_impl);

  if (__pyx_t_9) {
/* … */
  }
+12134:             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);
+12135:         if fsn.has_value:
  __pyx_t_9 = (__pyx_v_fsn.has_value != 0);

  if (__pyx_t_9) {
/* … */
  }
+12136:             return fsn.value
    __pyx_t_2 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12136, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+12137:         return None
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 12138: 
+12139:     def published_fsn(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_31published_fsn(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_30published_fsn, "\n        Highest QWP/WebSocket frame sequence number published locally.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_31published_fsn = {"published_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_31published_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_30published_fsn};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_31published_fsn(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_30published_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_30published_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_31published_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[147])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12139, __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, 12139, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 12140:         """
 12141:         Highest QWP/WebSocket frame sequence number published locally.
 12142:         """
 12143:         cdef line_sender_qwpws_fsn fsn
+12144:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 12145: 
+12146:         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, 12146, __pyx_L1_error)

+12147:         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)) {
/* … */
  }
+12148:             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, 12148, __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, 12148, __pyx_L1_error)
+12149:         if fsn.has_value:
  __pyx_t_2 = (__pyx_v_fsn.has_value != 0);

  if (__pyx_t_2) {
/* … */
  }
+12150:             return fsn.value
    __pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12150, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_3;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_3 = 0;
    goto __pyx_L0;
+12151:         return None
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 12152: 
+12153:     def acked_fsn(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_33acked_fsn(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_32acked_fsn, "\n        Highest QWP/WebSocket frame sequence number completed by ACK or\n        drop-and-continue rejection.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_33acked_fsn = {"acked_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_33acked_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_32acked_fsn};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_33acked_fsn(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_32acked_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_32acked_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_33acked_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[148])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12153, __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, 12153, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 12154:         """
 12155:         Highest QWP/WebSocket frame sequence number completed by ACK or
 12156:         drop-and-continue rejection.
 12157:         """
 12158:         cdef line_sender_qwpws_fsn fsn
+12159:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 12160: 
+12161:         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, 12161, __pyx_L1_error)

+12162:         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)) {
/* … */
  }
+12163:             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, 12163, __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, 12163, __pyx_L1_error)
+12164:         if fsn.has_value:
  __pyx_t_2 = (__pyx_v_fsn.has_value != 0);

  if (__pyx_t_2) {
/* … */
  }
+12165:             return fsn.value
    __pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12165, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_3;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_3 = 0;
    goto __pyx_L0;
+12166:         return None
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 12167: 
+12168:     def await_acked_fsn(self, fsn, timeout_millis=0):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_35await_acked_fsn(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_34await_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        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_35await_acked_fsn = {"await_acked_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_35await_acked_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_34await_acked_fsn};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_35await_acked_fsn(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 12168, __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, 12168, __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, 12168, __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, 12168, __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, 12168, __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, 12168, __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, 12168, __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, 12168, __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_34await_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_34await_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;
  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_35await_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[149])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12168, __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[8]);
  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, 12168, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 12169:         """
 12170:         Wait until the QWP/WebSocket completion watermark reaches ``fsn``.
 12171: 
 12172:         Returns ``True`` once every frame published so far (which includes
 12173:         ``fsn``) has been acknowledged, or ``False`` if the no-progress
 12174:         timeout elapsed before the acknowledgement watermark reached ``fsn``.
 12175:         """
+12176:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+12177:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
 12178:         cdef uint64_t c_fsn
 12179:         cdef uint64_t c_timeout_millis
 12180:         cdef line_sender_qwpws_fsn acked
+12181:         cdef bint ok = False
  __pyx_v_ok = 0;
 12182: 
+12183:         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, 12183, __pyx_L1_error)

+12184:         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)) {
/* … */
  }
+12185:             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, 12185, __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, 12185, __pyx_L1_error)
+12186:         if fsn < 0:
  __pyx_t_2 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_fsn, __pyx_mstate_global->__pyx_int_0, Py_LT); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 12186, __pyx_L1_error)
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+12187:             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, 12187, __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, 12187, __pyx_L1_error)
+12188:         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)) {
/* … */
  }
+12189:             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, 12189, __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, 12189, __pyx_L1_error)
+12190:         if timeout_millis < 0:
  __pyx_t_2 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_timeout_millis, __pyx_mstate_global->__pyx_int_0, Py_LT); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 12190, __pyx_L1_error)
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+12191:             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, 12191, __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, 12191, __pyx_L1_error)
+12192:         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, 12192, __pyx_L1_error)
  __pyx_v_c_fsn = __pyx_t_8;
+12193:         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, 12193, __pyx_L1_error)
  __pyx_v_c_timeout_millis = __pyx_t_8;
 12194: 
 12195:         # Fast path: the completion watermark may already cover ``fsn``.
+12196:         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)) {
/* … */
  }
+12197:             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, 12197, __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, 12197, __pyx_L1_error)
+12198:         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) {
/* … */
  }
+12199:             return True
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(Py_True);
        __pyx_r = Py_True;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
 12200: 
 12201:         # `line_sender_qwpws_wait` drains every frame published so far (a
 12202:         # superset of ``fsn``) up to the "ok" ack level. The no-progress
 12203:         # deadline (`timeout_millis`; 0 == wait indefinitely) surfaces as a
 12204:         # `line_sender_error_failover_retry`, which we translate back into the
 12205:         # historical ``reached == False`` return rather than raising.
+12206:         _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+12207:         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));
 12208:             self._impl,
 12209:             qwpws_ack_level.qwpws_ack_level_ok,
 12210:             c_timeout_millis,
 12211:             &err)
+12212:         _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+12213:         if not ok:
  __pyx_t_2 = (!__pyx_v_ok);

  if (__pyx_t_2) {
/* … */
  }
+12214:             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)) {
/* … */
    }
 12215:                     line_sender_error_failover_retry:
+12216:                 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, 12216, __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, 12216, __pyx_L1_error)
+12217:             line_sender_error_free(err)
    line_sender_error_free(__pyx_v_err);
+12218:             err = NULL
    __pyx_v_err = NULL;
 12219: 
 12220:         # Re-read the watermark: the wait either drained ``fsn`` or expired
 12221:         # with no progress; the current ack level is the answer.
+12222:         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)) {
/* … */
  }
+12223:             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, 12223, __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, 12223, __pyx_L1_error)
+12224:         return bool(acked.has_value and acked.value >= c_fsn)
  __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, 12224, __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, 12224, __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, 12224, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_5);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = ((PyObject *)__pyx_t_5);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_5 = 0;
  goto __pyx_L0;
 12225: 
+12226:     def drive_once(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_37drive_once(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_36drive_once, "\n        Drive one QWP/WebSocket progress step for manual progress senders.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_37drive_once = {"drive_once", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_37drive_once, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_36drive_once};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_37drive_once(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_36drive_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_36drive_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;
  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_37drive_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[150])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12226, __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, 12226, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 12227:         """
 12228:         Drive one QWP/WebSocket progress step for manual progress senders.
 12229:         """
+12230:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+12231:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+12232:         cdef cbool progressed = False
  __pyx_v_progressed = 0;
+12233:         cdef bint ok = False
  __pyx_v_ok = 0;
 12234: 
+12235:         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, 12235, __pyx_L1_error)

+12236:         _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+12237:         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));
+12238:         _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+12239:         if not ok:
  __pyx_t_2 = (!__pyx_v_ok);

  if (unlikely(__pyx_t_2)) {
/* … */
  }
+12240:             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, 12240, __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, 12240, __pyx_L1_error)
+12241:         return bool(progressed)
  __pyx_t_4 = NULL;
  __pyx_t_5 = __Pyx_PyLong_From_bool(__pyx_v_progressed); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12241, __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, 12241, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_3);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = ((PyObject *)__pyx_t_3);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_3 = 0;
  goto __pyx_L0;
 12242: 
+12243:     def poll_error(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_39poll_error(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_38poll_error, "\n        Poll the next structured QWP/WebSocket diagnostic.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_39poll_error = {"poll_error", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_39poll_error, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_38poll_error};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_39poll_error(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_38poll_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_38poll_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_39poll_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[151])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12243, __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, 12243, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 12244:         """
 12245:         Poll the next structured QWP/WebSocket diagnostic.
 12246:         """
+12247:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+12248:         cdef line_sender_qwpws_error* qwp_err = NULL
  __pyx_v_qwp_err = NULL;
 12249:         cdef line_sender_qwpws_error_view view
 12250: 
+12251:         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, 12251, __pyx_L1_error)

+12252:         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)) {
/* … */
  }
+12253:             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, 12253, __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, 12253, __pyx_L1_error)
+12254:         if qwp_err == NULL:
  __pyx_t_2 = (__pyx_v_qwp_err == NULL);

  if (__pyx_t_2) {
/* … */
  }
+12255:             return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+12256:         try:
  /*try:*/ {
+12257:             view = line_sender_qwpws_error_get_view(qwp_err)
    __pyx_v_view = line_sender_qwpws_error_get_view(__pyx_v_qwp_err);
+12258:             return _sender_error_from_raw(c_sender_error_view_to_raw(view))
    __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, 12258, __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, 12258, __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, 12258, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_3;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_3 = 0;
    goto __pyx_L5_return;
  }
 12259:         finally:
+12260:             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;
    }
  }
 12261: 
+12262:     def error_events_dropped(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_41error_events_dropped(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_40error_events_dropped, "\n        Number of QWP/WebSocket diagnostics dropped from the bounded ring.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_41error_events_dropped = {"error_events_dropped", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_41error_events_dropped, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_40error_events_dropped};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_41error_events_dropped(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_40error_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_40error_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_41error_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[152])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12262, __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, 12262, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 12263:         """
 12264:         Number of QWP/WebSocket diagnostics dropped from the bounded ring.
 12265:         """
+12266:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+12267:         cdef uint64_t dropped = 0
  __pyx_v_dropped = 0;
 12268: 
+12269:         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, 12269, __pyx_L1_error)

+12270:         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)) {
/* … */
  }
+12271:             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, 12271, __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, 12271, __pyx_L1_error)
+12272:         return dropped
  __pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_dropped); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_3;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_3 = 0;
  goto __pyx_L0;
 12273: 
+12274:     @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_2);
  __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;
}
 12275:     def connection_events_dropped(self) -> int:
 12276:         """
 12277:         Total connection events discarded by the listener inbox's
 12278:         drop-oldest policy. ``0`` when no listener is registered.
 12279:         """
+12280:         if self._impl == NULL:
  __pyx_t_1 = (__pyx_v_self->_impl == NULL);

  if (__pyx_t_1) {
/* … */
  }
+12281:             return 0
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
        __pyx_r = __pyx_mstate_global->__pyx_int_0;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+12282:         return line_sender_connection_events_dropped(self._impl)
  __pyx_t_2 = __Pyx_PyLong_From_uint64_t(line_sender_connection_events_dropped(__pyx_v_self->_impl)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12282, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_2;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_2 = 0;
  goto __pyx_L0;
 12283: 
+12284:     @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_2);
  __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;
}
 12285:     def connection_events_delivered(self) -> int:
 12286:         """
 12287:         Total connection events delivered to the listener. ``0`` when no
 12288:         listener is registered.
 12289:         """
+12290:         if self._impl == NULL:
  __pyx_t_1 = (__pyx_v_self->_impl == NULL);

  if (__pyx_t_1) {
/* … */
  }
+12291:             return 0
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
        __pyx_r = __pyx_mstate_global->__pyx_int_0;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+12292:         return line_sender_connection_events_delivered(self._impl)
  __pyx_t_2 = __Pyx_PyLong_From_uint64_t(line_sender_connection_events_delivered(__pyx_v_self->_impl)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12292, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_2;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_2 = 0;
  goto __pyx_L0;
 12293: 
+12294:     def close_drain(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_43close_drain(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_42close_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_43close_drain = {"close_drain", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_43close_drain, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_42close_drain};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_43close_drain(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_42close_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_42close_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;
  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_43close_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[153])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12294, __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, 12294, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 12295:         """
 12296:         Stop accepting new QWP/WebSocket publications and wait for already
 12297:         published frames to resolve.
 12298:         """
+12299:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+12300:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+12301:         cdef bint ok = False
  __pyx_v_ok = 0;
 12302: 
+12303:         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, 12303, __pyx_L1_error)

 12304:         # Draining stops the sender accepting anything further, so a
 12305:         # row still being written can never be finished or sent, and
 12306:         # the complete rows buffered before it go with it -- after
 12307:         # which `close(flush=True)` reports success having sent
 12308:         # nothing. Refused while a row is part-way through, like every
 12309:         # other call that ends the buffer.
+12310:         if self._buffer is not None:
  __pyx_t_2 = (((PyObject *)__pyx_v_self->_buffer) != Py_None);
  if (__pyx_t_2) {
/* … */
  }
+12311:             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, 12311, __pyx_L1_error)

+12312:         _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+12313:         ok = line_sender_qwpws_close_drain(self._impl, &err)
  __pyx_v_ok = line_sender_qwpws_close_drain(__pyx_v_self->_impl, (&__pyx_v_err));
+12314:         _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+12315:         if not ok:
  __pyx_t_2 = (!__pyx_v_ok);

  if (unlikely(__pyx_t_2)) {
/* … */
  }
+12316:             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, 12316, __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, 12316, __pyx_L1_error)
 12317: 
+12318:     cdef _close(self):
static PyObject *__pyx_f_7questdb_7_client_6Sender__close(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
  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;
/* … */
  /* 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;
}
+12319:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+12320:         cdef line_sender* impl = self._impl
  __pyx_t_1 = __pyx_v_self->_impl;

  __pyx_v_impl = __pyx_t_1;
+12321:         cdef line_sender_opts* opts = self._opts
  __pyx_t_2 = __pyx_v_self->_opts;

  __pyx_v_opts = __pyx_t_2;
+12322:         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;
+12323:         self._impl = NULL
  __pyx_v_self->_impl = NULL;
+12324:         self._opts = NULL
  __pyx_v_self->_opts = NULL;
+12325:         self._qwp_ws_opts = NULL
  __pyx_v_self->_qwp_ws_opts = NULL;
+12326:         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) {
/* … */
  }
+12327:             _ensure_doesnt_have_gil(&gs)
    (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+12328:             if impl != NULL:
    __pyx_t_3 = (__pyx_v_impl != NULL);

    if (__pyx_t_3) {
/* … */
    }
+12329:                 line_sender_close(impl)
      line_sender_close(__pyx_v_impl);
+12330:             line_sender_opts_free(opts)
    line_sender_opts_free(__pyx_v_opts);
+12331:             line_sender_opts_free(qwp_ws_opts)
    line_sender_opts_free(__pyx_v_qwp_ws_opts);
+12332:             _ensure_has_gil(&gs)
    __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+12333:         _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, 12333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+12334:         self._cb_refs_key = 0
  __pyx_v_self->_cb_refs_key = 0;
+12335:         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);
+12336:         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;
+12337:         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;
+12338:         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;
+12339:         if self._slot_id != -1:
  __pyx_t_3 = (__pyx_v_self->_slot_id != -1L);

  if (__pyx_t_3) {
/* … */
  }
+12340:             qdb_active_senders_track_closed(<uint32_t>self._slot_id)
    qdb_active_senders_track_closed(((uint32_t)__pyx_v_self->_slot_id));
+12341:             self._slot_id = -1
    __pyx_v_self->_slot_id = -1L;
 12342: 
+12343:     cpdef close(self, bint flush=True):
static PyObject *__pyx_pw_7questdb_7_client_6Sender_45close(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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 (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #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, 12343, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7questdb_7_client_6Sender_45close)) {
        __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, 12343, __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, 12343, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        {
          PyObject *__pyx_temp;
          {
            __pyx_temp = __pyx_r;
            __pyx_r = __pyx_t_2;
          }
          __Pyx_XDECREF(__pyx_temp);
        }
        __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_45close(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_44close, "\n        Disconnect.\n\n        This method is idempotent and can be called repeatedly.\n\n        Once a sender is closed, it can\047t 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\047s **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_45close = {"close", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_45close, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_44close};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_45close(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 12343, __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, 12343, __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, 12343, __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, 12343, __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, 12343, __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, 12343, __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_44close(((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_44close(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, int __pyx_v_flush) {
  PyObject *__pyx_r = NULL;
  __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, 12343, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __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_45close, __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[154])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12343, __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[72]);
  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, 12343, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
/* … */
  {
    PyObject* __pyx_temp[1] = {Py_True};
    __pyx_mstate_global->__pyx_tuple[72] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[72])) __PYX_ERR(0, 12343, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[72]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[72]);
/* … */
struct __pyx_opt_args_7questdb_7_client_6Sender_close {
  int __pyx_n;
  int flush;
};
 12344:         """
 12345:         Disconnect.
 12346: 
 12347:         This method is idempotent and can be called repeatedly.
 12348: 
 12349:         Once a sender is closed, it can't be re-used.
 12350: 
 12351:         :param bool flush: If ``True``, flush the internal buffer before closing.
 12352:             For QWP/WebSocket, this also drains already-published frames before
 12353:             closing.
 12354: 
 12355:         Refused while a row is part-way through the sender's **internal**
 12356:         buffer, which is the buffer this call flushes. A buffer of your
 12357:         own from :func:`Sender.new_buffer` is neither flushed nor checked
 12358:         here: the sender is never told which buffers exist, so it cannot
 12359:         refuse on their behalf. Such a buffer keeps every byte written
 12360:         into it, but a sender closed out from under it can no longer send
 12361:         it — finish the row and flush it before closing.
 12362:         """
+12363:         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); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12363, __pyx_L1_error)

 12364:         # The internal buffer is the one this call flushes, so it is the
 12365:         # one held to "no row part-way through" -- the same rule
 12366:         # `flush(buffer)` applies to whichever buffer it was handed.
 12367:         # Refused outright rather than by way of the flush below:
 12368:         # `_close()` runs from the `finally` whatever the flush does, so
 12369:         # a refusal there would still close the sender and take the
 12370:         # already-buffered rows with it. With `flush=False` there is no
 12371:         # flush to refuse at all.
+12372:         if self._buffer is not None:
  __pyx_t_8 = (((PyObject *)__pyx_v_self->_buffer) != Py_None);
  if (__pyx_t_8) {
/* … */
  }
+12373:             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, 12373, __pyx_L1_error)

+12374:         try:
  /*try:*/ {
+12375:             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) {
/* … */
    }
  }
+12376:                     (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:;
+12377:                 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, 12377, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+12378:                 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, 12378, __pyx_L5_error)
      if (__pyx_t_8) {
/* … */
      }
+12379:                     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, 12379, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 12380:         finally:
+12381:             self._close()
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_self->__pyx_vtab)->_close(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12381, __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); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12381, __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:;
  }
 12382: 
+12383:     def __exit__(self, exc_type, exc_val, exc_tb):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_47__exit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_46__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_47__exit__ = {"__exit__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_47__exit__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_46__exit__};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_47__exit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 12383, __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, 12383, __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, 12383, __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, 12383, __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, 12383, __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, 12383, __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, 12383, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 12383, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 12383, __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, 12383, __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_46__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_46__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_47__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[155])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12383, __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, 12383, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 12384:         """
 12385:         Flush pending and disconnect at the end of a ``with`` block.
 12386: 
 12387:         If the ``with`` block raises an exception, any pending data will
 12388:         *NOT* be flushed.
 12389: 
 12390:         This is implemented by calling :func:`Sender.close`.
 12391:         """
+12392:         self.close(not exc_type)
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_exc_type); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 12392, __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, 12392, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);

  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 12393: 
+12394:     def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_7questdb_7_client_6Sender_49__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7questdb_7_client_6Sender_49__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_48__dealloc__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));

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

static void __pyx_pf_7questdb_7_client_6Sender_48__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();
}
+12395:         self._close()
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_self->__pyx_vtab)->_close(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12395, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+12396:         free(self._last_flush_ms)
  free(__pyx_v_self->_last_flush_ms);
 12397: 
 12398: 
 12399: # QWP/WebSocket row auto-flush, shared by a standalone `Sender` and a
 12400: # `PooledSender` lease: each function takes both, exactly one of them set.
 12401: 
+12402: 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;
}
 12403:         Sender sender,
 12404:         PooledSender pooled,
 12405:         Buffer buf,
 12406:         str table_name,
 12407:         dict symbols,
 12408:         dict columns,
 12409:         object at) except -1:
 12410:     """
 12411:     Append a row, holding the rewind point just before it. A row whose
 12412:     values are all `None` writes nothing and leaves no rewind point.
 12413:     """
+12414:     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);
+12415:     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, 12415, __pyx_L1_error)

+12416:     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) {
/* … */
  }
+12417:         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);
 12418: 
 12419: 
+12420: 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;
}
 12421:         Sender sender,
 12422:         PooledSender pooled,
 12423:         Buffer buf,
 12424:         size_t* hard_cap) except -1:
 12425:     """
 12426:     Whether the row buffer is due for auto-flush, reporting the frame cap
 12427:     it plans for through `hard_cap` (see `_qwp_row_planning_cap`).
 12428:     """
 12429:     cdef auto_flush_mode_t* mode
 12430:     cdef bint bytes_dynamic
 12431:     cdef int64_t interval_start_ms
+12432:     cdef cbool server_cap_known = False
  __pyx_v_server_cap_known = 0;
+12433:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 12434:     cdef bint ok
+12435:     if pooled is not None:
  __pyx_t_1 = (((PyObject *)__pyx_v_pooled) != Py_None);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+12436:         mode = &pooled._handle._auto_flush_mode
    __pyx_v_mode = (&__pyx_v_pooled->_handle->_auto_flush_mode);
+12437:         if not mode.enabled:
    __pyx_t_1 = (!__pyx_v_mode->enabled);

    if (__pyx_t_1) {
/* … */
    }
+12438:             return False
      {

        __pyx_r = 0;
      }
      goto __pyx_L0;
+12439:         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;
+12440:         interval_start_ms = pooled._batch_started_ms
    __pyx_t_2 = __pyx_v_pooled->_batch_started_ms;

    __pyx_v_interval_start_ms = __pyx_t_2;
+12441:         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));
 12442:             pooled._qwp, hard_cap, &server_cap_known, &err)
 12443:     else:
+12444:         mode = &sender._auto_flush_mode
  /*else*/ {
    __pyx_v_mode = (&__pyx_v_sender->_auto_flush_mode);
+12445:         if not mode.enabled:
    __pyx_t_1 = (!__pyx_v_mode->enabled);

    if (__pyx_t_1) {
/* … */
    }
+12446:             return False
      {

        __pyx_r = 0;
      }
      goto __pyx_L0;
+12447:         if sender._impl == NULL:
    __pyx_t_1 = (__pyx_v_sender->_impl == NULL);

    if (unlikely(__pyx_t_1)) {
/* … */
    }
+12448:             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, 12448, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
+12449:                 QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12449, __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, 12449, __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, 12448, __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, 12448, __pyx_L1_error)
 12450:                 "row() can't be called: Sender is closed.")
+12451:         bytes_dynamic = sender._auto_flush_bytes_dynamic
    __pyx_t_1 = __pyx_v_sender->_auto_flush_bytes_dynamic;

    __pyx_v_bytes_dynamic = __pyx_t_1;
+12452:         interval_start_ms = sender._last_flush_ms[0]
    __pyx_v_interval_start_ms = (__pyx_v_sender->_last_flush_ms[0]);
+12453:         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:;
 12454:             sender._impl, hard_cap, &server_cap_known, &err)
+12455:     if not ok:
  __pyx_t_1 = (!__pyx_v_ok);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+12456:         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, 12456, __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, 12456, __pyx_L1_error)
+12457:     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);
+12458:     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;
 12459:         mode,
 12460:         bytes_dynamic,
 12461:         buf._impl,
 12462:         hard_cap[0],
 12463:         interval_start_ms)
 12464: 
 12465: 
+12466: 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_AddTraceback("questdb._client._qwp_row_publish", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;

  return __pyx_r;
}
 12467:     """
 12468:     Publish the whole row buffer as one frame and clear it.
 12469: 
 12470:     A `BatchTooLarge` refusal publishes nothing and leaves the buffer intact
 12471:     on both senders. After any other failure a pooled lease keeps its rows
 12472:     and a standalone sender has cleared them, as their `flush()` does.
 12473:     """
+12474:     if pooled is not None:
  __pyx_t_1 = (((PyObject *)__pyx_v_pooled) != Py_None);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+12475:         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, 12475, __pyx_L1_error)

 12476:     else:
+12477:         sender._flush_c_buf(sender._buffer._impl, True, False, True)
  /*else*/ {
    __pyx_t_2 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_sender->__pyx_vtab)->_flush_c_buf(__pyx_v_sender, __pyx_v_sender->_buffer->_impl, 1, 0, 1); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12477, __pyx_L1_error)

  }
  __pyx_L3:;
 12478: 
 12479: 
+12480: 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;
}
 12481:         PooledSender pooled,
 12482:         Buffer buf,
 12483:         object exc,
 12484:         bint earlier_rows_published) except -1:
 12485:     """Remove the newest row, which does not fit in a frame on its own."""
+12486:     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, 12486, __pyx_L1_error)

+12487:     if pooled is not None:
  __pyx_t_2 = (((PyObject *)__pyx_v_pooled) != Py_None);
  if (__pyx_t_2) {
/* … */
  }
+12488:         pooled._batch_started_ms = 0
    __pyx_v_pooled->_batch_started_ms = 0;
+12489:     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, 12489, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
+12490:         QuestDBErrorCode.BatchTooLarge,
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12490, __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, 12490, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 12491:         'The row was not added: it does not fit in one QWP/WebSocket '
 12492:         'frame on its own. '
+12493:         + ('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, 12493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+12494:            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__6);
    __pyx_t_6 = __pyx_mstate_global->__pyx_kp_u__6;
  }
+12495:         + str(exc)) from exc
  __pyx_t_6 = __Pyx_PyObject_Unicode(__pyx_v_exc); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12495, __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, 12495, __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, 12489, __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, 12489, __pyx_L1_error)
 12496: 
 12497: 
+12498: 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_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client._qwp_row_not_added", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 12499:     """
 12500:     `exc`, a publish failure other than `BatchTooLarge`, with its message
 12501:     saying that the row was not added.
 12502:     """
+12503:     return type(exc)(
  __pyx_t_2 = NULL;
  __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_exc)));
  __pyx_t_3 = ((PyObject *)Py_TYPE(__pyx_v_exc)); 
+12504:         exc.code,
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12504, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
 12505:         'The row was not added. '
+12506:         + ('The rows buffered before it were published. '
  __pyx_t_6 = __Pyx_PyUnicode_ConcatSafe(__pyx_mstate_global->__pyx_kp_u_The_row_was_not_added, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12506, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+12507:            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_5 = __pyx_mstate_global->__pyx_kp_u_The_rows_buffered_before_it_were;
  } else {
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u__6);
    __pyx_t_5 = __pyx_mstate_global->__pyx_kp_u__6;
  }
+12508:         + str(exc),
  __pyx_t_5 = __Pyx_PyObject_Unicode(__pyx_v_exc); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12508, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12508, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+12509:         exc.sender_error,
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_sender_error); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12509, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
+12510:         in_doubt=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, 12510, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __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[5] = {__pyx_t_2, __pyx_t_4, __pyx_t_7, __pyx_t_5, __pyx_t_6};
    #if CYTHON_VECTORCALL
    __pyx_t_9 = __pyx_mstate_global->__pyx_tuple[23];
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 12503, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_9);
    #else
    {
      PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_in_doubt};
      __pyx_t_9 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+4, 1);
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 12503, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
    }
    #endif
    __pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_8, (4-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_9);
    __Pyx_XDECREF(__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;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12503, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 12511: 
 12512: 
+12513: 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;
}
 12514:         Sender sender,
 12515:         PooledSender pooled,
 12516:         Buffer buf,
 12517:         str table_name,
 12518:         dict symbols,
 12519:         dict columns,
 12520:         object at) except -1:
 12521:     """
 12522:     Publish the rows buffered before the newest one as a frame of their
 12523:     own, then add the newest row back to start the next batch.
 12524:     """
+12525:     cdef size_t hard_cap = 0
  __pyx_v_hard_cap = 0;
 12526:     cdef size_t discarded
+12527:     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, 12527, __pyx_L1_error)

+12528:     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:;
  }
+12529:         _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, 12529, __pyx_L3_error)

+12530:     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, 12530, __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, 12530, __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;
+12531:         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, 12531, __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, 12531, __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, 12531, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_12 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_8, __pyx_t_11, Py_EQ); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 12531, __pyx_L14_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        if (__pyx_t_12) {
/* … */
        }
 12532:             # No frame can carry these rows, and the routine cannot cut
 12533:             # them any finer: it removes only the newest row.
+12534:             discarded = line_sender_buffer_row_count(buf._impl)
          __pyx_v_discarded = line_sender_buffer_row_count(__pyx_v_buf->_impl);
+12535:             line_sender_buffer_clear(buf._impl)
          line_sender_buffer_clear(__pyx_v_buf->_impl);
+12536:             if pooled is not None:
          __pyx_t_12 = (((PyObject *)__pyx_v_pooled) != Py_None);
          if (__pyx_t_12) {
/* … */
          }
+12537:                 qdb_pystr_buf_clear(buf._b)
            qdb_pystr_buf_clear(__pyx_v_buf->_b);
+12538:                 pooled._batch_started_ms = 0
            __pyx_v_pooled->_batch_started_ms = 0;
+12539:             raise QuestDBError(
          __pyx_t_8 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 12539, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_10);
+12540:                 QuestDBErrorCode.BatchTooLarge,
          __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 12540, __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, 12540, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+12541:                 f'{discarded} buffered '
          __pyx_t_13 = __Pyx_PyUnicode_From_size_t(__pyx_v_discarded, 0, ' ', 'd'); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 12541, __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, 12541, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+12542:                 + ('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, 12542, __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;
+12543:                 + ' 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, 12543, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 12544:                 'do not fit in one QWP/WebSocket frame even without it. '
 12545:                 'This can happen when the frame cap shrinks, for example '
 12546:                 'on reconnect, or when a lazily connected sender learns '
 12547:                 "that the server's cap is below the default. "
+12548:                 + str(exc)) from exc
          __pyx_t_16 = __Pyx_PyObject_Unicode(__pyx_v_exc); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 12548, __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, 12548, __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_10))) {
            __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_10);
            assert(__pyx_t_8);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_10);
            __Pyx_INCREF(__pyx_t_8);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_10, __pyx__function);
            __pyx_t_17 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_14, __pyx_t_15};
            __pyx_t_11 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_10, __pyx_callargs+__pyx_t_17, (3-__pyx_t_17) | (__pyx_t_17*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
            if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 12539, __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, 12539, __pyx_L14_error)
 12549:         # The rows before the newest one are as the sender's `flush()`
 12550:         # leaves them, and the newest one stays out, so a pooled lease
 12551:         # keeps only rows that fit in one frame.
+12552:         raise _qwp_row_not_added(exc, False) from exc
        __pyx_t_11 = __pyx_f_7questdb_7_client__qwp_row_not_added(__pyx_v_exc, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 12552, __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, 12552, __pyx_L14_error)
      }
 12553:     # Converts the row's values a second time.
+12554:     _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, 12554, __pyx_L1_error)

+12555:     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, 12555, __pyx_L1_error)
  if (__pyx_t_12) {
/* … */
  }
+12556:         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:;
    }
+12557:             _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, 12557, __pyx_L23_error)

+12558:         except QuestDBError as exc:
      __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
      __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 12558, __pyx_L25_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_18 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_5, __pyx_t_11);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 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, 12558, __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_19 = __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_19;
            goto __pyx_L25_except_error;
          }
        }
      }
      goto __pyx_L25_except_error;
+12559:             if exc.code == QuestDBErrorCode.BatchTooLarge:
          __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 12559, __pyx_L34_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 12559, __pyx_L34_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_BatchTooLarge); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 12559, __pyx_L34_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __pyx_t_12 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_11, __pyx_t_15, Py_EQ); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 12559, __pyx_L34_error)
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          if (__pyx_t_12) {
/* … */
          }
+12560:                 _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, 12560, __pyx_L34_error)

+12561:             raise _qwp_row_not_added(exc, True) from exc
          __pyx_t_15 = __pyx_f_7questdb_7_client__qwp_row_not_added(__pyx_v_exc, 1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 12561, __pyx_L34_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, 12561, __pyx_L34_error)
        }
 12562: 
 12563: 
+12564: 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;
}
 12565:         Sender sender,
 12566:         PooledSender pooled,
 12567:         Buffer buf,
 12568:         str table_name,
 12569:         dict symbols,
 12570:         dict columns,
 12571:         object at) except -1:
 12572:     """
 12573:     Append a row to a QWP/WebSocket row buffer and run auto-flush, keeping
 12574:     every published frame within the connection's frame cap.
 12575: 
 12576:     The whole buffer goes out as one frame when it fits. When it does not,
 12577:     or its size estimate is already past the cap, the rows buffered before
 12578:     the new one go out on their own and the new row starts the next batch,
 12579:     so a single call publishes at most two frames.
 12580: 
 12581:     Whatever this raises, the new row is not in the buffer. A
 12582:     `BatchTooLarge` means either it does not fit in a frame on its own, or
 12583:     the rows before it do not fit even without it, as after the frame cap
 12584:     shrinks, and those rows are discarded. After any other failure the rows
 12585:     before it are as the sender's `flush()` leaves them: a pooled lease
 12586:     keeps them and a standalone sender has cleared them.
 12587:     """
+12588:     cdef size_t hard_cap = 0
  __pyx_v_hard_cap = 0;
 12589:     cdef size_t row_count
 12590:     cdef bint split
+12591:     _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, 12591, __pyx_L1_error)

+12592:     if not buf._marker_set:
  __pyx_t_2 = (!__pyx_v_buf->_marker_set);

  if (__pyx_t_2) {
/* … */
  }
 12593:         # Nothing was written, and the split and reject paths below need
 12594:         # the rewind point. Such a row triggers no auto-flush, as in
 12595:         # `Buffer._row`.
+12596:         return 0
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+12597:     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:;
    }
  }
+12598:         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, 12598, __pyx_L7_error)
        __pyx_t_6 = (!__pyx_t_2);


        if (__pyx_t_6) {
/* … */
        }
+12599:             return 0
          {

            __pyx_r = 0;
          }
          goto __pyx_L11_try_return;
+12600:         row_count = line_sender_buffer_row_count(buf._impl)
        __pyx_v_row_count = line_sender_buffer_row_count(__pyx_v_buf->_impl);
 12601:         # Past the cap, the estimate cannot tell whether the whole buffer
 12602:         # fits. The rows before the newest one fit unless the cap shrank:
 12603:         # they were under the threshold when the previous row was checked,
 12604:         # and the estimate does not undercount a frame (see
 12605:         # `line_sender_buffer_size`). So they go out on their own, without
 12606:         # first encoding the whole buffer to find out.
+12607:         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;
        }
+12608:                  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;
+12609:         if not split:
        __pyx_t_6 = (!__pyx_v_split);

        if (__pyx_t_6) {
/* … */
        }
+12610:             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);
          }
+12611:                 _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, 12611, __pyx_L17_error)

+12612:                 return 0
              {

                __pyx_r = 0;
              }
              goto __pyx_L21_try_return;
+12613:             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, 12613, __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, 12613, __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;
+12614:                 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, 12614, __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, 12614, __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, 12614, __pyx_L28_error)
                __Pyx_GOTREF(__pyx_t_16);
                __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
                __pyx_t_6 = __Pyx_PyObject_CompareBoolNe_object_object(__pyx_t_13, __pyx_t_16, Py_NE); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 12614, __pyx_L28_error)
                __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
                __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
                if (unlikely(__pyx_t_6)) {
/* … */
                }
+12615:                     raise _qwp_row_not_added(exc, False) from exc
                  __pyx_t_16 = __pyx_f_7questdb_7_client__qwp_row_not_added(__pyx_v_exc, 0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 12615, __pyx_L28_error)
                  __Pyx_GOTREF(__pyx_t_16);
                  __Pyx_Raise(__pyx_t_16, 0, 0, __pyx_v_exc);
                  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
                  __PYX_ERR(0, 12615, __pyx_L28_error)
+12616:                 if row_count == 1:
                __pyx_t_6 = (__pyx_v_row_count == 1);

                if (__pyx_t_6) {
/* … */
                }
              }
+12617:                     _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, 12617, __pyx_L28_error)

+12618:         _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, 12618, __pyx_L7_error)

+12619:     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, 12619, __pyx_L9_except_error)
        __Pyx_XGOTREF(__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_11);
        __Pyx_XGOTREF(__pyx_t_12);
 12620:         # A path that removed the new row itself has spent the rewind
 12621:         # point, and a failed standalone publish has cleared the buffer,
 12622:         # rewind point included. Otherwise the row is still buffered, since
 12623:         # a failed publish leaves a pooled lease's rows in place, and it
 12624:         # comes out here.
+12625:         buf._rewind_after_failure()
        __pyx_t_16 = __pyx_f_7questdb_7_client_6Buffer__rewind_after_failure(__pyx_v_buf); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 12625, __pyx_L9_except_error)
        __Pyx_GOTREF(__pyx_t_16);
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+12626:         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) {
/* … */
        }
+12627:                 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:;
+12628:             pooled._batch_started_ms = 0
          __pyx_v_pooled->_batch_started_ms = 0;
+12629:         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, 12629, __pyx_L9_except_error)
      }
 12630:     finally:
+12631:         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, 12631, __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_18 = __pyx_filename;
      {
        __pyx_t_12 = __pyx_f_7questdb_7_client_6Buffer__clear_marker(__pyx_v_buf); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 12631, __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_18;
      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, 12631, __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:;
  }
 12632: 
 12633: 
+12634: @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 (*_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;

 12635: cdef class PooledSender:
 12636:     """
 12637:     A row-building sender borrowed from a :class:`QuestDB` pool.
 12638: 
 12639:     Obtain a lease with :meth:`QuestDB.sender`; ``close()`` returns the
 12640:     native sender to the pool. Rows publish into an ordered,
 12641:     store-and-forward-covered QWP stream over one pooled connection.
 12642: 
 12643:     Rows go through ``row()``, ``dataframe()``, ``flush()``, ``wait()``
 12644:     and ``close()``; ``len(sender)`` is the number of buffered rows.
 12645:     Frame-level delivery tracking is available through
 12646:     :meth:`flush_and_get_fsn`, :meth:`flush_and_keep_and_get_fsn`,
 12647:     :meth:`published_fsn`, :meth:`acked_fsn` and
 12648:     :meth:`await_acked_fsn`, and per-lease server diagnostics through
 12649:     :meth:`poll_error` and :meth:`error_events_dropped`. Prefer
 12650:     :meth:`QuestDB.dataframe` for bulk loads; the lease's own
 12651:     ``dataframe()`` is a convenience that routes to the same direct
 12652:     columnar path. Row auto-flush is enabled by default at 1,000 rows, 100
 12653:     milliseconds, or a cap-derived byte threshold, and can be configured
 12654:     through the parent handle's connection settings.
 12655: 
 12656:     A lease is used by one thread at a time. It may move to another
 12657:     thread -- borrowed on one and used on a worker, say -- provided the
 12658:     hand-off is synchronized and no two threads call into it at once. To
 12659:     ingest from several threads, share the :class:`QuestDB` handle and
 12660:     borrow one lease per thread. Every method holds the lease's lock for
 12661:     its whole call, :meth:`dataframe` included, so a call from a second
 12662:     thread waits until the running one returns. Code that runs inside a
 12663:     call -- a column value's conversion, the Arrow stream
 12664:     :meth:`dataframe` reads, or a handler on the ``questdb`` logger,
 12665:     which :meth:`dataframe` logs its warnings to -- therefore must not
 12666:     wait on another thread that uses the same lease.
 12667: 
 12668:     Close every lease, or use it in a ``with`` block. A lease collected
 12669:     without ``close()`` returns its sender to the pool without sending
 12670:     the rows still buffered in it, and reports how many it discarded
 12671:     through the ``questdb`` logger at ``WARNING``.
 12672:     """
 12673:     cdef qwp_sender* _qwp
 12674:     cdef questdb_db* _db
 12675:     cdef QuestDB _handle
 12676:     cdef Buffer _buffer
 12677:     cdef object _lock
 12678:     cdef int64_t _batch_started_ms
 12679:     cdef int64_t _call_depth
 12680: 
+12681:     def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_12PooledSender_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_12PooledSender_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL_TPNEW
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if !CYTHON_VECTORCALL_TPNEW
  #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
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__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_FASTCALL_TPNEW(__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;
}
+12682:         self._qwp = NULL
  __pyx_v_self->_qwp = NULL;
+12683:         self._db = NULL
  __pyx_v_self->_db = NULL;
+12684:         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);
+12685:         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);
+12686:         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, 12686, __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, 12686, __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, 12686, __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;
+12687:         self._batch_started_ms = 0
  __pyx_v_self->_batch_started_ms = 0;
+12688:         self._call_depth = 0
  __pyx_v_self->_call_depth = 0;
 12689: 
+12690:     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();
}
 12691:             self,
 12692:             QuestDB handle,
 12693:             questdb_db* db,
 12694:             qwp_sender* sender,
 12695:             Buffer buffer) noexcept:
+12696:         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;
+12697:         self._db = db
  __pyx_v_self->_db = __pyx_v_db;
+12698:         self._qwp = sender
  __pyx_v_self->_qwp = __pyx_v_sender;
+12699:         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;
+12700:         self._batch_started_ms = 0
  __pyx_v_self->_batch_started_ms = 0;
 12701: 
+12702:     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;
}
+12703:         if self._qwp == NULL:
  __pyx_t_1 = (__pyx_v_self->_qwp == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+12704:             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, 12704, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+12705:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12705, __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, 12705, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+12706:                 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, 12706, __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, 12706, __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, 12704, __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, 12704, __pyx_L1_error)
 12707: 
+12708:     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;
}
 12709:         """
 12710:         Refuse a call that arrives while `row()` is part-way through
 12711:         assembling a row on this lease's buffer.
 12712: 
 12713:         A column value whose conversion runs Python code re-enters here on
 12714:         the same thread, and `self._lock` is re-entrant, so the lock alone
 12715:         lets it through. Flushing a half-written row cannot succeed, and
 12716:         returning the lease to the pool would free the buffer the row is
 12717:         still writing into.
 12718:         """
+12719:         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)) {
/* … */
  }
+12720:             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, 12720, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+12721:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12721, __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, 12721, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+12722:                 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, 12722, __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, 12722, __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, 12720, __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, 12720, __pyx_L1_error)
 12723:                 "written. `row()` is part-way through assembling a row "
 12724:                 "and something it called has come back into this sender, "
 12725:                 "most likely a column value whose conversion runs Python "
 12726:                 "code.")
 12727: 
+12728:     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;
}
 12729:         """Count one of this lease's own calls, on the lease and on the
 12730:         handle it was borrowed from. Called with `self._lock` held.
 12731: 
 12732:         Every public method that writes, flushes, waits or closes counts,
 12733:         whether or not it looks like it runs the caller's Python: the list
 12734:         of methods that do has been wrong once per review round, and a
 12735:         counter raised on all of them cannot be short one entry. The six
 12736:         that only read state -- `__enter__`, `__len__`, `poll_error()`,
 12737:         `error_events_dropped()`, `published_fsn()` and `acked_fsn()` --
 12738:         run none of the caller's Python and do not count. The returned
 12739:         handle is the one to pass back to `_exit_call_locked`, because the
 12740:         lease drops its own reference when it is released.
 12741: 
 12742:         The two counts answer different questions. The handle's is
 12743:         per-thread and shared by every lease and call on that handle, so
 12744:         `QuestDB.close()` can see that the frame it would wait for is its
 12745:         own caller. The lease's own is per-lease, so `close()` can refuse
 12746:         to return the sender to the pool from inside a call still using
 12747:         it without refusing to close some unrelated lease.
 12748:         """
+12749:         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;
+12750:         self._call_depth += 1
  __pyx_v_self->_call_depth = (__pyx_v_self->_call_depth + 1);
+12751:         if handle is not None:
  __pyx_t_2 = (((PyObject *)__pyx_v_handle) != Py_None);
  if (__pyx_t_2) {
/* … */
  }
+12752:             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:;
    }
+12753:                 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, 12753, __pyx_L4_error)
+12754:             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, 12754, __pyx_L6_except_error)
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_7);
+12755:                 self._call_depth -= 1
        __pyx_v_self->_call_depth = (__pyx_v_self->_call_depth - 1);
+12756:                 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, 12756, __pyx_L6_except_error)
      }
+12757:         return handle
  {
    struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF((PyObject *)__pyx_v_handle);
      __pyx_r = __pyx_v_handle;
    }
    __Pyx_XDECREF((PyObject *)__pyx_temp);
  }
  goto __pyx_L0;
 12758: 
+12759:     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:;

}
 12760:         # The handle's thread-local update can raise; this lease is no longer
 12761:         # in its call either way, so unwind its guard first.
+12762:         self._call_depth -= 1
  __pyx_v_self->_call_depth = (__pyx_v_self->_call_depth - 1);
+12763:         if handle is not None:
  __pyx_t_1 = (((PyObject *)__pyx_v_handle) != Py_None);
  if (__pyx_t_1) {
/* … */
  }
+12764:             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, 12764, __pyx_L1_error)
 12765: 
+12766:     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;
}
 12767:         """
 12768:         Refuse a call that would end this lease while one of its own
 12769:         calls is still running.
 12770: 
 12771:         `dataframe()` runs the caller's Python for the whole plan build --
 12772:         reading `attrs`, sniffing object cells, pulling
 12773:         `__arrow_c_stream__` -- and `row()` runs it for every column
 12774:         value whose conversion is not pure C. That code can come back
 12775:         here. Returning the sender to the pool from inside it leaves the
 12776:         rest of the call working against a lease that is already closed,
 12777:         so every later use in the enclosing block raises.
 12778:         """
+12779:         if self._call_depth != 0:
  __pyx_t_1 = (__pyx_v_self->_call_depth != 0);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+12780:             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, 12780, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+12781:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12781, __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, 12781, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+12782:                 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, 12782, __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, 12782, __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, 12780, __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, 12780, __pyx_L1_error)
 12783:                 'sender lease. It would return the sender to the pool '
 12784:                 'while that call is still using it. Close the lease '
 12785:                 'after the call returns.')
 12786: 
+12787:     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;
}
+12788:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+12789:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+12790:         cdef bint ok = False
  __pyx_v_ok = 0;
+12791:         _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+12792:         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));
 12793:             self._qwp,
 12794:             qwpws_ack_level.qwpws_ack_level_ok,
 12795:             timeout_millis,
 12796:             &err)
+12797:         _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+12798:         if not ok:
  __pyx_t_1 = (!__pyx_v_ok);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+12799:             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, 12799, __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, 12799, __pyx_L1_error)
 12800: 
+12801:     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;
}
+12802:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+12803:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+12804:         cdef bint ok = False
  __pyx_v_ok = 0;
+12805:         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, 12805, __pyx_L1_error)

+12806:         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, 12806, __pyx_L1_error)

+12807:         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) {
/* … */
  }
+12808:             self._batch_started_ms = 0
    __pyx_v_self->_batch_started_ms = 0;
+12809:             if wait:
    if (__pyx_v_wait) {
/* … */
    }
+12810:                 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, 12810, __pyx_L1_error)

+12811:             return 0
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+12812:         _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+12813:         if wait:
  if (__pyx_v_wait) {
/* … */
    goto __pyx_L5;
  }
+12814:             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));
 12815:                 self._qwp,
 12816:                 self._buffer._impl,
 12817:                 qwpws_ack_level.qwpws_ack_level_ok,
 12818:                 &err)
 12819:         else:
+12820:             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:;
 12821:                 self._qwp, self._buffer._impl, &err)
+12822:         _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+12823:         if not ok:
  __pyx_t_2 = (!__pyx_v_ok);

  if (unlikely(__pyx_t_2)) {
/* … */
  }
+12824:             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, 12824, __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, 12824, __pyx_L1_error)
+12825:         qdb_pystr_buf_clear(self._buffer._b)
  qdb_pystr_buf_clear(__pyx_v_self->_buffer->_b);
+12826:         self._batch_started_ms = 0
  __pyx_v_self->_batch_started_ms = 0;
 12827: 
+12828:     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();
}
 12829:         """Hand the borrowed sender back to the pool.
 12830: 
 12831:         Every refusal belongs to `close()`, which runs them before it
 12832:         reaches here. This is also the `__dealloc__` path, where the
 12833:         function is `except *` and cannot report anything: a raise here
 12834:         would skip `questdb_db_return_sender` below, leaving the pool a
 12835:         sender short and `QuestDB.close()` waiting on a lease that can
 12836:         never come back. `PooledReader._release_locked` is the same
 12837:         shape.
 12838:         """
+12839:         cdef qwp_sender* sender = self._qwp
  __pyx_t_1 = __pyx_v_self->_qwp;

  __pyx_v_sender = __pyx_t_1;
+12840:         cdef questdb_db* db = self._db
  __pyx_t_2 = __pyx_v_self->_db;

  __pyx_v_db = __pyx_t_2;
+12841:         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;
+12842:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+12843:         if sender == NULL:
  __pyx_t_4 = (__pyx_v_sender == NULL);

  if (__pyx_t_4) {
/* … */
  }
+12844:             return
    {
    }
    goto __pyx_L0;
+12845:         self._qwp = NULL
  __pyx_v_self->_qwp = NULL;
+12846:         self._db = NULL
  __pyx_v_self->_db = NULL;
+12847:         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);
+12848:         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);
+12849:         _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+12850:         questdb_db_return_sender(db, sender)
  questdb_db_return_sender(__pyx_v_db, __pyx_v_sender);
+12851:         _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+12852:         if handle is not None:
  __pyx_t_4 = (((PyObject *)__pyx_v_handle) != Py_None);
  if (__pyx_t_4) {
/* … */
  }
+12853:             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, 12853, __pyx_L1_error)
 12854: 
+12855:     def __enter__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_3__enter__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_10);
  __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[158])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12855, __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, 12855, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+12856:         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, 12856, __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, 12856, __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, 12856, __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.PooledSender.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 12856, __pyx_L9_except_error)
          __Pyx_XGOTREF(__pyx_t_2);
          __Pyx_XGOTREF(__pyx_t_4);
          __Pyx_XGOTREF(__pyx_t_3);
          {
            PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_3};
            __pyx_t_10 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 12856, __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, 12856, __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, 12856, __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, 12856, __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[6], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12856, __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:;
  }
+12857:             self._check_open('__enter__')
          __pyx_t_9 = ((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_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12857, __pyx_L7_error)

+12858:         return self
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF((PyObject *)__pyx_v_self);
      __pyx_r = ((PyObject *)__pyx_v_self);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 12859: 
+12860:     def row(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_5row(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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\047s 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\047s 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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 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, "row", 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_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, 12860, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
/* … */
  __pyx_t_19 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 12860, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_table_name, __pyx_mstate_global->__pyx_n_u_str_2) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_Optional_str) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_columns, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_Union_None_boo_2) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_ServerTimestampType_Timest) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error)
  __pyx_t_20 = __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[159])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 12860, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20);
  #endif
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_20, __pyx_t_17);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_20, __pyx_t_19);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_row_2, __pyx_t_20) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 12861:             self,
 12862:             table_name: str,
 12863:             *,
+12864:             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, 12860, __pyx_L1_error)
 12865:             columns: Optional[Dict[
 12866:                 str,
 12867:                 Union[None, bool, int, float, str, TimestampMicros,
 12868:                       TimestampNanos, datetime.datetime, numpy.ndarray,
 12869:                       Decimal, uuid.UUID, ipaddress.IPv4Address, bytes,
 12870:                       bytearray, memoryview, Char, DateMillis, Long256,
+12871:                       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, 12860, __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, 12860, __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, 12860, __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, 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.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, 12862, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_symbols), (&PyDict_Type), 1, "symbols", 2))) __PYX_ERR(0, 12864, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_columns), (&PyDict_Type), 1, "columns", 2))) __PYX_ERR(0, 12865, __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, 12860, __pyx_L1_error)
 12872:             at: Union[ServerTimestampType, TimestampNanos,
 12873:                       datetime.datetime]):
 12874:         """
 12875:         Append one row to this sender's QWP buffer.
 12876: 
 12877:         When pooled auto-flush is enabled on the :class:`QuestDB` handle,
 12878:         completing a row that breaches a configured row, byte, or interval
 12879:         threshold publishes the buffer without waiting for an acknowledgement.
 12880:         A buffer whose size estimate reaches the connection's frame cap is
 12881:         published too, even with ``auto_flush_bytes=off``. Every published
 12882:         frame fits the frame cap: when the whole buffer does not, or its
 12883:         size estimate is past the cap, the rows buffered before this one go
 12884:         out as a frame of their own and this row starts the next batch, so
 12885:         one call publishes at most two frames. Re-adding the row converts its
 12886:         values a second time.
 12887: 
 12888:         Whatever this method raises, the row was not added.
 12889:         :class:`QuestDBErrorCode.BatchTooLarge` means either it does not fit
 12890:         in a frame on its own, or the rows buffered before it do not fit
 12891:         even without it, which can happen after the frame cap shrinks, for
 12892:         example on reconnect; those rows are then discarded, and the error
 12893:         says how many. Any other error raised by a publish propagates from
 12894:         this method and leaves the rows buffered before it in place.
 12895: 
 12896:         See :func:`Buffer.row <questdb.ingress.Buffer.row>` for supported
 12897:         column types, protocol restrictions, server requirements, and
 12898:         ``NULL``-sentinel behavior.
 12899:         """
 12900:         cdef Buffer buf
 12901:         cdef QuestDB handle
+12902:         if at is None:
  __pyx_t_1 = (__pyx_v_at == Py_None);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+12903:             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, 12903, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+12904:                 QuestDBErrorCode.InvalidTimestamp,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12904, __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, 12904, __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, 12903, __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, 12903, __pyx_L1_error)
 12905:                 "`at` must be of type TimestampNanos, datetime, or "
 12906:                 "ServerTimestamp")
+12907:         with self._lock:
  /*with:*/ {
    __pyx_t_8 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12907, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __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, 12907, __pyx_L4_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, 12907, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        goto __pyx_L13_try_end;
        __pyx_L8_error:;
        __Pyx_XDECREF(__pyx_t_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.PooledSender.row", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_6, &__pyx_t_4) < 0) __PYX_ERR(0, 12907, __pyx_L10_except_error)
          __Pyx_XGOTREF(__pyx_t_2);
          __Pyx_XGOTREF(__pyx_t_6);
          __Pyx_XGOTREF(__pyx_t_4);
          {
            PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_6, __pyx_t_4};
            __pyx_t_3 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12907, __pyx_L10_except_error)
            __Pyx_GOTREF(__pyx_t_3);
          }
          __pyx_t_21 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_3, NULL);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 12907, __pyx_L10_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, 12907, __pyx_L10_except_error)
          __pyx_t_22 = (!__pyx_t_1);


          if (unlikely(__pyx_t_22)) {

            __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, 12907, __pyx_L10_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_L9_exception_handled;
        }
        __pyx_L10_except_error:;
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
        goto __pyx_L1_error;
        __pyx_L9_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
        __pyx_L13_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_8) {
          __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_mstate_global->__pyx_tuple[6], NULL);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 12907, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        }
        goto __pyx_L7;
      }
      __pyx_L7:;
    }
    goto __pyx_L22;
    __pyx_L4_error:;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    goto __pyx_L1_error;
    __pyx_L22:;
  }
+12908:             self._check_open('row')
          __pyx_t_12 = ((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_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12908, __pyx_L8_error)

+12909:             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, 12909, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_2);
          __pyx_t_2 = 0;
+12910:             try:
          /*try:*/ {
 12911:                 # The lease holds the only reference to the buffer, and a
 12912:                 # column value whose conversion runs Python code can reach
 12913:                 # back in here. A strong local reference keeps the buffer
 12914:                 # alive for the whole row, including its cleanup.
+12915:                 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;
+12916:                 _qwp_row_append(
            __pyx_t_12 = __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, ((PyObject*)__pyx_v_symbols), __pyx_v_columns, __pyx_v_at); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12916, __pyx_L15_error)

          }
 12917:                     None, self, buf, table_name, symbols, columns, at)
 12918:             finally:
+12919:                 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, 12919, __pyx_L8_error)
              goto __pyx_L16;
            }
            __pyx_L15_error:;
            /*exception exit:*/{
              __Pyx_PyThreadState_declare
              __Pyx_PyThreadState_assign
              __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 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_19, &__pyx_t_20, &__pyx_t_21);
              if ( unlikely(__Pyx_GetException(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18) < 0)) __Pyx_ErrFetch(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18);
              __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_XGOTREF(__pyx_t_21);
              __pyx_t_13 = __pyx_lineno; __pyx_t_14 = __pyx_clineno; __pyx_t_15 = __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, 12919, __pyx_L18_error)
              }
              __Pyx_XGIVEREF(__pyx_t_19);
              __Pyx_XGIVEREF(__pyx_t_20);
              __Pyx_XGIVEREF(__pyx_t_21);
              __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_20, __pyx_t_21);
              __Pyx_XGIVEREF(__pyx_t_16);
              __Pyx_XGIVEREF(__pyx_t_17);
              __Pyx_XGIVEREF(__pyx_t_18);
              __Pyx_ErrRestore(__pyx_t_16, __pyx_t_17, __pyx_t_18);
              __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0;
              __pyx_lineno = __pyx_t_13; __pyx_clineno = __pyx_t_14; __pyx_filename = __pyx_t_15;
              goto __pyx_L8_error;
              __pyx_L18_error:;
              __Pyx_XGIVEREF(__pyx_t_19);
              __Pyx_XGIVEREF(__pyx_t_20);
              __Pyx_XGIVEREF(__pyx_t_21);
              __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_20, __pyx_t_21);
              __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_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0;
              goto __pyx_L8_error;
            }
            __pyx_L16:;
          }
+12920:         return self
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF((PyObject *)__pyx_v_self);
      __pyx_r = ((PyObject *)__pyx_v_self);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 12921: 
+12922:     def dataframe(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_7dataframe(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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\047s 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\047s own path, it is refused once\n        :meth:`QuestDB.close` has started, as :meth:`QuestDB.dataframe`\n        is, even though this lease\047s 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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 12922, __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, 12922, __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, 12922, __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_4);
  __Pyx_XDECREF(__pyx_t_19);
  __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_20 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 12922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
/* … */
  __pyx_t_19 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 12922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_table_name, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 12922, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_table_name_col, __pyx_mstate_global->__pyx_kp_u_Union_None_int_str) < (0)) __PYX_ERR(0, 12922, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Union_str_bool_List_int_List_str) < (0)) __PYX_ERR(0, 12922, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_ServerTimestampType_int_st) < (0)) __PYX_ERR(0, 12922, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_max_rows_per_batch, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 12922, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_schema_overrides_2, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_object) < (0)) __PYX_ERR(0, 12922, __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[160])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12922, __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_20);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_17, __pyx_t_19);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 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, 12922, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 12923:             self,
 12924:             df,
 12925:             *,
+12926:             table_name: Optional[str] = None,
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_table_name, Py_None) < (0)) __PYX_ERR(0, 12922, __pyx_L1_error)
+12927:             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_20, __pyx_mstate_global->__pyx_n_u_table_name_col, Py_None) < (0)) __PYX_ERR(0, 12922, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_n_u_auto) < (0)) __PYX_ERR(0, 12922, __pyx_L1_error)
 12928:             symbols: Union[str, bool, List[int], List[str]] = 'auto',
 12929:             at: Union[ServerTimestampType, int, str, TimestampNanos,
 12930:                       datetime.datetime],
+12931:             max_rows_per_batch: int = DEFAULT_MAX_CHUNK_ROWS,
  __Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_DEFAULT_MAX_CHUNK_ROWS); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 12931, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_20, NULL, 1) < (0)) __PYX_ERR(0, 12931, __pyx_L1_error)
  __pyx_mstate_global->__pyx_k__40 = ((PyObject*)__pyx_t_20);
  __Pyx_GIVEREF(__pyx_t_20);
  __pyx_t_20 = 0;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_DEFAULT_MAX_CHUNK_ROWS); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 12931, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_19, NULL, 1) < (0)) __PYX_ERR(0, 12931, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_max_rows_per_batch, __pyx_t_19) < (0)) __PYX_ERR(0, 12922, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+12932:             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, 12922, __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, 12922, __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, 12922, __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, 12931, __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, 12922, __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, 12926, __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, 12931, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema_overrides), (&PyDict_Type), 1, "schema_overrides", 2))) __PYX_ERR(0, 12932, __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_20, __pyx_mstate_global->__pyx_n_u_schema_overrides_2, Py_None) < (0)) __PYX_ERR(0, 12922, __pyx_L1_error)
 12933:         """
 12934:         Bulk-load a whole DataFrame over a direct columnar connection
 12935:         borrowed from the pool for the duration of this call.
 12936: 
 12937:         Prefer :meth:`QuestDB.dataframe` — this convenience forwards to the
 12938:         same path and is **not** part of this sender's row stream: the frame
 12939:         is committed over its own connection and becomes visible to SQL
 12940:         immediately, without waiting for rows appended to this sender with
 12941:         :meth:`row` to drain. There is therefore **no ordering relationship**
 12942:         between ``dataframe()`` and buffered rows — ``dataframe()`` does not
 12943:         flush them; publish those with :meth:`flush`.
 12944: 
 12945:         Being the handle's own path, it is refused once
 12946:         :meth:`QuestDB.close` has started, as :meth:`QuestDB.dataframe`
 12947:         is, even though this lease's other methods keep working until
 12948:         it is closed. A load already running when ``close()`` starts
 12949:         finishes.
 12950: 
 12951:         Arguments mirror :meth:`QuestDB.dataframe`.
 12952:         """
 12953:         cdef QuestDB handle
+12954:         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, 12954, __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, 12954, __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, 12954, __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.PooledSender.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4) < 0) __PYX_ERR(0, 12954, __pyx_L9_except_error)
          __Pyx_XGOTREF(__pyx_t_2);
          __Pyx_XGOTREF(__pyx_t_3);
          __Pyx_XGOTREF(__pyx_t_4);
          {
            PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_3, __pyx_t_4};
            __pyx_t_19 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 12954, __pyx_L9_except_error)
            __Pyx_GOTREF(__pyx_t_19);
          }
          __pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_19, NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
          if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 12954, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_20 = __Pyx_PyObject_IsTrue(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          if (__pyx_t_20 < (0)) __PYX_ERR(0, 12954, __pyx_L9_except_error)
          __pyx_t_21 = (!__pyx_t_20);


          if (unlikely(__pyx_t_21)) {

            __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, 12954, __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_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[6], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12954, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L6:;
    }
    goto __pyx_L21;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L1_error;
    __pyx_L21:;
  }
+12955:             self._check_open('dataframe')
          __pyx_t_9 = ((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_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12955, __pyx_L7_error)

+12956:             self._check_not_in_row('dataframe')
          __pyx_t_9 = ((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_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12956, __pyx_L7_error)

+12957:             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, 12957, __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;
 12958:             # The lock is held for the whole load, as in every method of a
 12959:             # lease, which one thread uses at a time. That keeps the call
 12960:             # count visible only to the thread running the call: a
 12961:             # `close()` from the caller's own Python mid-plan is refused as
 12962:             # re-entry, and one from another thread waits for the load.
+12963:             try:
          /*try:*/ {
+12964:                 handle.dataframe(
            __pyx_t_4 = ((PyObject *)__pyx_v_handle);
            __Pyx_INCREF(__pyx_t_4);
/* … */
  {
    PyObject* __pyx_temp[6] = {__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_max_rows_per_batch, __pyx_mstate_global->__pyx_n_u_schema_overrides_2};
    __pyx_mstate_global->__pyx_tuple[38] = __Pyx_PyTuple_FromArray(__pyx_temp, 6); if (unlikely(!__pyx_mstate_global->__pyx_tuple[38])) __PYX_ERR(0, 12964, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[38]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[38]);
 12965:                     df,
 12966:                     table_name=table_name,
 12967:                     table_name_col=table_name_col,
 12968:                     symbols=symbols,
 12969:                     at=at,
 12970:                     max_rows_per_batch=max_rows_per_batch,
+12971:                     schema_overrides=schema_overrides)
            __pyx_t_5 = 0;
            {
              PyObject *__pyx_callargs[8] = {__pyx_t_4, __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 CYTHON_VECTORCALL
              __pyx_t_3 = __pyx_mstate_global->__pyx_tuple[38];
              if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12964, __pyx_L14_error)
              __Pyx_INCREF(__pyx_t_3);
              #else
              {
                PyObject *__pyx_temp[6] = {__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_max_rows_per_batch, __pyx_mstate_global->__pyx_n_u_schema_overrides_2};
                __pyx_t_3 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 6);
                if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12964, __pyx_L14_error)
                __Pyx_GOTREF(__pyx_t_3);
              }
              #endif
              __pyx_t_2 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_dataframe, __pyx_callargs+__pyx_t_5, (2-__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, 12964, __pyx_L14_error)
              __Pyx_GOTREF(__pyx_t_2);
            }
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          }
 12972:             finally:
+12973:                 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, 12973, __pyx_L7_error)
              goto __pyx_L15;
            }
            __pyx_L14_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;
              {
                ((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, 12973, __pyx_L17_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_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_L7_error;
              __pyx_L17_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_L7_error;
            }
            __pyx_L15:;
          }
+12974:         return self
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF((PyObject *)__pyx_v_self);
      __pyx_r = ((PyObject *)__pyx_v_self);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 12975: 
+12976:     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_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_10);
  __Pyx_AddTraceback("questdb._client.PooledSender.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 12977:         """Number of buffered (unpublished) rows."""
+12978:         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, 12978, __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, 12978, __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, 12978, __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.PooledSender.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 12978, __pyx_L9_except_error)
          __Pyx_XGOTREF(__pyx_t_2);
          __Pyx_XGOTREF(__pyx_t_4);
          __Pyx_XGOTREF(__pyx_t_3);
          {
            PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_3};
            __pyx_t_10 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 12978, __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, 12978, __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, 12978, __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, 12978, __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_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[6], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12978, __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_14 = __pyx_r;
        if (__pyx_t_1) {
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12978, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        __pyx_r = __pyx_t_14;
        goto __pyx_L0;
      }
      __pyx_L6:;
    }
    goto __pyx_L16;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L1_error;
    __pyx_L16:;
  }
+12979:             self._check_open('__len__')
          __pyx_t_9 = ((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_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12979, __pyx_L7_error)

+12980:             return line_sender_buffer_row_count(self._buffer._impl)
          {

            __pyx_r = line_sender_buffer_row_count(__pyx_v_self->_buffer->_impl);
          }
          goto __pyx_L11_try_return;
 12981: 
+12982:     def flush(self, *, bint wait=False):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_11flush(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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\047s 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\047s ``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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 12982, __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, 12982, __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, 12982, __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, 12982, __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_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_19);
  __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, 12982, __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, 12982, __pyx_L1_error)
  __pyx_t_19 = __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[161])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 12982, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_19, __pyx_t_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_19) < (0)) __PYX_ERR(0, 12982, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 12983:         """
 12984:         Publish and clear buffered rows.
 12985: 
 12986:         By default this returns after local store-and-forward acceptance.
 12987:         Pass ``wait=True`` to wait for the server's OK acknowledgement of
 12988:         everything published through this lease. The wait is a pure ack
 12989:         barrier: only a terminal connection failure raises. Server
 12990:         rejections are delivered to the pool's ``error_handler``
 12991:         (default: the ``questdb`` logger) instead; retriable ones are
 12992:         replayed by the store-and-forward queue.
 12993:         """
 12994:         cdef QuestDB handle
+12995:         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, 12995, __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, 12995, __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, 12995, __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.PooledSender.flush", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 12995, __pyx_L9_except_error)
          __Pyx_XGOTREF(__pyx_t_2);
          __Pyx_XGOTREF(__pyx_t_4);
          __Pyx_XGOTREF(__pyx_t_3);
          {
            PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_3};
            __pyx_t_19 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 12995, __pyx_L9_except_error)
            __Pyx_GOTREF(__pyx_t_19);
          }
          __pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_19, NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
          if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 12995, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_20 = __Pyx_PyObject_IsTrue(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          if (__pyx_t_20 < (0)) __PYX_ERR(0, 12995, __pyx_L9_except_error)
          __pyx_t_21 = (!__pyx_t_20);


          if (unlikely(__pyx_t_21)) {

            __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, 12995, __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[6], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12995, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L6:;
    }
    goto __pyx_L21;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L1_error;
    __pyx_L21:;
  }
+12996:             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, 12996, __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;
+12997:             try:
          /*try:*/ {
+12998:                 self._flush_locked(wait)
            __pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_flush_locked(__pyx_v_self, __pyx_v_wait); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12998, __pyx_L14_error)

          }
 12999:             finally:
+13000:                 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, 13000, __pyx_L7_error)
              goto __pyx_L15;
            }
            __pyx_L14_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;
              {
                ((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, 13000, __pyx_L17_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_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_L7_error;
              __pyx_L17_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_L7_error;
            }
            __pyx_L15:;
          }
+13001:         return self
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF((PyObject *)__pyx_v_self);
      __pyx_r = ((PyObject *)__pyx_v_self);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 13002: 
+13003:     def wait(self, timeout_millis=0):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_13wait(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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\047s\n        ``error_handler`` (default: the ``questdb`` logger) instead.\n\n        ``timeout_millis`` is a no-progress timeout; ``0`` waits indefinitely.\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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 13003, __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, 13003, __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, 13003, __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, 13003, __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, 13003, __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_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_23);
  __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_19 = __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[162])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13003, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_19, __pyx_mstate_global->__pyx_tuple[8]);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_wait, __pyx_t_19) < (0)) __PYX_ERR(0, 13003, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 13004:         """
 13005:         Wait for everything published through this lease to receive an OK
 13006:         ack; returns immediately if this lease published nothing.
 13007: 
 13008:         The wait is a pure ack barrier: only a terminal connection failure
 13009:         raises. Server rejections are delivered to the pool's
 13010:         ``error_handler`` (default: the ``questdb`` logger) instead.
 13011: 
 13012:         ``timeout_millis`` is a no-progress timeout; ``0`` waits indefinitely.
 13013:         """
+13014:         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)) {
/* … */
  }
+13015:             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, 13015, __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, 13015, __pyx_L1_error)
+13016:         if timeout_millis < 0:
  __pyx_t_1 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_timeout_millis, __pyx_mstate_global->__pyx_int_0, Py_LT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 13016, __pyx_L1_error)
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+13017:             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, 13017, __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, 13017, __pyx_L1_error)
 13018:         cdef QuestDB handle
+13019:         with self._lock:
  /*with:*/ {
    __pyx_t_7 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13019, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_5 = 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, 13019, __pyx_L7_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_6 = 1;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_8);
      assert(__pyx_t_5);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
      __pyx_t_6 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13019, __pyx_L7_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        goto __pyx_L16_try_end;
        __pyx_L11_error:;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("questdb._client.PooledSender.wait", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_8, &__pyx_t_5) < 0) __PYX_ERR(0, 13019, __pyx_L13_except_error)
          __Pyx_XGOTREF(__pyx_t_4);
          __Pyx_XGOTREF(__pyx_t_8);
          __Pyx_XGOTREF(__pyx_t_5);
          {
            PyObject* __pyx_temp[3] = {__pyx_t_4, __pyx_t_8, __pyx_t_5};
            __pyx_t_23 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 13019, __pyx_L13_except_error)
            __Pyx_GOTREF(__pyx_t_23);
          }
          __pyx_t_22 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_23, NULL);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
          if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 13019, __pyx_L13_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, 13019, __pyx_L13_except_error)
          __pyx_t_3 = (!__pyx_t_1);


          if (unlikely(__pyx_t_3)) {

            __Pyx_GIVEREF(__pyx_t_4);
            __Pyx_GIVEREF(__pyx_t_8);
            __Pyx_XGIVEREF(__pyx_t_5);
            __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_8, __pyx_t_5);
            __pyx_t_4 = 0;  __pyx_t_8 = 0;  __pyx_t_5 = 0; 
            __PYX_ERR(0, 13019, __pyx_L13_except_error)
          }
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          goto __pyx_L12_exception_handled;
        }
        __pyx_L13_except_error:;
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
        goto __pyx_L1_error;
        __pyx_L12_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_L16_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_7) {
          __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_mstate_global->__pyx_tuple[6], NULL);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 13019, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        }
        goto __pyx_L10;
      }
      __pyx_L10:;
    }
    goto __pyx_L25;
    __pyx_L7_error:;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    goto __pyx_L1_error;
    __pyx_L25:;
  }
+13020:             self._check_open('wait')
          __pyx_t_12 = ((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_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13020, __pyx_L11_error)

+13021:             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, 13021, __pyx_L11_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_4);
          __pyx_t_4 = 0;
+13022:             try:
          /*try:*/ {
+13023:                 self._wait_locked(<uint64_t>timeout_millis)
            __pyx_t_13 = __Pyx_PyLong_As_uint64_t(__pyx_v_timeout_millis); if (unlikely((__pyx_t_13 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 13023, __pyx_L18_error)
            __pyx_t_12 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_wait_locked(__pyx_v_self, ((uint64_t)__pyx_t_13)); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13023, __pyx_L18_error)


          }
 13024:             finally:
+13025:                 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, 13025, __pyx_L11_error)
              goto __pyx_L19;
            }
            __pyx_L18_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_4); __pyx_t_4 = 0;
              __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
              __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 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_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13025, __pyx_L21_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_L11_error;
              __pyx_L21_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_L11_error;
            }
            __pyx_L19:;
          }
+13026:         return self
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF((PyObject *)__pyx_v_self);
      __pyx_r = ((PyObject *)__pyx_v_self);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 13027: 
+13028:     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_VECTORCALL
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\047s 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_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_20);
  __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_19 = __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[163])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13028, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_flush_and_get_fsn, __pyx_t_19) < (0)) __PYX_ERR(0, 13028, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 13029:         """
 13030:         Publish and clear buffered rows, returning the frame sequence
 13031:         number (FSN) of the published frame, or ``None`` if the buffer was
 13032:         empty.
 13033: 
 13034:         FSNs are watermarks of the lease's pooled connection: use them for
 13035:         progress tracking while this lease is held (see
 13036:         :meth:`await_acked_fsn`); they are not portable receipts across
 13037:         leases, which may borrow different connections. Configure
 13038:         ``auto_flush=off`` when this call must publish and identify one whole
 13039:         application batch; auto-flush may already have published and cleared
 13040:         some or all buffered rows.
 13041:         """
+13042:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+13043:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
 13044:         cdef line_sender_qwpws_fsn fsn
+13045:         cdef bint ok = False
  __pyx_v_ok = 0;
 13046:         cdef QuestDB handle
+13047:         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, 13047, __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, 13047, __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, 13047, __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.PooledSender.flush_and_get_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 13047, __pyx_L9_except_error)
          __Pyx_XGOTREF(__pyx_t_2);
          __Pyx_XGOTREF(__pyx_t_4);
          __Pyx_XGOTREF(__pyx_t_3);
          {
            PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_3};
            __pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 13047, __pyx_L9_except_error)
            __Pyx_GOTREF(__pyx_t_20);
          }
          __pyx_t_19 = __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_19)) __PYX_ERR(0, 13047, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_19);
          __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_19);
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
          if (__pyx_t_10 < (0)) __PYX_ERR(0, 13047, __pyx_L9_except_error)
          __pyx_t_21 = (!__pyx_t_10);


          if (unlikely(__pyx_t_21)) {

            __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, 13047, __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[6], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13047, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L6:;
    }
    goto __pyx_L22;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L1_error;
    __pyx_L22:;
  }
+13048:             self._check_open('flush_and_get_fsn')
          __pyx_t_9 = ((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_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13048, __pyx_L7_error)

+13049:             self._check_not_in_row('flush_and_get_fsn')
          __pyx_t_9 = ((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_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13049, __pyx_L7_error)

+13050:             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, 13050, __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;
+13051:             try:
          /*try:*/ {
+13052:                 _ensure_doesnt_have_gil(&gs)
            (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+13053:                 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));
 13054:                     self._qwp, self._buffer._impl, &fsn, &err)
+13055:                 _ensure_has_gil(&gs)
            __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+13056:                 if not ok:
            __pyx_t_10 = (!__pyx_v_ok);

            if (unlikely(__pyx_t_10)) {
/* … */
            }
+13057:                     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, 13057, __pyx_L14_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, 13057, __pyx_L14_error)
+13058:                 qdb_pystr_buf_clear(self._buffer._b)
            qdb_pystr_buf_clear(__pyx_v_self->_buffer->_b);
+13059:                 self._batch_started_ms = 0
            __pyx_v_self->_batch_started_ms = 0;
          }
 13060:             finally:
+13061:                 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, 13061, __pyx_L7_error)
              goto __pyx_L15;
            }
            __pyx_L14_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_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_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, 13061, __pyx_L18_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_L7_error;
              __pyx_L18_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_L7_error;
            }
            __pyx_L15:;
          }
+13062:         return fsn.value if fsn.has_value else None
  __pyx_t_21 = (__pyx_v_fsn.has_value != 0);

  if (__pyx_t_21) {
    __pyx_t_4 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13062, __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;
  }

  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_3;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_3 = 0;
  goto __pyx_L0;
 13063: 
+13064:     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_VECTORCALL
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\047s 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_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_20);
  __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_19 = __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[164])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13064, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_flush_and_keep_and_get_fsn, __pyx_t_19) < (0)) __PYX_ERR(0, 13064, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 13065:         """
 13066:         Publish buffered rows without clearing the buffer, returning the
 13067:         published frame's FSN, or ``None`` if the buffer was empty.
 13068:         """
+13069:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+13070:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
 13071:         cdef line_sender_qwpws_fsn fsn
+13072:         cdef bint ok = False
  __pyx_v_ok = 0;
 13073:         cdef QuestDB handle
+13074:         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, 13074, __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, 13074, __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, 13074, __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.PooledSender.flush_and_keep_and_get_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 13074, __pyx_L9_except_error)
          __Pyx_XGOTREF(__pyx_t_2);
          __Pyx_XGOTREF(__pyx_t_4);
          __Pyx_XGOTREF(__pyx_t_3);
          {
            PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_3};
            __pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 13074, __pyx_L9_except_error)
            __Pyx_GOTREF(__pyx_t_20);
          }
          __pyx_t_19 = __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_19)) __PYX_ERR(0, 13074, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_19);
          __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_19);
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
          if (__pyx_t_10 < (0)) __PYX_ERR(0, 13074, __pyx_L9_except_error)
          __pyx_t_21 = (!__pyx_t_10);


          if (unlikely(__pyx_t_21)) {

            __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, 13074, __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[6], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13074, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L6:;
    }
    goto __pyx_L23;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L1_error;
    __pyx_L23:;
  }
+13075:             self._check_open('flush_and_keep_and_get_fsn')
          __pyx_t_9 = ((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_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13075, __pyx_L7_error)

+13076:             self._check_not_in_row('flush_and_keep_and_get_fsn')
          __pyx_t_9 = ((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_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13076, __pyx_L7_error)

+13077:             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, 13077, __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;
+13078:             try:
          /*try:*/ {
+13079:                 _ensure_doesnt_have_gil(&gs)
            (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+13080:                 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));
 13081:                     self._qwp, self._buffer._impl, &fsn, &err)
+13082:                 _ensure_has_gil(&gs)
            __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+13083:                 if not ok:
            __pyx_t_10 = (!__pyx_v_ok);

            if (unlikely(__pyx_t_10)) {
/* … */
            }
+13084:                     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, 13084, __pyx_L14_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, 13084, __pyx_L14_error)
+13085:                 if fsn.has_value:
            __pyx_t_10 = (__pyx_v_fsn.has_value != 0);

            if (__pyx_t_10) {
/* … */
            }
          }
+13086:                     self._batch_started_ms = (
              __pyx_v_self->_batch_started_ms = __Pyx_div_int64_t(line_sender_now_micros(), 0x3E8, 1);
 13087:                         line_sender_now_micros() // 1000)
 13088:             finally:
+13089:                 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, 13089, __pyx_L7_error)
              goto __pyx_L15;
            }
            __pyx_L14_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_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_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, 13089, __pyx_L19_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_L7_error;
              __pyx_L19_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_L7_error;
            }
            __pyx_L15:;
          }
+13090:         return fsn.value if fsn.has_value else None
  __pyx_t_21 = (__pyx_v_fsn.has_value != 0);

  if (__pyx_t_21) {
    __pyx_t_4 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13090, __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;
  }

  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_3;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_3 = 0;
  goto __pyx_L0;
 13091: 
+13092:     def poll_error(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_19poll_error(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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\047s\n        connection since this lease was borrowed, as a\n        :class:`SenderError`, or ``None`` when none is pending.\n\n        The pool\047s ``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_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_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_11);
  __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_19 = __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[165])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13092, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_poll_error, __pyx_t_19) < (0)) __PYX_ERR(0, 13092, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 13093:         """
 13094:         Poll the next server-rejection diagnostic recorded on the lease's
 13095:         connection since this lease was borrowed, as a
 13096:         :class:`SenderError`, or ``None`` when none is pending.
 13097: 
 13098:         The pool's ``error_handler`` independently receives every rejection
 13099:         the moment it is recorded; polling here is a per-lease pull
 13100:         alternative for code that wants diagnostics inline.
 13101:         """
+13102:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+13103:         cdef line_sender_qwpws_error* c_error = NULL
  __pyx_v_c_error = NULL;
 13104:         cdef line_sender_qwpws_error_view view
+13105:         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, 13105, __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, 13105, __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, 13105, __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_11); __pyx_t_11 = 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;
        /*except:*/ {
          __Pyx_AddTraceback("questdb._client.PooledSender.poll_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_11) < 0) __PYX_ERR(0, 13105, __pyx_L9_except_error)
          __Pyx_XGOTREF(__pyx_t_2);
          __Pyx_XGOTREF(__pyx_t_3);
          __Pyx_XGOTREF(__pyx_t_11);
          {
            PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_3, __pyx_t_11};
            __pyx_t_4 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13105, __pyx_L9_except_error)
            __Pyx_GOTREF(__pyx_t_4);
          }
          __pyx_t_20 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 13105, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_20);
          __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_20);
          __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
          if (__pyx_t_10 < (0)) __PYX_ERR(0, 13105, __pyx_L9_except_error)
          __pyx_t_21 = (!__pyx_t_10);


          if (unlikely(__pyx_t_21)) {

            __Pyx_GIVEREF(__pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_3);
            __Pyx_XGIVEREF(__pyx_t_11);
            __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_3, __pyx_t_11);
            __pyx_t_2 = 0;  __pyx_t_3 = 0;  __pyx_t_11 = 0; 
            __PYX_ERR(0, 13105, __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_11); __pyx_t_11 = 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[6], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13105, __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[6], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13105, __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_L23;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L1_error;
    __pyx_L23:;
  }
+13106:             self._check_open('poll_error')
          __pyx_t_9 = ((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_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13106, __pyx_L7_error)

+13107:             if not qwp_sender_poll_error(self._qwp, &c_error, &err):
          __pyx_t_10 = (!qwp_sender_poll_error(__pyx_v_self->_qwp, (&__pyx_v_c_error), (&__pyx_v_err)));

          if (unlikely(__pyx_t_10)) {
/* … */
          }
+13108:                 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, 13108, __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, 13108, __pyx_L7_error)
+13109:             if c_error == NULL:
          __pyx_t_10 = (__pyx_v_c_error == NULL);

          if (__pyx_t_10) {
/* … */
          }
+13110:                 return None
            {
              PyObject *__pyx_temp;
              {
                __pyx_temp = __pyx_r;
                __pyx_r = Py_None; __Pyx_INCREF(Py_None);
              }
              __Pyx_XDECREF(__pyx_temp);
            }
            goto __pyx_L11_try_return;
+13111:             try:
          /*try:*/ {
+13112:                 view = line_sender_qwpws_error_get_view(c_error)
            __pyx_v_view = line_sender_qwpws_error_get_view(__pyx_v_c_error);
+13113:                 return _sender_error_from_raw(
            __pyx_t_4 = NULL;
            __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_sender_error_from_raw); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13113, __pyx_L16_error)
            __Pyx_GOTREF(__pyx_t_3);
+13114:                     c_sender_error_view_to_raw(view))
            __pyx_t_11 = __pyx_f_7questdb_7_client_c_sender_error_view_to_raw(__pyx_v_view); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 13114, __pyx_L16_error)
            __Pyx_GOTREF(__pyx_t_11);
            __pyx_t_5 = 1;
            #if CYTHON_UNPACK_METHODS
            if (unlikely(PyMethod_Check(__pyx_t_3))) {
              __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
              assert(__pyx_t_4);
              PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
              __Pyx_INCREF(__pyx_t_4);
              __Pyx_INCREF(__pyx__function);
              __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
              __pyx_t_5 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_11};
              __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __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;
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13113, __pyx_L16_error)
              __Pyx_GOTREF(__pyx_t_2);
            }
            {
              PyObject *__pyx_temp;
              {
                __pyx_temp = __pyx_r;
                __pyx_r = __pyx_t_2;
              }
              __Pyx_XDECREF(__pyx_temp);
            }
            __pyx_t_2 = 0;
            goto __pyx_L15_return;
          }
 13115:             finally:
+13116:                 line_sender_qwpws_error_free(c_error)
          /*finally:*/ {
            __pyx_L16_error:;
            /*exception exit:*/{
              __Pyx_PyThreadState_declare
              __Pyx_PyThreadState_assign
              __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
              __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 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_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_12 = __pyx_lineno; __pyx_t_13 = __pyx_clineno; __pyx_t_14 = __pyx_filename;
              {
                line_sender_qwpws_error_free(__pyx_v_c_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_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_12; __pyx_clineno = __pyx_t_13; __pyx_filename = __pyx_t_14;
              goto __pyx_L7_error;
            }
            __pyx_L15_return: {
              __pyx_t_20 = __pyx_r;
              __pyx_r = 0;
              line_sender_qwpws_error_free(__pyx_v_c_error);
              __pyx_r = __pyx_t_20;
              __pyx_t_20 = 0;
              goto __pyx_L11_try_return;
            }
          }
 13117: 
+13118:     def error_events_dropped(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_21error_events_dropped(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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\047s 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_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_11);
  __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_19 = __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[166])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13118, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_error_events_dropped, __pyx_t_19) < (0)) __PYX_ERR(0, 13118, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 13119:         """
 13120:         Diagnostics dropped from the lease's connection ring
 13121:         (``error_inbox_capacity``).
 13122:         """
+13123:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+13124:         cdef uint64_t dropped = 0
  __pyx_v_dropped = 0;
+13125:         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, 13125, __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, 13125, __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, 13125, __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.PooledSender.error_events_dropped", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 13125, __pyx_L9_except_error)
          __Pyx_XGOTREF(__pyx_t_2);
          __Pyx_XGOTREF(__pyx_t_4);
          __Pyx_XGOTREF(__pyx_t_3);
          {
            PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_3};
            __pyx_t_11 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 13125, __pyx_L9_except_error)
            __Pyx_GOTREF(__pyx_t_11);
          }
          __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_11, NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 13125, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          if (__pyx_t_10 < (0)) __PYX_ERR(0, 13125, __pyx_L9_except_error)
          __pyx_t_13 = (!__pyx_t_10);


          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, 13125, __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[6], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13125, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L6:;
    }
    goto __pyx_L17;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L1_error;
    __pyx_L17:;
  }
+13126:             self._check_open('error_events_dropped')
          __pyx_t_9 = ((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_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13126, __pyx_L7_error)

+13127:             if not qwp_sender_error_events_dropped(
          __pyx_t_10 = (!qwp_sender_error_events_dropped(__pyx_v_self->_qwp, (&__pyx_v_dropped), (&__pyx_v_err)));

          if (unlikely(__pyx_t_10)) {
/* … */
          }
 13128:                     self._qwp, &dropped, &err):
+13129:                 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, 13129, __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, 13129, __pyx_L7_error)
+13130:         return dropped
  __pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_dropped); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13130, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_3;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_3 = 0;
  goto __pyx_L0;
 13131: 
+13132:     def published_fsn(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_23published_fsn(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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\047s 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_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_11);
  __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_19 = __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[167])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_published_fsn, __pyx_t_19) < (0)) __PYX_ERR(0, 13132, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 13133:         """
 13134:         Highest FSN published locally on the lease's pooled connection, or
 13135:         ``None`` if nothing has been published on it yet.
 13136:         """
+13137:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 13138:         cdef line_sender_qwpws_fsn fsn
+13139:         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, 13139, __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, 13139, __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, 13139, __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.PooledSender.published_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 13139, __pyx_L9_except_error)
          __Pyx_XGOTREF(__pyx_t_2);
          __Pyx_XGOTREF(__pyx_t_4);
          __Pyx_XGOTREF(__pyx_t_3);
          {
            PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_3};
            __pyx_t_11 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 13139, __pyx_L9_except_error)
            __Pyx_GOTREF(__pyx_t_11);
          }
          __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_11, NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 13139, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          if (__pyx_t_10 < (0)) __PYX_ERR(0, 13139, __pyx_L9_except_error)
          __pyx_t_13 = (!__pyx_t_10);


          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, 13139, __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[6], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13139, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L6:;
    }
    goto __pyx_L17;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L1_error;
    __pyx_L17:;
  }
+13140:             self._check_open('published_fsn')
          __pyx_t_9 = ((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_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13140, __pyx_L7_error)

+13141:             if not qwp_sender_published_fsn(self._qwp, &fsn, &err):
          __pyx_t_10 = (!qwp_sender_published_fsn(__pyx_v_self->_qwp, (&__pyx_v_fsn), (&__pyx_v_err)));

          if (unlikely(__pyx_t_10)) {
/* … */
          }
+13142:                 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, 13142, __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, 13142, __pyx_L7_error)
+13143:         return fsn.value if fsn.has_value else None
  __pyx_t_13 = (__pyx_v_fsn.has_value != 0);

  if (__pyx_t_13) {
    __pyx_t_4 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13143, __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;
  }

  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_3;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_3 = 0;
  goto __pyx_L0;
 13144: 
+13145:     def acked_fsn(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_25acked_fsn(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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\047s 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_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_11);
  __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_19 = __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[168])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13145, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_acked_fsn, __pyx_t_19) < (0)) __PYX_ERR(0, 13145, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 13146:         """
 13147:         Highest FSN completed on the lease's pooled connection by ACK or
 13148:         drop-and-continue rejection, or ``None`` if no frame has completed
 13149:         yet. A completed frame is not necessarily applied: a rejected frame
 13150:         the queue drops to make progress also advances this watermark.
 13151:         """
+13152:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 13153:         cdef line_sender_qwpws_fsn fsn
+13154:         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, 13154, __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, 13154, __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, 13154, __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.PooledSender.acked_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 13154, __pyx_L9_except_error)
          __Pyx_XGOTREF(__pyx_t_2);
          __Pyx_XGOTREF(__pyx_t_4);
          __Pyx_XGOTREF(__pyx_t_3);
          {
            PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_3};
            __pyx_t_11 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 13154, __pyx_L9_except_error)
            __Pyx_GOTREF(__pyx_t_11);
          }
          __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_11, NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 13154, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          if (__pyx_t_10 < (0)) __PYX_ERR(0, 13154, __pyx_L9_except_error)
          __pyx_t_13 = (!__pyx_t_10);


          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, 13154, __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[6], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13154, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L6:;
    }
    goto __pyx_L17;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L1_error;
    __pyx_L17:;
  }
+13155:             self._check_open('acked_fsn')
          __pyx_t_9 = ((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_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13155, __pyx_L7_error)

+13156:             if not qwp_sender_acked_fsn(self._qwp, &fsn, &err):
          __pyx_t_10 = (!qwp_sender_acked_fsn(__pyx_v_self->_qwp, (&__pyx_v_fsn), (&__pyx_v_err)));

          if (unlikely(__pyx_t_10)) {
/* … */
          }
+13157:                 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, 13157, __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, 13157, __pyx_L7_error)
+13158:         return fsn.value if fsn.has_value else None
  __pyx_t_13 = (__pyx_v_fsn.has_value != 0);

  if (__pyx_t_13) {
    __pyx_t_4 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13158, __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;
  }

  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_3;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_3 = 0;
  goto __pyx_L0;
 13159: 
+13160:     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_VECTORCALL
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). Only a terminal connection failure raises.\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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 13160, __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, 13160, __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, 13160, __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, 13160, __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, 13160, __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, 13160, __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, 13160, __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, 13160, __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_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_14);
  __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_19 = __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[169])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13160, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_19, __pyx_mstate_global->__pyx_tuple[8]);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_await_acked_fsn, __pyx_t_19) < (0)) __PYX_ERR(0, 13160, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 13161:         """
 13162:         Wait until the acknowledgement watermark reaches ``fsn`` (as
 13163:         returned by :meth:`flush_and_get_fsn` on this lease).
 13164: 
 13165:         Returns ``True`` once ``fsn`` is acknowledged, or ``False`` if the
 13166:         no-progress timeout elapsed before ``fsn`` was acknowledged (``0``
 13167:         waits indefinitely). Only a terminal connection failure raises.
 13168:         """
+13169:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+13170:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
 13171:         cdef uint64_t c_fsn
 13172:         cdef uint64_t c_timeout_millis
 13173:         cdef line_sender_qwpws_fsn acked
+13174:         cdef bint ok = False
  __pyx_v_ok = 0;
 13175:         cdef QuestDB handle
+13176:         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)) {
/* … */
  }
+13177:             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, 13177, __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, 13177, __pyx_L1_error)
+13178:         if fsn < 0:
  __pyx_t_1 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_fsn, __pyx_mstate_global->__pyx_int_0, Py_LT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 13178, __pyx_L1_error)
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+13179:             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, 13179, __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, 13179, __pyx_L1_error)
+13180:         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)) {
/* … */
  }
+13181:             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, 13181, __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, 13181, __pyx_L1_error)
+13182:         if timeout_millis < 0:
  __pyx_t_1 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_timeout_millis, __pyx_mstate_global->__pyx_int_0, Py_LT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 13182, __pyx_L1_error)
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+13183:             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, 13183, __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, 13183, __pyx_L1_error)
+13184:         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, 13184, __pyx_L1_error)
  __pyx_v_c_fsn = __pyx_t_7;
+13185:         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, 13185, __pyx_L1_error)
  __pyx_v_c_timeout_millis = __pyx_t_7;
+13186:         with self._lock:
  /*with:*/ {
    __pyx_t_8 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13186, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_5 = NULL;
    __pyx_t_9 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 13186, __pyx_L11_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_6 = 1;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_9);
      assert(__pyx_t_5);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
      __pyx_t_6 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13186, __pyx_L11_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __pyx_L15_error:;
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("questdb._client.PooledSender.await_acked_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_9) < 0) __PYX_ERR(0, 13186, __pyx_L17_except_error)
          __Pyx_XGOTREF(__pyx_t_4);
          __Pyx_XGOTREF(__pyx_t_5);
          __Pyx_XGOTREF(__pyx_t_9);
          {
            PyObject* __pyx_temp[3] = {__pyx_t_4, __pyx_t_5, __pyx_t_9};
            __pyx_t_14 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 13186, __pyx_L17_except_error)
            __Pyx_GOTREF(__pyx_t_14);
          }
          __pyx_t_23 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_14, NULL);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 13186, __pyx_L17_except_error)
          __Pyx_GOTREF(__pyx_t_23);
          __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_23);
          __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
          if (__pyx_t_1 < (0)) __PYX_ERR(0, 13186, __pyx_L17_except_error)
          __pyx_t_2 = (!__pyx_t_1);


          if (unlikely(__pyx_t_2)) {

            __Pyx_GIVEREF(__pyx_t_4);
            __Pyx_GIVEREF(__pyx_t_5);
            __Pyx_XGIVEREF(__pyx_t_9);
            __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_5, __pyx_t_9);
            __pyx_t_4 = 0;  __pyx_t_5 = 0;  __pyx_t_9 = 0; 
            __PYX_ERR(0, 13186, __pyx_L17_except_error)
          }
          __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;
          goto __pyx_L16_exception_handled;
        }
        __pyx_L17_except_error:;
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
        goto __pyx_L1_error;
        __pyx_L19_try_return:;
        __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_L12_return;
        __pyx_L16_exception_handled:;
        __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);
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_8) {
          __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_mstate_global->__pyx_tuple[6], NULL);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 13186, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        }
        goto __pyx_L14;
      }
      __pyx_L12_return: {
        __pyx_t_12 = __pyx_r;
        __pyx_r = 0;
        if (__pyx_t_8) {
          __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_mstate_global->__pyx_tuple[6], NULL);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 13186, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        }
        __pyx_r = __pyx_t_12;
        __pyx_t_12 = 0;
        goto __pyx_L0;
      }
      __pyx_L14:;
    }
    goto __pyx_L38;
    __pyx_L11_error:;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    goto __pyx_L1_error;
    __pyx_L38:;
  }
+13187:             self._check_open('await_acked_fsn')
          __pyx_t_13 = ((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_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13187, __pyx_L15_error)

+13188:             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, 13188, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_4);
          __pyx_t_4 = 0;
+13189:             try:
          /*try:*/ {
+13190:                 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)) {
/* … */
            }
+13191:                     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, 13191, __pyx_L22_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, 13191, __pyx_L22_error)
+13192:                 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_L26_bool_binop_done;
            }
            __pyx_t_2 = (__pyx_v_acked.value >= __pyx_v_c_fsn);


            __pyx_t_1 = __pyx_t_2;

            __pyx_L26_bool_binop_done:;
            if (__pyx_t_1) {
/* … */
            }
+13193:                     return True
              {
                PyObject *__pyx_temp;
                {
                  __pyx_temp = __pyx_r;
                  __Pyx_INCREF(Py_True);
                  __pyx_r = Py_True;
                }
                __Pyx_XDECREF(__pyx_temp);
              }
              goto __pyx_L21_return;
 13194:                 # The barrier drains every frame published so far (a
 13195:                 # superset of ``fsn``); a no-progress expiry surfaces as
 13196:                 # FailoverRetry.
+13197:                 _ensure_doesnt_have_gil(&gs)
            (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+13198:                 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));
 13199:                     self._qwp,
 13200:                     qwpws_ack_level.qwpws_ack_level_ok,
 13201:                     c_timeout_millis,
 13202:                     &err)
+13203:                 _ensure_has_gil(&gs)
            __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+13204:                 if not ok:
            __pyx_t_1 = (!__pyx_v_ok);

            if (__pyx_t_1) {
/* … */
            }
+13205:                     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)) {
/* … */
              }
 13206:                             line_sender_error_failover_retry:
+13207:                         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, 13207, __pyx_L22_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, 13207, __pyx_L22_error)
+13208:                     line_sender_error_free(err)
              line_sender_error_free(__pyx_v_err);
+13209:                     err = NULL
              __pyx_v_err = NULL;
 13210:                 # Re-read the watermark: the wait either drained ``fsn``
 13211:                 # or expired with no progress; the current ack level is
 13212:                 # the answer.
+13213:                 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)) {
/* … */
            }
+13214:                     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, 13214, __pyx_L22_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, 13214, __pyx_L22_error)
+13215:                 return bool(acked.has_value and acked.value >= c_fsn)
            __pyx_t_9 = NULL;
            if (__pyx_v_acked.has_value) {
            } else {
              __pyx_t_14 = __Pyx_PyLong_From_bool(__pyx_v_acked.has_value); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 13215, __pyx_L22_error)
              __Pyx_GOTREF(__pyx_t_14);
              __pyx_t_5 = __pyx_t_14;
              __pyx_t_14 = 0;
              goto __pyx_L31_bool_binop_done;
            }
            __pyx_t_1 = (__pyx_v_acked.value >= __pyx_v_c_fsn);

            __pyx_t_14 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 13215, __pyx_L22_error)
            __Pyx_GOTREF(__pyx_t_14);
            __pyx_t_5 = __pyx_t_14;
            __pyx_t_14 = 0;

            __pyx_L31_bool_binop_done:;
            __pyx_t_6 = 1;
            {
              PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_5};
              __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_9); __pyx_t_9 = 0;
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13215, __pyx_L22_error)
              __Pyx_GOTREF((PyObject *)__pyx_t_4);
            }
            {
              PyObject *__pyx_temp;
              {
                __pyx_temp = __pyx_r;
                __pyx_r = ((PyObject *)__pyx_t_4);
              }
              __Pyx_XDECREF(__pyx_temp);
            }
            __pyx_t_4 = 0;
            goto __pyx_L21_return;
          }
 13216:             finally:
+13217:                 self._exit_call_locked(handle)
          /*finally:*/ {
            __pyx_L22_error:;
            /*exception exit:*/{
              __Pyx_PyThreadState_declare
              __Pyx_PyThreadState_assign
              __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0;
              __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
              __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
              __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
              __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
               __Pyx_ExceptionSwap(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
              if ( unlikely(__Pyx_GetException(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20) < 0)) __Pyx_ErrFetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
              __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_XGOTREF(__pyx_t_23);
              __pyx_t_15 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_17 = __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, 13217, __pyx_L34_error)
              }
              __Pyx_XGIVEREF(__pyx_t_21);
              __Pyx_XGIVEREF(__pyx_t_22);
              __Pyx_XGIVEREF(__pyx_t_23);
              __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_22, __pyx_t_23);
              __Pyx_XGIVEREF(__pyx_t_18);
              __Pyx_XGIVEREF(__pyx_t_19);
              __Pyx_XGIVEREF(__pyx_t_20);
              __Pyx_ErrRestore(__pyx_t_18, __pyx_t_19, __pyx_t_20);
              __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0;
              __pyx_lineno = __pyx_t_15; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_17;
              goto __pyx_L15_error;
              __pyx_L34_error:;
              __Pyx_XGIVEREF(__pyx_t_21);
              __Pyx_XGIVEREF(__pyx_t_22);
              __Pyx_XGIVEREF(__pyx_t_23);
              __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_22, __pyx_t_23);
              __Pyx_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_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0;
              goto __pyx_L15_error;
            }
            __pyx_L21_return: {
              __pyx_t_23 = __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, 13217, __pyx_L15_error)
              __pyx_r = __pyx_t_23;
              __pyx_t_23 = 0;
              goto __pyx_L19_try_return;
            }
          }
 13218: 
+13219:     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_VECTORCALL
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\047s rows is reported through the pool\047s\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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 13219, __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, 13219, __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, 13219, __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, 13219, __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, 13219, __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, 13219, __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, 13219, __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, 13219, __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, 13219, __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_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_21);
  __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_19 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13219, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_flush, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(0, 13219, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_wait, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(0, 13219, __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[170])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 13219, __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[73]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_17, __pyx_t_19);
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 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, 13219, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 13220:         """
 13221:         Return this sender to its pool. Idempotent.
 13222: 
 13223:         Pending rows are published by default; delivery is owned by the
 13224:         store-and-forward queue, which keeps delivering after the sender
 13225:         is returned. ``wait=True`` additionally waits for an OK ack before
 13226:         returning the sender to the pool; without it, a later server
 13227:         rejection of this lease's rows is reported through the pool's
 13228:         ``error_handler`` (default: the ``questdb`` logger).
 13229:         """
 13230:         cdef QuestDB handle
+13231:         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, 13231, __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, 13231, __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, 13231, __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.PooledSender.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 13231, __pyx_L9_except_error)
          __Pyx_XGOTREF(__pyx_t_2);
          __Pyx_XGOTREF(__pyx_t_4);
          __Pyx_XGOTREF(__pyx_t_3);
          {
            PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_3};
            __pyx_t_21 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 13231, __pyx_L9_except_error)
            __Pyx_GOTREF(__pyx_t_21);
          }
          __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_21, NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
          if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 13231, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          if (__pyx_t_10 < (0)) __PYX_ERR(0, 13231, __pyx_L9_except_error)
          __pyx_t_11 = (!__pyx_t_10);


          if (unlikely(__pyx_t_11)) {

            __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, 13231, __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[6], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13231, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L6:;
    }
    goto __pyx_L29;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L1_error;
    __pyx_L29:;
  }
 13232:             # A part-way-through row is the sharper diagnosis and names
 13233:             # the buffer, so it is asked first; the broader "inside one
 13234:             # of this lease's own calls" answers everything else.
+13235:             self._check_not_in_row('close')
          __pyx_t_9 = ((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_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13235, __pyx_L7_error)

+13236:             self._check_not_mid_call('close')
          __pyx_t_9 = ((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_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13236, __pyx_L7_error)

+13237:             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, 13237, __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;
+13238:             try:
          /*try:*/ {
+13239:                 try:
            /*try:*/ {
+13240:                     if flush and self._qwp != NULL:
              __pyx_t_11 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_flush)); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 13240, __pyx_L17_error)
              if (__pyx_t_11) {

              } else {

                __pyx_t_10 = __pyx_t_11;

                goto __pyx_L20_bool_binop_done;
              }
              __pyx_t_11 = (__pyx_v_self->_qwp != NULL);


              __pyx_t_10 = __pyx_t_11;

              __pyx_L20_bool_binop_done:;
              if (__pyx_t_10) {
/* … */
              }
            }
+13241:                         self._flush_locked(wait)
                __pyx_t_10 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_wait)); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13241, __pyx_L17_error)
                __pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_flush_locked(__pyx_v_self, __pyx_t_10); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13241, __pyx_L17_error)


 13242:                 finally:
+13243:                     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, 13243, __pyx_L14_error)
                goto __pyx_L18;
              }
              __pyx_L17_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_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_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_12 = __pyx_lineno; __pyx_t_13 = __pyx_clineno; __pyx_t_14 = __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, 13243, __pyx_L23_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_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_12; __pyx_clineno = __pyx_t_13; __pyx_filename = __pyx_t_14;
                goto __pyx_L14_error;
                __pyx_L23_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_L14_error;
              }
              __pyx_L18:;
            }
          }
 13244:             finally:
+13245:                 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, 13245, __pyx_L7_error)
              goto __pyx_L15;
            }
            __pyx_L14_error:;
            /*exception exit:*/{
              __Pyx_PyThreadState_declare
              __Pyx_PyThreadState_assign
              __pyx_t_20 = 0; __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __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_ExceptionSwap(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15);
              if ( unlikely(__Pyx_GetException(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18) < 0)) __Pyx_ErrFetch(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18);
              __Pyx_XGOTREF(__pyx_t_20);
              __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_t_13 = __pyx_lineno; __pyx_t_12 = __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, 13245, __pyx_L25_error)
              }
              __Pyx_XGIVEREF(__pyx_t_17);
              __Pyx_XGIVEREF(__pyx_t_16);
              __Pyx_XGIVEREF(__pyx_t_15);
              __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_16, __pyx_t_15);
              __Pyx_XGIVEREF(__pyx_t_20);
              __Pyx_XGIVEREF(__pyx_t_19);
              __Pyx_XGIVEREF(__pyx_t_18);
              __Pyx_ErrRestore(__pyx_t_20, __pyx_t_19, __pyx_t_18);
              __pyx_t_20 = 0; __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0;
              __pyx_lineno = __pyx_t_13; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_14;
              goto __pyx_L7_error;
              __pyx_L25_error:;
              __Pyx_XGIVEREF(__pyx_t_17);
              __Pyx_XGIVEREF(__pyx_t_16);
              __Pyx_XGIVEREF(__pyx_t_15);
              __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_16, __pyx_t_15);
              __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
              __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
              __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
              __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0;
              goto __pyx_L7_error;
            }
            __pyx_L15:;
          }
 13246: 
+13247:     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_VECTORCALL
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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 13247, __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, 13247, __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, 13247, __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, 13247, __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, 13247, __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, 13247, __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, 13247, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 13247, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 13247, __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, 13247, __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[171])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 13247, __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, 13247, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+13248:         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, 13248, __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, 13248, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 13249: 
+13250:     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();
}
+13251:         cdef size_t discarded = 0
  __pyx_v_discarded = 0;
+13252:         if self._lock is None:
  __pyx_t_1 = (__pyx_v_self->_lock == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+13253:             return
    {
    }
    goto __pyx_L0;
+13254:         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, 13254, __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, 13254, __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, 13254, __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, 13254, __pyx_L10_except_error)
          __Pyx_XGOTREF(__pyx_t_3);
          __Pyx_XGOTREF(__pyx_t_5);
          __Pyx_XGOTREF(__pyx_t_4);
          {
            PyObject* __pyx_temp[3] = {__pyx_t_3, __pyx_t_5, __pyx_t_4};
            __pyx_t_11 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 13254, __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, 13254, __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, 13254, __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, 13254, __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[6], NULL);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 13254, __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:;
  }
+13255:             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) {
/* … */
          }
+13256:                 discarded = line_sender_buffer_row_count(self._buffer._impl)
            __pyx_v_discarded = line_sender_buffer_row_count(__pyx_v_self->_buffer->_impl);
+13257:             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, 13257, __pyx_L8_error)
+13258:         if discarded != 0:
  __pyx_t_10 = (__pyx_v_discarded != 0);

  if (__pyx_t_10) {
/* … */
  }
+13259:             _log_discarded_lease_rows(discarded)
    __pyx_f_7questdb_7_client__log_discarded_lease_rows(__pyx_v_discarded);
 13260: 
 13261: 
+13262: 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();
}
 13263:     """Report the rows a lease collected without ``close()`` took with it.
 13264: 
 13265:     Called from ``PooledSender.__dealloc__``, which cannot flush them: a
 13266:     lease reaches it only once nothing refers to it, often during garbage
 13267:     collection or interpreter exit. Without this record the rows would
 13268:     vanish with nothing said. Deallocation cannot report an error either,
 13269:     so a logging handler that raises, or a ``logging`` module already
 13270:     torn down at interpreter exit, costs the record and nothing else.
 13271:     """
+13272:     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:;
  }
+13273:         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, 13273, __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, 13273, __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, 13273, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_6);
      }
      __pyx_t_5 = __pyx_t_6;
      __Pyx_INCREF(__pyx_t_5);
 13274:             'questdb: a PooledSender lease was garbage-collected without '
 13275:             'close(), discarding %d buffered row(s) that were never sent. '
 13276:             'Close every lease, or use it in a `with` block, so that its '
 13277:             'rows are flushed.',
+13278:             rows)
      __pyx_t_9 = __Pyx_PyLong_FromSize_t(__pyx_v_rows); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 13278, __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, 13273, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+13279:     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;
 13280:         pass
 13281: 
 13282: 
+13283: @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;
  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 *);
  __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 *);
};
static struct __pyx_vtabstruct_7questdb_7_client_PooledReader *__pyx_vtabptr_7questdb_7_client_PooledReader;

 13284: cdef class PooledReader:
 13285:     """
 13286:     A reader lease borrowed from a :class:`QuestDB` pool.
 13287: 
 13288:     The read-side twin of :meth:`QuestDB.sender`: obtain a lease with
 13289:     :meth:`QuestDB.reader`; it holds one pooled reader connection for
 13290:     its lifetime and runs queries on it sequentially via :meth:`query`.
 13291:     ``close()`` (or leaving the ``with`` block) releases the
 13292:     connection: back to the pool if the last query reached its terminal
 13293:     on a live connection (a clean drain, a successful ``cancel()``, or a
 13294:     server-side error such as a parse error or a query timeout), dropped
 13295:     otherwise.
 13296: 
 13297:     Queries are strictly sequential — one result at a time. Fully drain
 13298:     (or ``close()``) each :class:`QueryResult` before calling
 13299:     :meth:`query` again; running the next query while the previous
 13300:     result is still open raises ``QuestDBError``. Closing an undrained
 13301:     result terminates the lease; call ``result.cancel()`` before
 13302:     ``result.close()`` to preserve it.
 13303: 
 13304:     Because every query shares one connection, passing
 13305:     ``reset_symbol_dict=False`` to follow-up queries keeps the
 13306:     connection's SYMBOL dictionary warm across them instead of
 13307:     resetting it per query.
 13308: 
 13309:     The lease counts as an active use of the :class:`QuestDB` handle
 13310:     (``QuestDB.close()`` waits for it) and has thread affinity: use one
 13311:     lease per thread, on the thread that created it. A
 13312:     :class:`QueryResult` returned by the lease may be handed to a worker
 13313:     under that result's thread hand-off rules; wait for it to finish
 13314:     before using the lease again.
 13315:     """
 13316:     cdef QuestDB _handle
 13317:     cdef _ReaderHandle _reader
 13318:     cdef _CursorHandle _last_cursor
 13319:     cdef object _lock
 13320:     cdef int64_t _call_depth
 13321: 
+13322:     def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_12PooledReader_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_12PooledReader_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL_TPNEW
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if !CYTHON_VECTORCALL_TPNEW
  #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
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__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_FASTCALL_TPNEW(__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;
}
+13323:         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);
+13324:         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);
+13325:         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);
+13326:         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, 13326, __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, 13326, __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, 13326, __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;
+13327:         self._call_depth = 0
  __pyx_v_self->_call_depth = 0;
 13328: 
+13329:     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();
}
 13330:             self,
 13331:             QuestDB handle,
 13332:             _ReaderHandle reader) noexcept:
+13333:         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;
+13334:         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;
 13335: 
+13336:     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;
}
+13337:         if self._reader is None:
  __pyx_t_1 = (((PyObject *)__pyx_v_self->_reader) == Py_None);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+13338:             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, 13338, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+13339:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13339, __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, 13339, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+13340:                 f"{method}() can't be called: the reader lease is closed.")
    __pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13340, __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_the_reader_leas); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13340, __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, 13338, __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, 13338, __pyx_L1_error)
 13341: 
+13342:     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;
}
 13343:         """Count one of this lease's own calls, on the lease and on the
 13344:         handle it was borrowed from. Called with `self._lock` held.
 13345: 
 13346:         The mirror of `PooledSender._enter_call_locked`, and for the same
 13347:         two reasons: `QuestDB.close()` has to be able to see that the
 13348:         frame it would wait for is its own caller, and `close()` here has
 13349:         to be able to tell a call on *this* lease from a call somewhere
 13350:         else on the handle.
 13351: 
 13352:         A query runs the caller's Python while it holds the lease --
 13353:         `_bind_query_params` reads `value.bytes` off every bind parameter
 13354:         it is handed -- so this is the read side's re-entrancy window.
 13355:         """
+13356:         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;
+13357:         self._call_depth += 1
  __pyx_v_self->_call_depth = (__pyx_v_self->_call_depth + 1);
+13358:         if handle is not None:
  __pyx_t_2 = (((PyObject *)__pyx_v_handle) != Py_None);
  if (__pyx_t_2) {
/* … */
  }
+13359:             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:;
    }
+13360:                 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, 13360, __pyx_L4_error)
+13361:             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, 13361, __pyx_L6_except_error)
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_7);
+13362:                 self._call_depth -= 1
        __pyx_v_self->_call_depth = (__pyx_v_self->_call_depth - 1);
+13363:                 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, 13363, __pyx_L6_except_error)
      }
+13364:         return handle
  {
    struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF((PyObject *)__pyx_v_handle);
      __pyx_r = __pyx_v_handle;
    }
    __Pyx_XDECREF((PyObject *)__pyx_temp);
  }
  goto __pyx_L0;
 13365: 
+13366:     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:;

}
 13367:         # The handle's thread-local update can raise; this lease is no longer
 13368:         # in its call either way, so unwind its guard first.
+13369:         self._call_depth -= 1
  __pyx_v_self->_call_depth = (__pyx_v_self->_call_depth - 1);
+13370:         if handle is not None:
  __pyx_t_1 = (((PyObject *)__pyx_v_handle) != Py_None);
  if (__pyx_t_1) {
/* … */
  }
+13371:             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, 13371, __pyx_L1_error)
 13372: 
+13373:     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;
}
 13374:         """
 13375:         Refuse a call that would end this lease while one of its own
 13376:         calls is still running: the reader connection would go back to
 13377:         the pool with the call still reading from it.
 13378:         """
+13379:         if self._call_depth != 0:
  __pyx_t_1 = (__pyx_v_self->_call_depth != 0);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+13380:             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, 13380, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+13381:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13381, __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, 13381, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+13382:                 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, 13382, __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, 13382, __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, 13380, __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, 13380, __pyx_L1_error)
 13383:                 'reader lease. It would release the connection while '
 13384:                 'that call is still using it. Close the lease after the '
 13385:                 'call returns.')
 13386: 
+13387:     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_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();
}
+13388:         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;
+13389:         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;
+13390:         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;
+13391:         if reader is None:
  __pyx_t_2 = (((PyObject *)__pyx_v_reader) == Py_None);
  if (__pyx_t_2) {
/* … */
  }
+13392:             return
    {
    }
    goto __pyx_L0;
+13393:         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);
+13394:         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);
+13395:         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);
+13396:         try:
  /*try:*/ {
+13397:             if last is not None:
    __pyx_t_2 = (((PyObject *)__pyx_v_last) != Py_None);
    if (__pyx_t_2) {
/* … */
    }
  }
+13398:                 last._close()
      __pyx_t_3 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_last->__pyx_vtab)->_close(__pyx_v_last); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 13398, __pyx_L5_error)

 13399:         finally:
+13400:             if last is not None and last._cursor != NULL:
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_4 = (((PyObject *)__pyx_v_last) != Py_None);
      if (__pyx_t_4) {

      } else {

        __pyx_t_2 = __pyx_t_4;

        goto __pyx_L9_bool_binop_done;
      }
      __pyx_t_4 = (__pyx_v_last->_cursor != NULL);


      __pyx_t_2 = __pyx_t_4;

      __pyx_L9_bool_binop_done:;
      if (__pyx_t_2) {
/* … */
      }
/* … */
        __pyx_t_4 = (((PyObject *)__pyx_v_last) != Py_None);
        if (__pyx_t_4) {

        } else {

          __pyx_t_2 = __pyx_t_4;

          goto __pyx_L16_bool_binop_done;
        }
        __pyx_t_4 = (__pyx_v_last->_cursor != NULL);


        __pyx_t_2 = __pyx_t_4;

        __pyx_L16_bool_binop_done:;
        if (__pyx_t_2) {
/* … */
        }
 13401:                 # Deferred or interrupted: whoever frees the cursor closes
 13402:                 # the reader.
+13403:                 last._owns_reader = True
        __pyx_v_last->_owns_reader = 1;
/* … */
          __pyx_v_last->_owns_reader = 1;
+13404:                 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));
+13405:             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) {
/* … */
        }
+13406:                 reader._close()
        ((struct __pyx_vtabstruct_7questdb_7_client__ReaderHandle *)__pyx_v_reader->__pyx_vtab)->_close(__pyx_v_reader);
/* … */
          ((struct __pyx_vtabstruct_7questdb_7_client__ReaderHandle *)__pyx_v_reader->__pyx_vtab)->_close(__pyx_v_reader);
+13407:             if handle is not None:
      __pyx_t_2 = (((PyObject *)__pyx_v_handle) != Py_None);
      if (__pyx_t_2) {
/* … */
      }
      goto __pyx_L6;
    }
    __pyx_L5_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_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_3 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_7 = __pyx_filename;
      {
/* … */
        __pyx_t_2 = (((PyObject *)__pyx_v_handle) != Py_None);
        if (__pyx_t_2) {
/* … */
        }
      }
      __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_3; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_7;
      goto __pyx_L1_error;
      __pyx_L14_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_L6:;
  }
+13408:                 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, 13408, __pyx_L1_error)
/* … */
          __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, 13408, __pyx_L14_error)
 13409: 
+13410:     def __enter__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledReader_3__enter__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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[174])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 13410, __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, 13410, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+13411:         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, 13411, __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, 13411, __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, 13411, __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, 13411, __pyx_L9_except_error)
          __Pyx_XGOTREF(__pyx_t_2);
          __Pyx_XGOTREF(__pyx_t_4);
          __Pyx_XGOTREF(__pyx_t_3);
          {
            PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_3};
            __pyx_t_10 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 13411, __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, 13411, __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, 13411, __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, 13411, __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[6], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13411, __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:;
  }
+13412:             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, 13412, __pyx_L7_error)

+13413:         return self
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF((PyObject *)__pyx_v_self);
      __pyx_r = ((PyObject *)__pyx_v_self);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 13414: 
+13415:     def query(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledReader_5query(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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\047s 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\047s result must be fully drained (or closed)\n        first; ``reset_symbol_dict=False`` reuses the connection\047s\n        SYMBOL dictionary built up by the lease\047s 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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 13415, __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, 13415, __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, 13415, __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, 13415, __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;
  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, 13415, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
/* … */
  __pyx_t_19 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13415, __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_QueryResult) < (0)) __PYX_ERR(0, 13415, __pyx_L1_error)
  __pyx_t_20 = __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[175])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 13415, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_20, __pyx_mstate_global->__pyx_tuple[49]);
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_20, __pyx_t_17);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_20, __pyx_t_19);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledReader, __pyx_mstate_global->__pyx_n_u_query, __pyx_t_20) < (0)) __PYX_ERR(0, 13415, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 13416:             self,
 13417:             str sql,
+13418:             object binds=None,
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
 13419:             *,
+13420:             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, 13415, __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, 13417, __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, 13415, __pyx_L1_error)
+13421:             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, 13415, __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, 13415, __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, 13415, __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, 13420, __pyx_L3_error)
    } else {
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_timeout, Py_None) < (0)) __PYX_ERR(0, 13415, __pyx_L1_error)
 13422:         """
 13423:         Execute a SQL query on the lease's connection and return a
 13424:         :class:`QueryResult`.
 13425: 
 13426:         ``sql``, ``binds``, ``reset_symbol_dict`` and ``timeout`` behave
 13427:         exactly as on :meth:`QuestDB.query`, except the query runs on the
 13428:         reader this lease holds instead of a per-call pool borrow. The
 13429:         previous query's result must be fully drained (or closed)
 13430:         first; ``reset_symbol_dict=False`` reuses the connection's
 13431:         SYMBOL dictionary built up by the lease's earlier queries.
 13432:         """
 13433:         cdef _CursorHandle cursor_handle
 13434:         cdef _CursorHandle last
 13435:         cdef int64_t timeout_ms
 13436:         cdef QuestDB handle
+13437:         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)) {
/* … */
  }
+13438:             raise TypeError(
    __pyx_t_5 = NULL;
+13439:                 '"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, 13439, __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, 13438, __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, 13438, __pyx_L1_error)
+13440:                 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, 13440, __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, 13440, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 13441:         # Validated before the lease is touched, so a bad argument is a
 13442:         # plain TypeError / ValueError and never disturbs the connection.
+13443:         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, 13443, __pyx_L1_error)
  __pyx_v_timeout_ms = __pyx_t_9;
+13444:         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, 13444, __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, 13444, __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, 13444, __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, 13444, __pyx_L14_except_error)
          __Pyx_XGOTREF(__pyx_t_15);
          __Pyx_XGOTREF(__pyx_t_4);
          __Pyx_XGOTREF(__pyx_t_7);
          {
            PyObject* __pyx_temp[3] = {__pyx_t_15, __pyx_t_4, __pyx_t_7};
            __pyx_t_6 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13444, __pyx_L14_except_error)
            __Pyx_GOTREF(__pyx_t_6);
          }
          __pyx_t_25 = __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_25)) __PYX_ERR(0, 13444, __pyx_L14_except_error)
          __Pyx_GOTREF(__pyx_t_25);
          __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_25);
          __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
          if (__pyx_t_1 < (0)) __PYX_ERR(0, 13444, __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, 13444, __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[6], NULL);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 13444, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        }
        goto __pyx_L11;
      }
      __pyx_L11:;
    }
    goto __pyx_L29;
    __pyx_L8_error:;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    goto __pyx_L1_error;
    __pyx_L29:;
  }
+13445:             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, 13445, __pyx_L12_error)

+13446:             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, 13446, __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;
+13447:             try:
          /*try:*/ {
+13448:                 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;
+13449:                 if last is not None:
            __pyx_t_1 = (((PyObject *)__pyx_v_last) != Py_None);
            if (__pyx_t_1) {
/* … */
            }
+13450:                     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, 13450, __pyx_L19_error)
              if (unlikely(__pyx_t_1)) {
/* … */
              }
+13451:                         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, 13451, __pyx_L19_error)
                __Pyx_GOTREF(__pyx_t_6);
+13452:                             QuestDBErrorCode.InvalidApiCall,
                __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13452, __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, 13452, __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, 13451, __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, 13451, __pyx_L19_error)
 13453:                             'the previous QueryResult is still open: '
 13454:                             'drain it fully or close() it before '
 13455:                             'running the next query on this lease.')
+13456:                     if self._reader._must_close:
              if (unlikely(__pyx_v_self->_reader->_must_close)) {
/* … */
              }
+13457:                         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, 13457, __pyx_L19_error)
                __Pyx_GOTREF(__pyx_t_15);
+13458:                             QuestDBErrorCode.InvalidApiCall,
                __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13458, __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, 13458, __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, 13457, __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, 13457, __pyx_L19_error)
 13459:                             "the lease's connection is terminal: the "
 13460:                             'previous query did not reach its terminal '
 13461:                             'frame, so its transport was torn down. close() '
 13462:                             'this lease and obtain a new one with '
 13463:                             'QuestDB.reader().')
+13464:                 cursor_handle = _execute_query(
            __pyx_t_16.__pyx_n = 3;
            __pyx_t_16.reset_symbol_dict = __pyx_v_reset_symbol_dict;
            __pyx_t_16.owns_reader = 0;
            __pyx_t_16.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_16)); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 13464, __pyx_L19_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;
+13465:                     self._reader, sql, binds, reset_symbol_dict, False,
            __pyx_t_4 = ((PyObject *)__pyx_v_self->_reader);
            __Pyx_INCREF(__pyx_t_4);
 13466:                     timeout_ms)
+13467:                 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;
          }
 13468:             finally:
+13469:                 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, 13469, __pyx_L12_error)
              goto __pyx_L20;
            }
            __pyx_L19_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_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_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_17 = __pyx_lineno; __pyx_t_18 = __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, 13469, __pyx_L25_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_17; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19;
              goto __pyx_L12_error;
              __pyx_L25_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_L12_error;
            }
            __pyx_L20:;
          }
+13470:         return QueryResult(cursor_handle)
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_QueryResult); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 13470, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  if (unlikely(!__pyx_v_cursor_handle)) { __Pyx_RaiseUnboundLocalError("cursor_handle"); __PYX_ERR(0, 13470, __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, 13470, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_7;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_7 = 0;
  goto __pyx_L0;
 13471: 
+13472:     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_VECTORCALL
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\047s 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\047s 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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 13472, __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, 13472, __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, 13472, __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, 13472, __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, 13472, __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, 13472, __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, 13472, __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, 13472, __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, 13472, __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_19);
  __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_20 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 13472, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_timeout, Py_None) < (0)) __PYX_ERR(0, 13472, __pyx_L1_error)
  __pyx_t_19 = __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[176])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13472, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_19, __pyx_mstate_global->__pyx_tuple[49]);
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_19, __pyx_t_20);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledReader, __pyx_mstate_global->__pyx_n_u_execute_2, __pyx_t_19) < (0)) __PYX_ERR(0, 13472, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 13473:         """
 13474:         Run a statement on the lease's connection and discard whatever
 13475:         it returns.
 13476: 
 13477:         Mirrors :meth:`QuestDB.execute`, including the
 13478:         :class:`ExecDone` ``(op_type, rows_affected)`` return value. The
 13479:         result is drained
 13480:         to its clean end, so the lease stays usable for the next call,
 13481:         and the connection's SYMBOL dictionary is left untouched — an
 13482:         interleaved statement does not invalidate a warm dictionary
 13483:         built with ``reset_symbol_dict=False``.
 13484:         """
 13485:         cdef QuestDB handle
+13486:         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, 13486, __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, 13486, __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, 13486, __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, 13486, __pyx_L9_except_error)
          __Pyx_XGOTREF(__pyx_t_2);
          __Pyx_XGOTREF(__pyx_t_3);
          __Pyx_XGOTREF(__pyx_t_4);
          {
            PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_3, __pyx_t_4};
            __pyx_t_19 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13486, __pyx_L9_except_error)
            __Pyx_GOTREF(__pyx_t_19);
          }
          __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_19, NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
          if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 13486, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_20 = __Pyx_PyObject_IsTrue(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          if (__pyx_t_20 < (0)) __PYX_ERR(0, 13486, __pyx_L9_except_error)
          __pyx_t_21 = (!__pyx_t_20);


          if (unlikely(__pyx_t_21)) {

            __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, 13486, __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[6], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13486, __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[6], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13486, __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:;
  }
+13487:             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, 13487, __pyx_L7_error)

+13488:             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, 13488, __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;
 13489:             # Held for the whole statement, as in every method of a lease:
 13490:             # the call count is then visible only to the thread running it.
+13491:             try:
          /*try:*/ {
+13492:                 result = self.query(
            __pyx_t_4 = ((PyObject *)__pyx_v_self);
            __Pyx_INCREF(__pyx_t_4);
+13493:                     sql, binds, reset_symbol_dict=False, timeout=timeout)
            __pyx_t_5 = 0;
            {
              PyObject *__pyx_callargs[5] = {__pyx_t_4, __pyx_v_sql, __pyx_v_binds, Py_False, __pyx_v_timeout};
              #if CYTHON_VECTORCALL
              __pyx_t_3 = __pyx_mstate_global->__pyx_tuple[33];
              if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13492, __pyx_L14_error)
              __Pyx_INCREF(__pyx_t_3);
              #else
              {
                PyObject *__pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_reset_symbol_dict, __pyx_mstate_global->__pyx_n_u_timeout};
                __pyx_t_3 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+3, 2);
                if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13492, __pyx_L14_error)
                __Pyx_GOTREF(__pyx_t_3);
              }
              #endif
              __pyx_t_2 = __Pyx_Object_VectorcallMethodKwds((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, 13492, __pyx_L14_error)
              __Pyx_GOTREF(__pyx_t_2);
            }
            __pyx_v_result = __pyx_t_2;
            __pyx_t_2 = 0;
+13494:                 try:
            /*try:*/ {
+13495:                     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, __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, 13495, __pyx_L17_error)
                __Pyx_GOTREF(__pyx_t_2);
              }
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+13496:                     return result.exec_done
              __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, 13496, __pyx_L17_error)
              __Pyx_GOTREF(__pyx_t_2);
              {
                PyObject *__pyx_temp;
                {
                  __pyx_temp = __pyx_r;
                  __pyx_r = __pyx_t_2;
                }
                __Pyx_XDECREF(__pyx_temp);
              }
              __pyx_t_2 = 0;
              goto __pyx_L16_return;
            }
 13497:                 finally:
+13498:                     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, 13498, __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, 13498, __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;
              }
            }
          }
 13499:             finally:
+13500:                 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_12 = __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, 13500, __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_12;
              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, 13500, __pyx_L7_error)
              __pyx_r = __pyx_t_13;
              __pyx_t_13 = 0;
              goto __pyx_L11_try_return;
            }
          }
 13501: 
+13502:     def close(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledReader_9close(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
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\047s 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_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  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_VECTORCALL
  #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_19);
  __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_19 = __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[177])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13502, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledReader, __pyx_mstate_global->__pyx_n_u_close, __pyx_t_19) < (0)) __PYX_ERR(0, 13502, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 13503:         """
 13504:         Release the lease's reader connection. Idempotent.
 13505: 
 13506:         A still-open (undrained) last result is freed first, which
 13507:         tears down the connection; a connection whose last query reached
 13508:         its terminal (a clean drain, a successful ``cancel()``, or a
 13509:         server-side error) is returned to the pool, any other is dropped
 13510:         and the pool refills on demand.
 13511:         """
 13512:         cdef QuestDB handle
+13513:         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, 13513, __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, 13513, __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, 13513, __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.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 13513, __pyx_L9_except_error)
          __Pyx_XGOTREF(__pyx_t_2);
          __Pyx_XGOTREF(__pyx_t_4);
          __Pyx_XGOTREF(__pyx_t_3);
          {
            PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_3};
            __pyx_t_19 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13513, __pyx_L9_except_error)
            __Pyx_GOTREF(__pyx_t_19);
          }
          __pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_19, NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
          if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 13513, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_20 = __Pyx_PyObject_IsTrue(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          if (__pyx_t_20 < (0)) __PYX_ERR(0, 13513, __pyx_L9_except_error)
          __pyx_t_21 = (!__pyx_t_20);


          if (unlikely(__pyx_t_21)) {

            __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, 13513, __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[6], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13513, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L6:;
    }
    goto __pyx_L21;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L1_error;
    __pyx_L21:;
  }
+13514:             self._check_not_mid_call('close')
          __pyx_t_9 = ((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_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13514, __pyx_L7_error)

+13515:             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, 13515, __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;
+13516:             try:
          /*try:*/ {
+13517:                 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, 13517, __pyx_L14_error)
          }
 13518:             finally:
+13519:                 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, 13519, __pyx_L7_error)
              goto __pyx_L15;
            }
            __pyx_L14_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;
              {
                ((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, 13519, __pyx_L17_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_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_L7_error;
              __pyx_L17_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_L7_error;
            }
            __pyx_L15:;
          }
 13520: 
+13521:     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_VECTORCALL
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_VECTORCALL
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_VECTORCALL
  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_VECTORCALL
  #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, 13521, __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, 13521, __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, 13521, __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, 13521, __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, 13521, __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, 13521, __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, 13521, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 13521, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 13521, __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, 13521, __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_19 = __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[178])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13521, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledReader, __pyx_mstate_global->__pyx_n_u_exit, __pyx_t_19) < (0)) __PYX_ERR(0, 13521, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+13522:         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, 13522, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 13523: 
+13524:     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_XDECREF(__pyx_t_13);
  __Pyx_WriteUnraisable("questdb._client.PooledReader.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;

  __Pyx_RefNannyFinishContext();
}
+13525:         if self._lock is not None:
  __pyx_t_1 = (__pyx_v_self->_lock != Py_None);
  if (__pyx_t_1) {
/* … */
  }
+13526:             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_13); __pyx_t_13 = 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_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:;
    }
+13527:                 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, 13527, __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, 13527, __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, 13527, __pyx_L10_error)
            __Pyx_GOTREF(__pyx_t_6);
          }
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          /*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_L19_try_end;
              __pyx_L14_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;
              /*except:*/ {
                __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, 13527, __pyx_L16_except_error)
                __Pyx_XGOTREF(__pyx_t_6);
                __Pyx_XGOTREF(__pyx_t_8);
                __Pyx_XGOTREF(__pyx_t_7);
                {
                  PyObject* __pyx_temp[3] = {__pyx_t_6, __pyx_t_8, __pyx_t_7};
                  __pyx_t_13 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 13527, __pyx_L16_except_error)
                  __Pyx_GOTREF(__pyx_t_13);
                }
                __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_13, NULL);
                __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
                if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 13527, __pyx_L16_except_error)
                __Pyx_GOTREF(__pyx_t_14);
                __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_14);
                __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
                if (__pyx_t_1 < (0)) __PYX_ERR(0, 13527, __pyx_L16_except_error)
                __pyx_t_15 = (!__pyx_t_1);


                if (unlikely(__pyx_t_15)) {

                  __Pyx_GIVEREF(__pyx_t_6);
                  __Pyx_GIVEREF(__pyx_t_8);
                  __Pyx_XGIVEREF(__pyx_t_7);
                  __Pyx_ErrRestoreWithState(__pyx_t_6, __pyx_t_8, __pyx_t_7);
                  __pyx_t_6 = 0;  __pyx_t_8 = 0;  __pyx_t_7 = 0; 
                  __PYX_ERR(0, 13527, __pyx_L16_except_error)
                }
                __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_L15_exception_handled;
              }
              __pyx_L16_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_L4_error;
              __pyx_L15_exception_handled:;
              __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_L19_try_end:;
            }
          }
          /*finally:*/ {
            /*normal exit:*/{
              if (__pyx_t_5) {
                __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_mstate_global->__pyx_tuple[6], NULL);
                __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 13527, __pyx_L4_error)
                __Pyx_GOTREF(__pyx_t_12);
                __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
              }
              goto __pyx_L13;
            }
            __pyx_L13:;
          }
          goto __pyx_L23;
          __pyx_L10_error:;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          goto __pyx_L4_error;
          __pyx_L23:;
        }
+13528:                     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, 13528, __pyx_L14_error)
+13529:             except KeyboardInterrupt:
      __pyx_t_16 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_KeyboardInterrupt))));
      if (__pyx_t_16) {
        __Pyx_AddTraceback("questdb._client.PooledReader.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_6) < 0) __PYX_ERR(0, 13529, __pyx_L6_except_error)
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_6);
+13530:                 _rearm_interrupt()
        __pyx_f_7questdb_7_client__rearm_interrupt();
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        goto __pyx_L5_exception_handled;
      }
      goto __pyx_L6_except_error;