Generated by Cython 3.3.1
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_25 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_test, __pyx_t_25) < (0)) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
00002: ## ___ _ ____ ____
00003: ## / _ \ _ _ ___ ___| |_| _ \| __ )
00004: ## | | | | | | |/ _ \/ __| __| | | | _ \
00005: ## | |_| | |_| | __/\__ \ |_| |_| | |_) |
00006: ## \__\_\\__,_|\___||___/\__|____/|____/
00007: ##
00008: ## Copyright (c) 2014-2019 Appsicle
00009: ## Copyright (c) 2019-2024 QuestDB
00010: ##
00011: ## Licensed under the Apache License, Version 2.0 (the "License");
00012: ## you may not use this file except in compliance with the License.
00013: ## You may obtain a copy of the License at
00014: ##
00015: ## http://www.apache.org/licenses/LICENSE-2.0
00016: ##
00017: ## Unless required by applicable law or agreed to in writing, software
00018: ## distributed under the License is distributed on an "AS IS" BASIS,
00019: ## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00020: ## See the License for the specific language governing permissions and
00021: ## limitations under the License.
00022: ##
00023: ################################################################################
00024:
00025: # distutils: language=c
00026: # cython: language_level=3
00027: # cython: binding=True
00028:
00029: # Deliberately NOT `freethreading_compatible=True`. Without it the module
00030: # declares `Py_MOD_GIL_USED`, so importing it on a free-threaded interpreter
00031: # re-enables the GIL -- and that is what currently makes parts of this
00032: # extension safe, notably the OIDC provider's `_renderer`, `_closed` and
00033: # `_interrupt` slots, which native callback threads reach without
00034: # free-threading synchronization.
00035: # `_OIDC_ERRORS_MOD` is another Python-object read/modify/write cache and
00036: # likewise relies on the enabled GIL. The paired OIDC registry dictionaries
00037: # are independently protected by `_OIDC_REGISTRY_LOCK`. Native OIDC raw
00038: # pointers are published monotonically under the GIL; GIL-released reads
00039: # are safe only because each caller retains a strong reference to the
00040: # owning handle/provider until the native call returns. The
00041: # `cp314t` wheels in the CI matrix are therefore usable but gain no
00042: # free-threading benefit, and running them under `PYTHON_GIL=0` is
00043: # unsupported. Making the extension genuinely free-threading safe is a separate
00044: # piece of work; until then this comment is the record of the decision.
00045:
00046: """
00047: API for fast data ingestion into and querying from QuestDB.
00048: """
00049:
+00050: __all__ = [
{
PyObject* __pyx_temp[31] = {__pyx_mstate_global->__pyx_n_u_Char_2, __pyx_mstate_global->__pyx_n_u_ConnectionEvent, __pyx_mstate_global->__pyx_n_u_ConnectionEventKind, __pyx_mstate_global->__pyx_n_u_DateMillis_2, __pyx_mstate_global->__pyx_n_u_ExecDone, __pyx_mstate_global->__pyx_n_u_Geohash_2, __pyx_mstate_global->__pyx_n_u_Long256_2, __pyx_mstate_global->__pyx_n_u_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_PooledReader, __pyx_mstate_global->__pyx_n_u_PooledSender, __pyx_mstate_global->__pyx_n_u_Protocol, __pyx_mstate_global->__pyx_n_u_QueryResult, __pyx_mstate_global->__pyx_n_u_QuestDB, __pyx_mstate_global->__pyx_n_u_QuestDBError, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode, __pyx_mstate_global->__pyx_n_u_QuestDBServerRejectionError, __pyx_mstate_global->__pyx_n_u_QwpWsProgress, __pyx_mstate_global->__pyx_n_u_Sender, __pyx_mstate_global->__pyx_n_u_SenderError, __pyx_mstate_global->__pyx_n_u_SenderErrorCategory, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy, __pyx_mstate_global->__pyx_n_u_SenderTransaction, __pyx_mstate_global->__pyx_n_u_ServerInfo, __pyx_mstate_global->__pyx_n_u_ServerRole, __pyx_mstate_global->__pyx_n_u_ServerTimestamp, __pyx_mstate_global->__pyx_n_u_ServerTimestampType, __pyx_mstate_global->__pyx_n_u_TimestampMicros_2, __pyx_mstate_global->__pyx_n_u_TimestampNanos_2, __pyx_mstate_global->__pyx_n_u_TlsCa, __pyx_mstate_global->__pyx_n_u_UnsupportedDataFrameShapeError, __pyx_mstate_global->__pyx_n_u_WARN_HIGH_RECONNECTS};
__pyx_t_4 = __Pyx_PyList_FromArray(__pyx_temp, 31); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 50, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_all, __pyx_t_4) < (0)) __PYX_ERR(0, 50, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
00051: 'Char',
00052: 'ConnectionEvent',
00053: 'ConnectionEventKind',
00054: 'DateMillis',
00055: 'ExecDone',
00056: 'Geohash',
00057: 'Long256',
00058: 'OidcDeviceAuth',
00059: 'PooledReader',
00060: 'PooledSender',
00061: 'Protocol',
00062: 'QueryResult',
00063: 'QuestDB',
00064: 'QuestDBError',
00065: 'QuestDBErrorCode',
00066: 'QuestDBServerRejectionError',
00067: 'QwpWsProgress',
00068: 'Sender',
00069: 'SenderError',
00070: 'SenderErrorCategory',
00071: 'SenderErrorPolicy',
00072: 'SenderTransaction',
00073: 'ServerInfo',
00074: 'ServerRole',
00075: 'ServerTimestamp',
00076: 'ServerTimestampType',
00077: 'TimestampMicros',
00078: 'TimestampNanos',
00079: 'TlsCa',
00080: 'UnsupportedDataFrameShapeError',
00081: 'WARN_HIGH_RECONNECTS',
00082: ]
00083:
00084: # For prototypes: https://github.com/cython/cython/tree/master/Cython/Includes
00085: from libc.stdint cimport uint8_t, uint16_t, uint64_t, int64_t, int32_t, uint32_t, \
00086: uintptr_t, INT64_MAX, INT64_MIN
00087: from libc.stdlib cimport malloc, calloc, realloc, free, qsort
00088: from libc.string cimport strncmp, memset, memcpy, memcmp, strlen
00089: from libc.math cimport isnan, floor
00090: from cpython.datetime cimport datetime as cp_datetime
00091: from cpython.datetime cimport timedelta as cp_timedelta
00092: from cpython.datetime cimport import_datetime, datetime_new
00093: from cpython.datetime cimport (
00094: PyDateTime_GET_YEAR, PyDateTime_GET_MONTH, PyDateTime_GET_DAY,
00095: PyDateTime_DATE_GET_HOUR, PyDateTime_DATE_GET_MINUTE,
00096: PyDateTime_DATE_GET_SECOND, PyDateTime_DATE_GET_MICROSECOND,
00097: )
00098: from cpython.bool cimport bool
00099: from cpython.ref cimport Py_XDECREF
00100: from cpython.exc cimport PyErr_CheckSignals, PyErr_SetObject
00101: from cpython.weakref cimport PyWeakref_NewRef, PyWeakref_GetRef
00102: from cpython.object cimport (PyObject, PyTypeObject, PyObject_TypeCheck,
00103: PyObject_GenericGetAttr, PyObject_GenericSetAttr)
00104: from cpython.buffer cimport Py_buffer, PyObject_CheckBuffer, \
00105: PyObject_GetBuffer, PyBuffer_Release, PyBUF_SIMPLE
00106: from cpython.pycapsule cimport (PyCapsule_Destructor,
00107: PyCapsule_GetPointer, PyCapsule_IsValid,
00108: PyCapsule_New)
00109: from cpython.pythread cimport (PyThread_tss_create, PyThread_tss_get,
00110: PyThread_tss_set, PyThread_get_thread_ident)
00111: from cpython.pystate cimport PyThreadState_GetDict
00112: from cpython.ref cimport Py_INCREF, Py_DECREF
00113: from cpython.exc cimport PyErr_Fetch, PyErr_Restore
00114:
00115: from .line_sender cimport *
00116: from .rpyutils cimport *
00117: from .conf_str cimport *
00118: from .arrow_c_data_interface cimport *
00119: from .extra_cpython cimport *
00120: from ._client_helper cimport *
00121:
00122: # An int we use only for error reporting.
00123: # 0 is success.
00124: # -1 is failure.
00125: ctypedef int void_int
00126:
00127: import cython
00128:
00129: # Imported before the includes: `oidc.pxi` builds its registry lock and
00130: # registers its shutdown hook at module scope, and an `include` is a text
00131: # splice, so anything it evaluates at import time must already be bound here.
+00132: import threading
__pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_threading, 0, 0, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 132, __pyx_L1_error) __pyx_t_4 = __pyx_t_1; __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_threading, __pyx_t_4) < (0)) __PYX_ERR(0, 132, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+00133: import atexit
__pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_atexit, 0, 0, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 133, __pyx_L1_error) __pyx_t_4 = __pyx_t_1; __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_atexit, __pyx_t_4) < (0)) __PYX_ERR(0, 133, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
00134: # Import logging before oidc.pxi registers its atexit hook. atexit is LIFO:
00135: # this makes the callback-detach drain run before logging.shutdown(), so a
00136: # final token-store diagnostic cannot enter an already-closed FileHandler.
+00137: import logging
__pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_logging, 0, 0, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 137, __pyx_L1_error) __pyx_t_4 = __pyx_t_1; __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_logging, __pyx_t_4) < (0)) __PYX_ERR(0, 137, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
00138: # Imported before the includes because `dataframe.pxi` binds two of its
00139: # classes at module-init time.
+00140: import ipaddress
__pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_ipaddress, 0, 0, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 140, __pyx_L1_error) __pyx_t_4 = __pyx_t_1; __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ipaddress, __pyx_t_4) < (0)) __PYX_ERR(0, 140, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
00141:
00142: include "dataframe.pxi"
00143: include "oidc.pxi"
00144: include "egress.pxi"
00145:
+00146: from enum import Enum
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_Enum};
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_enum, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 146, __pyx_L1_error)
}
__pyx_t_18 = __pyx_t_3;
__Pyx_GOTREF(__pyx_t_18);
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_Enum};
__pyx_t_9 = 0; {
__pyx_t_19 = __Pyx_ImportFrom(__pyx_t_18, __pyx_imported_names[__pyx_t_9]); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 146, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_19);
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_9], __pyx_t_19) < (0)) __PYX_ERR(0, 146, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
}
}
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00147: from typing import (
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_List,__pyx_mstate_global->__pyx_n_u_Dict,__pyx_mstate_global->__pyx_n_u_Union,__pyx_mstate_global->__pyx_n_u_Any,__pyx_mstate_global->__pyx_n_u_Optional,__pyx_mstate_global->__pyx_n_u_SupportsIndex,__pyx_mstate_global->__pyx_n_u_Tuple};
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_typing, __pyx_imported_names, 7, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 147, __pyx_L1_error)
}
__pyx_t_18 = __pyx_t_3;
__Pyx_GOTREF(__pyx_t_18);
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_List,__pyx_mstate_global->__pyx_n_u_Dict,__pyx_mstate_global->__pyx_n_u_Union,__pyx_mstate_global->__pyx_n_u_Any,__pyx_mstate_global->__pyx_n_u_Optional,__pyx_mstate_global->__pyx_n_u_SupportsIndex,__pyx_mstate_global->__pyx_n_u_Tuple};
for (__pyx_t_9=0; __pyx_t_9 < 7; __pyx_t_9++) {
__pyx_t_19 = __Pyx_ImportFrom(__pyx_t_18, __pyx_imported_names[__pyx_t_9]); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 147, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_19);
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_9], __pyx_t_19) < (0)) __PYX_ERR(0, 147, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
}
}
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
00148: List, Dict, Union, Any, Optional, SupportsIndex, Tuple)
+00149: from dataclasses import dataclass
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_dataclass};
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_dataclasses, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 149, __pyx_L1_error)
}
__pyx_t_18 = __pyx_t_3;
__Pyx_GOTREF(__pyx_t_18);
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_dataclass};
__pyx_t_9 = 0; {
__pyx_t_19 = __Pyx_ImportFrom(__pyx_t_18, __pyx_imported_names[__pyx_t_9]); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 149, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_19);
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_9], __pyx_t_19) < (0)) __PYX_ERR(0, 149, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
}
}
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
00150: from cpython.bytes cimport (PyBytes_FromStringAndSize,
00151: PyBytes_GET_SIZE, PyBytes_AsString, PyBytes_Check)
00152: from cpython.bytearray cimport (PyByteArray_AsString, PyByteArray_Size,
00153: PyByteArray_Check)
00154: from cpython.long cimport PyLong_AsLongLongAndOverflow
00155: from cpython.memoryview cimport PyMemoryView_Check
00156:
+00157: import datetime
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_datetime, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 157, __pyx_L1_error) __pyx_t_18 = __pyx_t_3; __Pyx_GOTREF(__pyx_t_18); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_datetime, __pyx_t_18) < (0)) __PYX_ERR(0, 157, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00158: import decimal
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_decimal, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 158, __pyx_L1_error) __pyx_t_18 = __pyx_t_3; __Pyx_GOTREF(__pyx_t_18); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_decimal, __pyx_t_18) < (0)) __PYX_ERR(0, 158, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00159: import operator
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_operator, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 159, __pyx_L1_error) __pyx_t_18 = __pyx_t_3; __Pyx_GOTREF(__pyx_t_18); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_operator, __pyx_t_18) < (0)) __PYX_ERR(0, 159, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00160: import numbers as _numbers
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_numbers_2, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 160, __pyx_L1_error) __pyx_t_18 = __pyx_t_3; __Pyx_GOTREF(__pyx_t_18); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_numbers, __pyx_t_18) < (0)) __PYX_ERR(0, 160, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00161: import os
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_os, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 161, __pyx_L1_error) __pyx_t_18 = __pyx_t_3; __Pyx_GOTREF(__pyx_t_18); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_os, __pyx_t_18) < (0)) __PYX_ERR(0, 161, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00162: import sys
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_sys, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 162, __pyx_L1_error) __pyx_t_18 = __pyx_t_3; __Pyx_GOTREF(__pyx_t_18); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_sys, __pyx_t_18) < (0)) __PYX_ERR(0, 162, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00163: import time
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_time, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 163, __pyx_L1_error) __pyx_t_18 = __pyx_t_3; __Pyx_GOTREF(__pyx_t_18); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_time, __pyx_t_18) < (0)) __PYX_ERR(0, 163, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00164: import uuid
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_uuid, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 164, __pyx_L1_error) __pyx_t_18 = __pyx_t_3; __Pyx_GOTREF(__pyx_t_18); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_uuid, __pyx_t_18) < (0)) __PYX_ERR(0, 164, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00165: import warnings
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_warnings, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 165, __pyx_L1_error) __pyx_t_18 = __pyx_t_3; __Pyx_GOTREF(__pyx_t_18); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_warnings, __pyx_t_18) < (0)) __PYX_ERR(0, 165, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
00166:
+00167: import numpy
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_numpy, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 167, __pyx_L1_error) __pyx_t_18 = __pyx_t_3; __Pyx_GOTREF(__pyx_t_18); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_numpy, __pyx_t_18) < (0)) __PYX_ERR(0, 167, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
00168: cimport numpy as cnp
00169: from numpy cimport NPY_DOUBLE, PyArrayObject
00170:
00171: # Functions we need to import as `PyObject` to avoid Cython's `object` type
00172: from .extra_numpy cimport *
00173:
+00174: cnp.import_array()
__pyx_t_12 = __pyx_f_5numpy_import_array(); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 174, __pyx_L1_error)
+00175: import_datetime()
__pyx_f_7cpython_8datetime_import_datetime();
00176:
+00177: cdef bint _dataframe_columnar_count_io_stats = False
__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats = 0;
+00178: cdef uint64_t _dataframe_columnar_flush_calls = 0
__pyx_v_7questdb_7_client__dataframe_columnar_flush_calls = 0;
+00179: cdef uint64_t _dataframe_columnar_flush_ns = 0
__pyx_v_7questdb_7_client__dataframe_columnar_flush_ns = 0;
+00180: cdef uint64_t _dataframe_columnar_sync_calls = 0
__pyx_v_7questdb_7_client__dataframe_columnar_sync_calls = 0;
+00181: cdef uint64_t _dataframe_columnar_sync_ns = 0
__pyx_v_7questdb_7_client__dataframe_columnar_sync_ns = 0;
+00182: cdef uint64_t _dataframe_columnar_flush_retry_syncs = 0
__pyx_v_7questdb_7_client__dataframe_columnar_flush_retry_syncs = 0;
00183:
+00184: cdef size_t _QWP_MAX_DEFERRED_ARROW_FRAMES = 100
__pyx_v_7questdb_7_client__QWP_MAX_DEFERRED_ARROW_FRAMES = 0x64;
00185:
00186: # Default rows per columnar batch. Only a pipelining-granularity default: the
00187: # column sender splits any frame exceeding the negotiated batch cap regardless
00188: # of this size. Mirrors the Rust core's `DEFAULT_MAX_CHUNK_ROWS`; both sides
00189: # pin the value in tests so it cannot drift. Keep them in sync when changing it.
+00190: DEFAULT_MAX_CHUNK_ROWS = 16384
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_DEFAULT_MAX_CHUNK_ROWS, __pyx_mstate_global->__pyx_int_16384) < (0)) __PYX_ERR(0, 190, __pyx_L1_error)
00191:
00192:
00193: # This value is automatically updated by the `bump2version` tool.
00194: # If you need to update it, also update the search definition in
00195: # .bumpversion.cfg.
+00196: VERSION = '6.1.0'
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_VERSION, __pyx_mstate_global->__pyx_kp_u_6_1_0) < (0)) __PYX_ERR(0, 196, __pyx_L1_error)
00197:
+00198: WARN_HIGH_RECONNECTS = True
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_WARN_HIGH_RECONNECTS, Py_True) < (0)) __PYX_ERR(0, 198, __pyx_L1_error)
00199:
00200:
+00201: cdef bint _has_gil(PyThreadState** gs) noexcept:
static int __pyx_f_7questdb_7_client__has_gil(PyThreadState **__pyx_v_gs) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
+00202: return gs[0] == NULL
{
__pyx_r = ((__pyx_v_gs[0]) == NULL);
}
goto __pyx_L0;
00203:
00204:
+00205: cdef bint _ensure_doesnt_have_gil(PyThreadState** gs) noexcept:
static int __pyx_f_7questdb_7_client__ensure_doesnt_have_gil(PyThreadState **__pyx_v_gs) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
00206: """Returns True if previously had the GIL, False otherwise."""
+00207: if _has_gil(gs):
__pyx_t_1 = __pyx_f_7questdb_7_client__has_gil(__pyx_v_gs);
if (__pyx_t_1) {
/* … */
}
+00208: gs[0] = PyEval_SaveThread()
(__pyx_v_gs[0]) = PyEval_SaveThread();
+00209: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+00210: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
00211:
00212:
+00213: cdef void _ensure_has_gil(PyThreadState** gs) noexcept:
static void __pyx_f_7questdb_7_client__ensure_has_gil(PyThreadState **__pyx_v_gs) {
/* … */
/* function exit code */
}
+00214: if not _has_gil(gs):
__pyx_t_1 = (!__pyx_f_7questdb_7_client__has_gil(__pyx_v_gs));
if (__pyx_t_1) {
/* … */
}
+00215: PyEval_RestoreThread(gs[0])
PyEval_RestoreThread((__pyx_v_gs[0]));
+00216: gs[0] = NULL
(__pyx_v_gs[0]) = NULL;
00217:
00218:
+00219: class QuestDBErrorCode(Enum):
__Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_Enum); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 219, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); { PyObject* __pyx_temp[1] = {__pyx_t_18}; __pyx_t_19 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 219, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); } __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __pyx_t_18 = __pyx_t_19; __Pyx_INCREF(__pyx_t_18); __pyx_t_5 = __Pyx_PEP560_update_bases(__pyx_t_18); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 219, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __pyx_t_18 = __Pyx_CalculateMetaclass(NULL, __pyx_t_5); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 219, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_20 = __Pyx_Py3MetaclassPrepare(__pyx_t_18, __pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_Category_of_Error); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 219, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); if (__pyx_t_5 != __pyx_t_19) { if (unlikely((PyDict_SetItemString(__pyx_t_20, "__orig_bases__", __pyx_t_19) < 0))) __PYX_ERR(0, 219, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; /* … */ __pyx_t_16 = __Pyx_Py3ClassCreate(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode, __pyx_t_5, __pyx_t_20, NULL, 0, 0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 219, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_16); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode, __pyx_t_16) < (0)) __PYX_ERR(0, 219, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
00220: """Category of Error."""
+00221: CouldNotResolveAddr = line_sender_error_could_not_resolve_addr
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_could_not_resolve_addr); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 221, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_CouldNotResolveAddr, __pyx_t_19) < (0)) __PYX_ERR(0, 221, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00222: InvalidApiCall = line_sender_error_invalid_api_call
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_invalid_api_call); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 222, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_InvalidApiCall, __pyx_t_19) < (0)) __PYX_ERR(0, 222, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00223: SocketError = line_sender_error_socket_error
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_socket_error); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 223, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_SocketError, __pyx_t_19) < (0)) __PYX_ERR(0, 223, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00224: InvalidUtf8 = line_sender_error_invalid_utf8
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_invalid_utf8); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 224, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_InvalidUtf8, __pyx_t_19) < (0)) __PYX_ERR(0, 224, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00225: InvalidName = line_sender_error_invalid_name
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_invalid_name); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 225, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_InvalidName, __pyx_t_19) < (0)) __PYX_ERR(0, 225, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00226: InvalidTimestamp = line_sender_error_invalid_timestamp
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_invalid_timestamp); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 226, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp, __pyx_t_19) < (0)) __PYX_ERR(0, 226, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00227: AuthError = line_sender_error_auth_error
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_auth_error); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 227, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_AuthError, __pyx_t_19) < (0)) __PYX_ERR(0, 227, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00228: TlsError = line_sender_error_tls_error
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_tls_error); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 228, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_TlsError, __pyx_t_19) < (0)) __PYX_ERR(0, 228, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00229: HttpNotSupported = line_sender_error_http_not_supported
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_http_not_supported); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 229, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_HttpNotSupported, __pyx_t_19) < (0)) __PYX_ERR(0, 229, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00230: ServerFlushError = line_sender_error_server_flush_error
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_flush_error); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 230, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerFlushError, __pyx_t_19) < (0)) __PYX_ERR(0, 230, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00231: ServerRejection = line_sender_error_server_rejection
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_rejection); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 231, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerRejection, __pyx_t_19) < (0)) __PYX_ERR(0, 231, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00232: RoleMismatch = line_sender_error_role_mismatch
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_role_mismatch); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 232, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_RoleMismatch, __pyx_t_19) < (0)) __PYX_ERR(0, 232, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00233: ConfigError = line_sender_error_config_error
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_config_error); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 233, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ConfigError, __pyx_t_19) < (0)) __PYX_ERR(0, 233, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00234: ArrayError = line_sender_error_array_error
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_array_error); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 234, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ArrayError, __pyx_t_19) < (0)) __PYX_ERR(0, 234, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00235: ProtocolVersionError = line_sender_error_protocol_version_error
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_protocol_version_error); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 235, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ProtocolVersionError, __pyx_t_19) < (0)) __PYX_ERR(0, 235, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00236: DecimalError = line_sender_error_invalid_decimal
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_invalid_decimal); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 236, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_DecimalError, __pyx_t_19) < (0)) __PYX_ERR(0, 236, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00237: ArrowUnsupportedColumnKind = line_sender_error_arrow_unsupported_column_kind
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_arrow_unsupported_column_kind); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 237, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ArrowUnsupportedColumnKind, __pyx_t_19) < (0)) __PYX_ERR(0, 237, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00238: ArrowIngest = line_sender_error_arrow_ingest
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_arrow_ingest); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 238, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ArrowIngest, __pyx_t_19) < (0)) __PYX_ERR(0, 238, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00239: FailoverRetry = line_sender_error_failover_retry
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_failover_retry); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 239, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_FailoverRetry, __pyx_t_19) < (0)) __PYX_ERR(0, 239, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00240: ConnectTimeout = line_sender_error_connect_timeout
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_connect_timeout); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 240, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ConnectTimeout, __pyx_t_19) < (0)) __PYX_ERR(0, 240, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
00241: # Query / reader (egress) categories. The error model is unified across
00242: # ingest and query, so these are real FFI codes (no longer bucketed).
+00243: HandshakeError = line_sender_error_handshake_error
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_handshake_error); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 243, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_HandshakeError, __pyx_t_19) < (0)) __PYX_ERR(0, 243, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00244: UnsupportedServer = line_sender_error_unsupported_server
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_unsupported_server); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 244, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_UnsupportedServer, __pyx_t_19) < (0)) __PYX_ERR(0, 244, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00245: ProtocolError = line_sender_error_protocol_error
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_protocol_error); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 245, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ProtocolError, __pyx_t_19) < (0)) __PYX_ERR(0, 245, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00246: InvalidBind = line_sender_error_invalid_bind
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_invalid_bind); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 246, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_InvalidBind, __pyx_t_19) < (0)) __PYX_ERR(0, 246, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00247: ServerSchemaMismatch = line_sender_error_server_schema_mismatch
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_schema_mismatch); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 247, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerSchemaMismatch, __pyx_t_19) < (0)) __PYX_ERR(0, 247, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00248: ServerParseError = line_sender_error_server_parse_error
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_parse_error); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 248, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerParseError, __pyx_t_19) < (0)) __PYX_ERR(0, 248, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00249: ServerInternalError = line_sender_error_server_internal_error
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_internal_error); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 249, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerInternalError, __pyx_t_19) < (0)) __PYX_ERR(0, 249, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00250: ServerSecurityError = line_sender_error_server_security_error
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_security_error); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 250, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerSecurityError, __pyx_t_19) < (0)) __PYX_ERR(0, 250, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00251: LimitExceeded = line_sender_error_limit_exceeded
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_limit_exceeded); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 251, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_LimitExceeded, __pyx_t_19) < (0)) __PYX_ERR(0, 251, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00252: ServerLimitExceeded = line_sender_error_server_limit_exceeded
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_limit_exceeded); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 252, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerLimitExceeded, __pyx_t_19) < (0)) __PYX_ERR(0, 252, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00253: Cancelled = line_sender_error_cancelled
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_cancelled); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 253, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_Cancelled, __pyx_t_19) < (0)) __PYX_ERR(0, 253, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00254: FailoverWouldDuplicate = line_sender_error_failover_would_duplicate
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_failover_would_duplicate); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 254, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_FailoverWouldDuplicate, __pyx_t_19) < (0)) __PYX_ERR(0, 254, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00255: SchemaDrift = line_sender_error_schema_drift
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_schema_drift); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 255, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_SchemaDrift, __pyx_t_19) < (0)) __PYX_ERR(0, 255, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00256: NoSchema = line_sender_error_no_schema
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_no_schema); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 256, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_NoSchema, __pyx_t_19) < (0)) __PYX_ERR(0, 256, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00257: ArrowExport = line_sender_error_arrow_export
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_arrow_export); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 257, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ArrowExport, __pyx_t_19) < (0)) __PYX_ERR(0, 257, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00258: BatchTooLarge = line_sender_error_batch_too_large
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_batch_too_large); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 258, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_BatchTooLarge, __pyx_t_19) < (0)) __PYX_ERR(0, 258, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00259: StoreResendRequired = line_sender_error_store_resend_required
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_store_resend_required); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 259, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_StoreResendRequired, __pyx_t_19) < (0)) __PYX_ERR(0, 259, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00260: SymbolDictFull = line_sender_error_symbol_dict_full
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_symbol_dict_full); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 260, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_SymbolDictFull, __pyx_t_19) < (0)) __PYX_ERR(0, 260, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00261: QueryTimeout = line_sender_error_query_timeout
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_query_timeout); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 261, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_QueryTimeout, __pyx_t_19) < (0)) __PYX_ERR(0, 261, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
00262: # Python-only sentinel with no backing FFI code: raised by the Cython
00263: # DataFrame-shape validation path. Sits in a reserved high band, disjoint
00264: # from the contiguous FFI code space, so an appended FFI variant can never
00265: # collide with it. Compared by identity; never sent over FFI.
+00266: BadDataFrame = 0x10000
if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_BadDataFrame, __pyx_mstate_global->__pyx_int_65536) < (0)) __PYX_ERR(0, 266, __pyx_L1_error)
00267:
+00268: def __str__(self) -> str:
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_16QuestDBErrorCode_1__str__(PyObject *__pyx_self, #if CYTHON_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, 268, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 268, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__str__", 0) < (0)) __PYX_ERR(0, 268, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__str__", 1, 1, 1, i); __PYX_ERR(0, 268, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 268, __pyx_L3_error) } __pyx_v_self = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__str__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 268, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.QuestDBErrorCode.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_16QuestDBErrorCode___str__(__pyx_self, __pyx_v_self); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_16QuestDBErrorCode___str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("questdb._client.QuestDBErrorCode.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_19 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 268, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_str_2) < (0)) __PYX_ERR(0, 268, __pyx_L1_error) __pyx_t_16 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_16QuestDBErrorCode_1__str__, 0, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode___str, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[116])); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 268, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_16); #endif __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_16, __pyx_t_19); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_str, __pyx_t_16) < (0)) __PYX_ERR(0, 268, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
00269: """Return the name of the enum."""
+00270: return self.name
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 270, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(0, 270, __pyx_L1_error) { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = ((PyObject*)__pyx_t_1); } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
00271:
00272:
+00273: class QuestDBError(Exception):
{
PyObject* __pyx_temp[1] = {((PyObject *)(((PyTypeObject*)PyExc_Exception)))};
__pyx_t_5 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 273, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
__pyx_t_18 = __pyx_t_5;
__Pyx_INCREF(__pyx_t_18);
__pyx_t_20 = __Pyx_PEP560_update_bases(__pyx_t_18); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 273, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_20);
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
__pyx_t_18 = __Pyx_CalculateMetaclass(NULL, __pyx_t_20); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 273, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
__pyx_t_16 = __Pyx_Py3MetaclassPrepare(__pyx_t_18, __pyx_t_20, __pyx_mstate_global->__pyx_n_u_QuestDBError, __pyx_mstate_global->__pyx_n_u_QuestDBError, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_An_error_whilst_using_the_QuestD); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 273, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_16);
if (__pyx_t_20 != __pyx_t_5) {
if (unlikely((PyDict_SetItemString(__pyx_t_16, "__orig_bases__", __pyx_t_5) < 0))) __PYX_ERR(0, 273, __pyx_L1_error)
}
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 273, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
/* … */
__pyx_t_17 = __Pyx_Py3ClassCreate(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_QuestDBError, __pyx_t_20, __pyx_t_16, NULL, 0, 0); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 273, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
#endif
if (__Pyx_CyFunction_InitClassCell(__pyx_t_5, __pyx_t_17) < (0)) __PYX_ERR(0, 273, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_QuestDBError, __pyx_t_17) < (0)) __PYX_ERR(0, 273, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
00274: """An error whilst using the QuestDB client."""
+00275: def __init__(self, code, msg, sender_error=None, *, in_doubt=False):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12QuestDBError_1__init__(PyObject *__pyx_self,
#if CYTHON_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, 275, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 4:
values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 275, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 275, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 275, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 275, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__init__", 0) < (0)) __PYX_ERR(0, 275, __pyx_L3_error)
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));
if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)((PyObject*)Py_False)));
for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 4, i); __PYX_ERR(0, 275, __pyx_L3_error) }
}
} else {
switch (__pyx_nargs) {
case 4:
values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 275, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 275, __pyx_L3_error)
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 275, __pyx_L3_error)
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 275, __pyx_L3_error)
break;
default: goto __pyx_L5_argtuple_error;
}
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));
if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)((PyObject*)Py_False)));
}
__pyx_v_self = values[0];
__pyx_v_code = values[1];
__pyx_v_msg = values[2];
__pyx_v_sender_error = values[3];
__pyx_v_in_doubt = values[4];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 4, __pyx_nargs); __PYX_ERR(0, 275, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.QuestDBError.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_12QuestDBError___init__(__pyx_self, __pyx_v_self, __pyx_v_code, __pyx_v_msg, __pyx_v_sender_error, __pyx_v_in_doubt);
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_12QuestDBError___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_code, PyObject *__pyx_v_msg, PyObject *__pyx_v_sender_error, PyObject *__pyx_v_in_doubt) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client.QuestDBError.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_19 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 275, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_19);
if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_in_doubt, ((PyObject*)Py_False)) < (0)) __PYX_ERR(0, 275, __pyx_L1_error)
__pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12QuestDBError_1__init__, 0, __pyx_mstate_global->__pyx_n_u_QuestDBError___init, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[117])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 275, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
#endif
PyList_Append(__pyx_t_5, __pyx_t_17);
__Pyx_CyFunction_SetDefaultsTuple(__pyx_t_17, __pyx_mstate_global->__pyx_tuple[63]);
__Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_17, __pyx_t_19);
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_init, __pyx_t_17) < (0)) __PYX_ERR(0, 275, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+00276: super().__init__(msg)
__pyx_t_4 = NULL; __pyx_t_5 = __Pyx_CyFunction_GetClassObj(__pyx_self); if (!__pyx_t_5) { PyErr_SetString(PyExc_RuntimeError, "super(): empty __class__ cell"); __PYX_ERR(0, 276, __pyx_L1_error) } __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = 1; { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_5, __pyx_v_self}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_super, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 276, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_t_2 = __pyx_t_3; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_msg}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_init, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 276, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+00277: self._code = code
if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_code_3, __pyx_v_code) < (0)) __PYX_ERR(0, 277, __pyx_L1_error)
+00278: self._sender_error = sender_error
if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_sender_error_2, __pyx_v_sender_error) < (0)) __PYX_ERR(0, 278, __pyx_L1_error)
+00279: self._in_doubt = bool(in_doubt)
__pyx_t_3 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_in_doubt};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 279, __pyx_L1_error)
__Pyx_GOTREF((PyObject *)__pyx_t_1);
}
if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_in_doubt_2, ((PyObject *)__pyx_t_1)) < (0)) __PYX_ERR(0, 279, __pyx_L1_error)
__Pyx_DECREF((PyObject *)__pyx_t_1); __pyx_t_1 = 0;
00280:
+00281: @property
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12QuestDBError_3code(PyObject *__pyx_self, #if CYTHON_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, 281, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 281, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "code", 0) < (0)) __PYX_ERR(0, 281, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("code", 1, 1, 1, i); __PYX_ERR(0, 281, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 281, __pyx_L3_error) } __pyx_v_self = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("code", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 281, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.QuestDBError.code", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_12QuestDBError_2code(__pyx_self, __pyx_v_self); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_12QuestDBError_2code(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("questdb._client.QuestDBError.code", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_19 = NULL; __pyx_t_21 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 281, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_21); if (PyDict_SetItem(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode) < (0)) __PYX_ERR(0, 281, __pyx_L1_error) __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12QuestDBError_3code, 0, __pyx_mstate_global->__pyx_n_u_QuestDBError_code, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[118])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 281, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25); #endif __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_25, __pyx_t_21); __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_19, __pyx_t_25}; __pyx_t_17 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_property, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 281, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); } if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_code, __pyx_t_17) < (0)) __PYX_ERR(0, 281, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
00282: def code(self) -> QuestDBErrorCode:
00283: """Return the error code."""
+00284: return self._code
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_code_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 284, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
00285:
+00286: @property
/* Python wrapper */ static PyLongObject *__pyx_pw_7questdb_7_client_12QuestDBError_5in_doubt(PyObject *__pyx_self, #if CYTHON_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, 286, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 286, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "in_doubt", 0) < (0)) __PYX_ERR(0, 286, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("in_doubt", 1, 1, 1, i); __PYX_ERR(0, 286, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 286, __pyx_L3_error) } __pyx_v_self = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("in_doubt", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 286, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.QuestDBError.in_doubt", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_12QuestDBError_4in_doubt(__pyx_self, __pyx_v_self); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyLongObject *__pyx_pf_7questdb_7_client_12QuestDBError_4in_doubt(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyLongObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("questdb._client.QuestDBError.in_doubt", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF((PyObject *)__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_25 = NULL; __pyx_t_19 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 286, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(0, 286, __pyx_L1_error) __pyx_t_21 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12QuestDBError_5in_doubt, 0, __pyx_mstate_global->__pyx_n_u_QuestDBError_in_doubt, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[119])); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 286, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_21); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_21); #endif __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_21, __pyx_t_19); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_25, __pyx_t_21}; __pyx_t_17 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_property, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0; __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 286, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); } if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_t_17) < (0)) __PYX_ERR(0, 286, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
00287: def in_doubt(self) -> bool:
00288: """
00289: Whether the failed ingestion operation may already have delivered
00290: its input. For QWP ``dataframe()``, this covers the entire DataFrame,
00291: including earlier batches from the same call, even when a later batch
00292: fails local validation. For a sender flush, it describes that flush;
00293: it does not summarize earlier independent calls on the sender.
00294:
00295: Retrying that input when this is true requires an appropriate
00296: application- or table-level deduplication guarantee. A false value says
00297: only that duplicate delivery is not known to be possible; a consumed
00298: one-shot input may still be impossible to replay.
00299: """
+00300: return self._in_doubt
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_in_doubt_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 300, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 300, __pyx_L1_error) { 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;
00301:
+00302: @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, 302, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 302, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "sender_error", 0) < (0)) __PYX_ERR(0, 302, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("sender_error", 1, 1, 1, i); __PYX_ERR(0, 302, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 302, __pyx_L3_error) } __pyx_v_self = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("sender_error", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 302, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.QuestDBError.sender_error", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_12QuestDBError_6sender_error(__pyx_self, __pyx_v_self); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_12QuestDBError_6sender_error(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("questdb._client.QuestDBError.sender_error", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_21 = NULL; __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12QuestDBError_7sender_error, 0, __pyx_mstate_global->__pyx_n_u_QuestDBError_sender_error, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[120])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 302, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25); #endif __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_21, __pyx_t_25}; __pyx_t_17 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_property, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 302, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); } if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_sender_error, __pyx_t_17) < (0)) __PYX_ERR(0, 302, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
00303: def sender_error(self):
00304: """
00305: Return the structured QWP/WebSocket diagnostic, if this error carries
00306: one from a QWP/WebSocket sender failure.
00307: """
+00308: if self._sender_error is not None:
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_sender_error_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 308, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = (__pyx_t_1 != Py_None); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* … */ }
+00309: self._sender_error = _sender_error_from_raw(self._sender_error)
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_sender_error_from_raw); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 309, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_sender_error_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 309, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_6 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_6 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 309, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_sender_error_2, __pyx_t_1) < (0)) __PYX_ERR(0, 309, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+00310: return self._sender_error
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_sender_error_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 310, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
00311:
00312:
+00313: class QuestDBServerRejectionError(QuestDBError):
__Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 313, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); { PyObject* __pyx_temp[1] = {__pyx_t_20}; __pyx_t_18 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 313, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); } __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __pyx_t_20 = __pyx_t_18; __Pyx_INCREF(__pyx_t_20); __pyx_t_16 = __Pyx_PEP560_update_bases(__pyx_t_20); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 313, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __pyx_t_20 = __Pyx_CalculateMetaclass(NULL, __pyx_t_16); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 313, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __pyx_t_17 = __Pyx_Py3MetaclassPrepare(__pyx_t_20, __pyx_t_16, __pyx_mstate_global->__pyx_n_u_QuestDBServerRejectionError, __pyx_mstate_global->__pyx_n_u_QuestDBServerRejectionError, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_A_terminal_QWP_WebSocket_server); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 313, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); if (__pyx_t_16 != __pyx_t_18) { if (unlikely((PyDict_SetItemString(__pyx_t_17, "__orig_bases__", __pyx_t_18) < 0))) __PYX_ERR(0, 313, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __pyx_t_18 = __Pyx_Py3ClassCreate(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_QuestDBServerRejectionError, __pyx_t_16, __pyx_t_17, NULL, 0, 0); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 313, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_QuestDBServerRejectionError, __pyx_t_18) < (0)) __PYX_ERR(0, 313, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __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;
00314: """
00315: A terminal QWP/WebSocket server rejection.
00316:
00317: The structured server payload is available through
00318: :attr:`QuestDBError.sender_error`.
00319: """
00320:
00321:
+00322: class UnsupportedDataFrameShapeError(QuestDBError):
__Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 322, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); { PyObject* __pyx_temp[1] = {__pyx_t_16}; __pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 322, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); } __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = __pyx_t_20; __Pyx_INCREF(__pyx_t_16); __pyx_t_17 = __Pyx_PEP560_update_bases(__pyx_t_16); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 322, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = __Pyx_CalculateMetaclass(NULL, __pyx_t_17); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 322, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_18 = __Pyx_Py3MetaclassPrepare(__pyx_t_16, __pyx_t_17, __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_18)) __PYX_ERR(0, 322, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__pyx_t_17 != __pyx_t_20) { if (unlikely((PyDict_SetItemString(__pyx_t_18, "__orig_bases__", __pyx_t_20) < 0))) __PYX_ERR(0, 322, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __pyx_t_20 = PyList_New(0); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 322, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); /* … */ __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_UnsupportedDataFrameShapeError, __pyx_t_17, __pyx_t_18, NULL, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 322, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5); #endif if (__Pyx_CyFunction_InitClassCell(__pyx_t_20, __pyx_t_5) < (0)) __PYX_ERR(0, 322, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_UnsupportedDataFrameShapeError, __pyx_t_5) < (0)) __PYX_ERR(0, 322, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
00323: """
00324: A DataFrame shape is not supported by the optimized columnar client path.
00325:
00326: ``column_failures`` carries structured per-column rejection details where
00327: available; each is a ``dict`` with ``column`` (name or ``None`` for a
00328: whole-frame issue), ``target``, ``source_code``, and ``reason``. The same
00329: per-column reasons are also folded into ``str(exc)`` so a bare
00330: ``print(exc)`` explains *why* the frame was rejected, and — when the
00331: designated timestamp is at fault — how to fix it on
00332: :meth:`QuestDB.dataframe` (name a valid timestamp column, or pass
00333: ``ServerTimestamp``).
00334: """
+00335: def __init__(self, msg, column_failures=None):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_30UnsupportedDataFrameShapeError_1__init__(PyObject *__pyx_self,
#if CYTHON_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, 335, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 335, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 335, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 335, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__init__", 0) < (0)) __PYX_ERR(0, 335, __pyx_L3_error)
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 3, i); __PYX_ERR(0, 335, __pyx_L3_error) }
}
} else {
switch (__pyx_nargs) {
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 335, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 335, __pyx_L3_error)
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 335, __pyx_L3_error)
break;
default: goto __pyx_L5_argtuple_error;
}
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
}
__pyx_v_self = values[0];
__pyx_v_msg = values[1];
__pyx_v_column_failures = values[2];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 335, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.UnsupportedDataFrameShapeError.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_30UnsupportedDataFrameShapeError___init__(__pyx_self, __pyx_v_self, __pyx_v_msg, __pyx_v_column_failures);
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_30UnsupportedDataFrameShapeError___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_msg, PyObject *__pyx_v_column_failures) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_AddTraceback("questdb._client.UnsupportedDataFrameShapeError.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_30UnsupportedDataFrameShapeError_1__init__, 0, __pyx_mstate_global->__pyx_n_u_UnsupportedDataFrameShapeError_2, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[121])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 335, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
#endif
PyList_Append(__pyx_t_20, __pyx_t_5);
__Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_mstate_global->__pyx_tuple[63]);
if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_init, __pyx_t_5) < (0)) __PYX_ERR(0, 335, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+00336: self.column_failures = tuple(column_failures or ())
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_column_failures); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 336, __pyx_L1_error) if (!__pyx_t_2) { } else { __Pyx_INCREF(__pyx_v_column_failures); __pyx_t_1 = __pyx_v_column_failures; goto __pyx_L3_bool_binop_done; } __Pyx_INCREF(__pyx_mstate_global->__pyx_empty_tuple); __pyx_t_1 = __pyx_mstate_global->__pyx_empty_tuple; __pyx_L3_bool_binop_done:; __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 336, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_column_failures, __pyx_t_3) < (0)) __PYX_ERR(0, 336, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+00337: super().__init__(
__pyx_t_5 = NULL; __pyx_t_6 = __Pyx_CyFunction_GetClassObj(__pyx_self); if (!__pyx_t_6) { PyErr_SetString(PyExc_RuntimeError, "super(): empty __class__ cell"); __PYX_ERR(0, 337, __pyx_L1_error) } __Pyx_INCREF(__pyx_t_6); __pyx_t_7 = 1; { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_v_self}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_super, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 337, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_1 = __pyx_t_4; __Pyx_INCREF(__pyx_t_1);
+00338: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 338, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 338, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+00339: _format_unsupported_dataframe_msg(msg, self.column_failures))
__pyx_t_6 = __pyx_v_msg; __Pyx_INCREF(__pyx_t_6); if (!(likely(PyUnicode_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_6))) __PYX_ERR(0, 339, __pyx_L1_error) __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_column_failures); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 339, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); if (!(likely(PyTuple_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_8))) __PYX_ERR(0, 339, __pyx_L1_error) __pyx_t_9 = __pyx_f_7questdb_7_client__format_unsupported_dataframe_msg(((PyObject*)__pyx_t_6), ((PyObject*)__pyx_t_8)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 339, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_7 = 0; { PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_5, __pyx_t_9}; __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_init, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 337, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
00340:
00341:
+00342: cdef str _format_unsupported_dataframe_msg(str msg, tuple column_failures):
static PyObject *__pyx_f_7questdb_7_client__format_unsupported_dataframe_msg(PyObject *__pyx_v_msg, PyObject *__pyx_v_column_failures) {
PyObject *__pyx_v_lines = 0;
PyObject *__pyx_v_failure = 0;
PyObject *__pyx_v_column = 0;
PyObject *__pyx_v_reason = 0;
int __pyx_v_ts_related;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_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;
}
00343: # Surface the per-column reasons (otherwise stranded on the
00344: # `.column_failures` attribute) so a plain `str(exc)` says what to fix
00345: # instead of a bare "columnar v1". When the designated timestamp is the
00346: # problem, point at the two client-side remedies (name a valid column,
00347: # or let the server stamp) — keeping the user on QuestDB.dataframe()
00348: # rather than steering them off to the row path.
+00349: if not column_failures:
if (__pyx_v_column_failures == Py_None) __pyx_t_1 = 0;
else
{
Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_v_column_failures);
if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 349, __pyx_L1_error)
__pyx_t_1 = (__pyx_temp != 0);
}
__pyx_t_2 = (!__pyx_t_1);
if (__pyx_t_2) {
/* … */
}
+00350: return msg
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_msg);
__pyx_r = __pyx_v_msg;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+00351: cdef list lines = [msg]
__pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 351, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_msg); __Pyx_GIVEREF(__pyx_v_msg); if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_v_msg) != (0)) __PYX_ERR(0, 351, __pyx_L1_error); __pyx_v_lines = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0;
00352: cdef object failure, column, reason
+00353: cdef bint ts_related = False
__pyx_v_ts_related = 0;
+00354: for failure in column_failures:
if (unlikely(__pyx_v_column_failures == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not iterable");
__PYX_ERR(0, 354, __pyx_L1_error)
}
__pyx_t_3 = __pyx_v_column_failures; __Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
for (;;) {
{
Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3);
#if !CYTHON_ASSUME_SAFE_SIZE
if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 354, __pyx_L1_error)
#endif
if (__pyx_t_4 >= __pyx_temp) break;
}
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
__pyx_t_5 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4));
#else
__pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4);
#endif
++__pyx_t_4;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 354, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_XDECREF_SET(__pyx_v_failure, __pyx_t_5);
__pyx_t_5 = 0;
/* … */
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+00355: if isinstance(failure, dict):
__pyx_t_2 = PyDict_Check(__pyx_v_failure);
if (__pyx_t_2) {
/* … */
goto __pyx_L6;
}
+00356: column = failure.get('column')
__pyx_t_6 = __pyx_v_failure;
__Pyx_INCREF(__pyx_t_6);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_n_u_column_2};
__pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 356, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
__Pyx_XDECREF_SET(__pyx_v_column, __pyx_t_5);
__pyx_t_5 = 0;
+00357: reason = failure.get('reason', failure)
__pyx_t_6 = __pyx_v_failure;
__Pyx_INCREF(__pyx_t_6);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_mstate_global->__pyx_n_u_reason, __pyx_v_failure};
__pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 357, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
__Pyx_XDECREF_SET(__pyx_v_reason, __pyx_t_5);
__pyx_t_5 = 0;
+00358: if (failure.get('target') == 'designated timestamp'
__pyx_t_6 = __pyx_v_failure;
__Pyx_INCREF(__pyx_t_6);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_n_u_target};
__pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 358, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
__pyx_t_1 = __Pyx_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, 358, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (!__pyx_t_1) {
} else {
__pyx_t_2 = __pyx_t_1;
goto __pyx_L8_bool_binop_done;
}
/* … */
if (__pyx_t_2) {
/* … */
}
+00359: or 'ServerTimestamp' in str(reason)):
__pyx_t_5 = __Pyx_PyObject_Unicode(__pyx_v_reason); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 359, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_1 = (__Pyx_PyUnicode_ContainsTF(__pyx_mstate_global->__pyx_n_u_ServerTimestamp, __pyx_t_5, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 359, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_2 = __pyx_t_1; __pyx_L8_bool_binop_done:;
+00360: ts_related = True
__pyx_v_ts_related = 1;
00361: else:
+00362: column, reason = None, failure
/*else*/ {
__pyx_t_5 = Py_None;
__Pyx_INCREF(__pyx_t_5);
__pyx_t_6 = __pyx_v_failure;
__Pyx_INCREF(__pyx_t_6);
__Pyx_XDECREF_SET(__pyx_v_column, __pyx_t_5);
__pyx_t_5 = 0;
__Pyx_XDECREF_SET(__pyx_v_reason, __pyx_t_6);
__pyx_t_6 = 0;
}
__pyx_L6:;
+00363: if column is not None:
__pyx_t_2 = (__pyx_v_column != Py_None);
if (__pyx_t_2) {
/* … */
goto __pyx_L10;
}
+00364: lines.append(f' - column {column!r}: {reason}')
__pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_column), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 364, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_v_reason, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 364, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_column_4; __pyx_t_8[1] = __pyx_t_6; __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u__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, 364, __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, 364, __pyx_L1_error) __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
00365: else:
+00366: 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, 366, __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, 366, __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, 366, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
}
__pyx_L10:;
+00367: if ts_related:
if (__pyx_v_ts_related) {
/* … */
}
+00368: lines.append(
__pyx_t_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, 368, __pyx_L1_error)
00369: " For the designated timestamp, name a valid timestamp column "
00370: "with at='<column>', or pass at=ServerTimestamp to have the "
00371: "server assign each row's timestamp on arrival.")
+00372: return '\n'.join(lines)
__pyx_t_3 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__25, __pyx_v_lines); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 372, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = ((PyObject*)__pyx_t_3); } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
00373:
00374:
+00375: cdef inline object c_err_code_to_py(line_sender_error_code code):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_c_err_code_to_py(enum line_sender_error_code __pyx_v_code) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.c_err_code_to_py", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+00376: if code == line_sender_error_could_not_resolve_addr:
switch (__pyx_v_code) {
case line_sender_error_could_not_resolve_addr:
/* … */
break;
case line_sender_error_invalid_api_call:
+00377: return QuestDBErrorCode.CouldNotResolveAddr
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 377, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_CouldNotResolveAddr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 377, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { 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_api_call:
break;
case line_sender_error_socket_error:
+00379: return QuestDBErrorCode.InvalidApiCall
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 379, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 379, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { 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_socket_error:
break;
case line_sender_error_invalid_utf8:
+00381: return QuestDBErrorCode.SocketError
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 381, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_SocketError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 381, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { 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_invalid_utf8:
break;
case line_sender_error_invalid_name:
+00383: return QuestDBErrorCode.InvalidUtf8
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidUtf8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { 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_invalid_name:
break;
case line_sender_error_invalid_timestamp:
+00385: return QuestDBErrorCode.InvalidName
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 385, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_InvalidName); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 385, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { 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_invalid_timestamp:
break;
case line_sender_error_auth_error:
+00387: return QuestDBErrorCode.InvalidTimestamp
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 387, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 387, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { 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_auth_error:
break;
case line_sender_error_tls_error:
+00389: return QuestDBErrorCode.AuthError
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 389, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_AuthError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 389, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { 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_tls_error:
break;
case line_sender_error_http_not_supported:
+00391: return QuestDBErrorCode.TlsError
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 391, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_TlsError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 391, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { 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_http_not_supported:
break;
case line_sender_error_server_flush_error:
+00393: return QuestDBErrorCode.HttpNotSupported
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 393, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_HttpNotSupported); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 393, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { 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_server_flush_error:
break;
case line_sender_error_server_rejection:
+00395: return QuestDBErrorCode.ServerFlushError
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 395, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 395, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { 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_rejection:
break;
case line_sender_error_role_mismatch:
+00397: return QuestDBErrorCode.ServerRejection
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 397, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ServerRejection); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 397, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { 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_role_mismatch:
break;
case line_sender_error_config_error:
+00399: return QuestDBErrorCode.RoleMismatch
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 399, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_RoleMismatch); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 399, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { 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_config_error:
break;
case line_sender_error_array_error:
+00401: return QuestDBErrorCode.ConfigError
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 401, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 401, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { 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_array_error:
break;
case line_sender_error_protocol_version_error:
+00403: return QuestDBErrorCode.ArrayError
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 403, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ArrayError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 403, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { 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_protocol_version_error:
break;
case line_sender_error_invalid_decimal:
+00405: return QuestDBErrorCode.ProtocolVersionError
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 405, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ProtocolVersionError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 405, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { 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_invalid_decimal:
break;
case line_sender_error_arrow_unsupported_column_kind:
+00407: return QuestDBErrorCode.DecimalError
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 407, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_DecimalError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 407, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { 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_arrow_unsupported_column_kind:
break;
case line_sender_error_arrow_ingest:
+00409: return QuestDBErrorCode.ArrowUnsupportedColumnKind
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 409, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ArrowUnsupportedColumnKind); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 409, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { 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_arrow_ingest:
break;
case line_sender_error_failover_retry:
+00411: return QuestDBErrorCode.ArrowIngest
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 411, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ArrowIngest); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 411, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { 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_failover_retry:
break;
case line_sender_error_connect_timeout:
+00413: return QuestDBErrorCode.FailoverRetry
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 413, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_FailoverRetry); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 413, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { 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_connect_timeout:
break;
case line_sender_error_handshake_error:
+00415: return QuestDBErrorCode.ConnectTimeout
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 415, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ConnectTimeout); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { 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_handshake_error:
break;
case line_sender_error_unsupported_server:
+00417: return QuestDBErrorCode.HandshakeError
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 417, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_HandshakeError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 417, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { 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_unsupported_server:
break;
case line_sender_error_protocol_error:
+00419: return QuestDBErrorCode.UnsupportedServer
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 419, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_UnsupportedServer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 419, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { 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_protocol_error:
break;
case line_sender_error_invalid_bind:
+00421: return QuestDBErrorCode.ProtocolError
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 421, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ProtocolError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 421, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { 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_invalid_bind:
break;
case line_sender_error_server_schema_mismatch:
+00423: return QuestDBErrorCode.InvalidBind
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 423, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidBind); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 423, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { 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_server_schema_mismatch:
break;
case line_sender_error_server_parse_error:
+00425: return QuestDBErrorCode.ServerSchemaMismatch
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 425, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ServerSchemaMismatch); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 425, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+00426: elif code == line_sender_error_server_parse_error:
break;
case line_sender_error_server_internal_error:
+00427: return QuestDBErrorCode.ServerParseError
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 427, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ServerParseError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 427, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+00428: elif code == line_sender_error_server_internal_error:
break;
case line_sender_error_server_security_error:
+00429: return QuestDBErrorCode.ServerInternalError
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 429, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ServerInternalError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 429, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+00430: elif code == line_sender_error_server_security_error:
break;
case line_sender_error_limit_exceeded:
+00431: return QuestDBErrorCode.ServerSecurityError
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 431, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ServerSecurityError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 431, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+00432: elif code == line_sender_error_limit_exceeded:
break;
case line_sender_error_server_limit_exceeded:
+00433: return QuestDBErrorCode.LimitExceeded
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 433, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_LimitExceeded); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 433, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+00434: elif code == line_sender_error_server_limit_exceeded:
break;
case line_sender_error_cancelled:
+00435: return QuestDBErrorCode.ServerLimitExceeded
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 435, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ServerLimitExceeded); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 435, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+00436: elif code == line_sender_error_cancelled:
break;
case line_sender_error_failover_would_duplicate:
+00437: return QuestDBErrorCode.Cancelled
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 437, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_Cancelled); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 437, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+00438: elif code == line_sender_error_failover_would_duplicate:
break;
case line_sender_error_schema_drift:
+00439: return QuestDBErrorCode.FailoverWouldDuplicate
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 439, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_FailoverWouldDuplicate); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 439, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+00440: elif code == line_sender_error_schema_drift:
break;
case line_sender_error_no_schema:
+00441: return QuestDBErrorCode.SchemaDrift
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 441, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_SchemaDrift); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 441, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+00442: elif code == line_sender_error_no_schema:
break;
case line_sender_error_arrow_export:
+00443: return QuestDBErrorCode.NoSchema
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 443, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_NoSchema); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 443, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+00444: elif code == line_sender_error_arrow_export:
break;
case line_sender_error_batch_too_large:
+00445: return QuestDBErrorCode.ArrowExport
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 445, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ArrowExport); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 445, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+00446: elif code == line_sender_error_batch_too_large:
break;
case line_sender_error_store_resend_required:
+00447: return QuestDBErrorCode.BatchTooLarge
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 447, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_BatchTooLarge); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 447, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+00448: elif code == line_sender_error_store_resend_required:
break;
case line_sender_error_symbol_dict_full:
+00449: return QuestDBErrorCode.StoreResendRequired
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 449, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_StoreResendRequired); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 449, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+00450: elif code == line_sender_error_symbol_dict_full:
break;
case line_sender_error_query_timeout:
+00451: return QuestDBErrorCode.SymbolDictFull
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 451, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_SymbolDictFull); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 451, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+00452: elif code == line_sender_error_query_timeout:
break;
default:
+00453: return QuestDBErrorCode.QueryTimeout
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QueryTimeout); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
00454: else:
+00455: raise ValueError('Internal error converting error code.')
__pyx_t_1 = NULL;
__pyx_t_3 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_mstate_global->__pyx_kp_u_Internal_error_converting_error};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 455, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 455, __pyx_L1_error)
break;
}
00456:
00457:
+00458: def _debug_error_code_to_py(int raw_code):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_83_debug_error_code_to_py(PyObject *__pyx_self, #if CYTHON_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_82_debug_error_code_to_py, "Internal ABI test hook for the native-to-Python error mapping."); static PyMethodDef __pyx_mdef_7questdb_7_client_83_debug_error_code_to_py = {"_debug_error_code_to_py", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_83_debug_error_code_to_py, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_82_debug_error_code_to_py}; static PyObject *__pyx_pw_7questdb_7_client_83_debug_error_code_to_py(PyObject *__pyx_self, #if CYTHON_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, 458, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 458, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_error_code_to_py", 0) < (0)) __PYX_ERR(0, 458, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_error_code_to_py", 1, 1, 1, i); __PYX_ERR(0, 458, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 458, __pyx_L3_error) } __pyx_v_raw_code = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_raw_code == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 458, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_debug_error_code_to_py", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 458, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client._debug_error_code_to_py", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_82_debug_error_code_to_py(__pyx_self, __pyx_v_raw_code); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_82_debug_error_code_to_py(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_raw_code) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("questdb._client._debug_error_code_to_py", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_83_debug_error_code_to_py, 0, __pyx_mstate_global->__pyx_n_u_debug_error_code_to_py, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[122])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 458, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_error_code_to_py, __pyx_t_17) < (0)) __PYX_ERR(0, 458, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
00459: """Internal ABI test hook for the native-to-Python error mapping."""
+00460: return c_err_code_to_py(<line_sender_error_code>raw_code)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_code_to_py(((enum line_sender_error_code)__pyx_v_raw_code)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 460, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
00461:
00462:
+00463: cdef inline object c_sender_error_view_to_raw(
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_c_sender_error_view_to_raw(struct line_sender_qwpws_error_view __pyx_v_view) {
PyObject *__pyx_v_message = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client.c_sender_error_view_to_raw", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_message);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00464: line_sender_qwpws_error_view view):
00465: cdef object message
+00466: if view.message == NULL:
__pyx_t_1 = (__pyx_v_view.message == NULL);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+00467: message = ''
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u__6);
__pyx_v_message = __pyx_mstate_global->__pyx_kp_u__6;
00468: else:
+00469: message = PyUnicode_FromStringAndSize(
/*else*/ {
/* … */
__pyx_t_2 = PyUnicode_FromStringAndSize(__pyx_v_view.message, ((Py_ssize_t)__pyx_v_view.message_len)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 469, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_v_message = __pyx_t_2;
__pyx_t_2 = 0;
}
__pyx_L3:;
00470: view.message, <Py_ssize_t>view.message_len)
00471: return (
+00472: <int>view.category,
__pyx_t_2 = __Pyx_PyLong_From_int(((int)__pyx_v_view.category)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 472, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); /* … */ __pyx_t_8 = PyTuple_New(7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 472, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_GIVEREF(__pyx_t_2); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 472, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_3); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_3) != (0)) __PYX_ERR(0, 472, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_4); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_4) != (0)) __PYX_ERR(0, 472, __pyx_L1_error); __Pyx_INCREF(__pyx_v_message); __Pyx_GIVEREF(__pyx_v_message); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_v_message) != (0)) __PYX_ERR(0, 472, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_5); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 4, __pyx_t_5) != (0)) __PYX_ERR(0, 472, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_6); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 5, __pyx_t_6) != (0)) __PYX_ERR(0, 472, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_7); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 6, __pyx_t_7) != (0)) __PYX_ERR(0, 472, __pyx_L1_error); __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_8; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_8 = 0; goto __pyx_L0;
+00473: <int>view.applied_policy,
__pyx_t_3 = __Pyx_PyLong_From_int(((int)__pyx_v_view.applied_policy)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 473, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3);
+00474: view.status if view.has_status else None,
__pyx_t_1 = (__pyx_v_view.has_status != 0);
if (__pyx_t_1) {
__pyx_t_5 = __Pyx_PyLong_From_uint8_t(__pyx_v_view.status); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 474, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_4 = __pyx_t_5;
__pyx_t_5 = 0;
} else {
__Pyx_INCREF(Py_None);
__pyx_t_4 = Py_None;
}
00475: message,
+00476: view.message_sequence if view.has_message_sequence else None,
__pyx_t_1 = (__pyx_v_view.has_message_sequence != 0);
if (__pyx_t_1) {
__pyx_t_6 = __Pyx_PyLong_From_uint64_t(__pyx_v_view.message_sequence); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 476, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_5 = __pyx_t_6;
__pyx_t_6 = 0;
} else {
__Pyx_INCREF(Py_None);
__pyx_t_5 = Py_None;
}
+00477: view.from_fsn,
__pyx_t_6 = __Pyx_PyLong_From_uint64_t(__pyx_v_view.from_fsn); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 477, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6);
+00478: view.to_fsn)
__pyx_t_7 = __Pyx_PyLong_From_uint64_t(__pyx_v_view.to_fsn); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 478, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7);
00479:
00480:
00481: # Rotating Bearer-token providers. Included here, after the error classes it
00482: # subclasses at import time.
00483: include "token_provider.pxi"
00484:
00485:
+00486: cdef inline object c_err_to_fields(questdb_error* err):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_c_err_to_fields(questdb_error *__pyx_v_err) {
questdb_error_code __pyx_v_code;
size_t __pyx_v_c_len;
char const *__pyx_v_c_msg;
struct line_sender_qwpws_error_view __pyx_v_qwp_ws_view;
int __pyx_v_in_doubt;
PyObject *__pyx_v_py_msg = 0;
PyObject *__pyx_v_py_code = 0;
PyObject *__pyx_v_py_sender_error = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client.c_err_to_fields", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_py_msg);
__Pyx_XDECREF(__pyx_v_py_code);
__Pyx_XDECREF(__pyx_v_py_sender_error);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00487: """Extract ``QuestDBError`` fields from a C error, which will be freed."""
+00488: if err == NULL:
__pyx_t_1 = (__pyx_v_err == NULL);
if (__pyx_t_1) {
/* … */
}
00489: return (
+00490: QuestDBErrorCode.SocketError,
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 490, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_SocketError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 490, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* … */ __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 490, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_3); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3) != (0)) __PYX_ERR(0, 490, __pyx_L1_error); __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_Unknown_error_the_client_library); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_kp_u_Unknown_error_the_client_library); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_mstate_global->__pyx_kp_u_Unknown_error_the_client_library) != (0)) __PYX_ERR(0, 490, __pyx_L1_error); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, Py_None) != (0)) __PYX_ERR(0, 490, __pyx_L1_error); __Pyx_INCREF(Py_False); __Pyx_GIVEREF(Py_False); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 3, Py_False) != (0)) __PYX_ERR(0, 490, __pyx_L1_error); __pyx_t_3 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
00491: 'Unknown error: the client library reported failure without '
00492: 'a diagnostic.',
00493: None,
00494: False)
+00495: cdef questdb_error_code code = questdb_error_get_code(err)
__pyx_v_code = questdb_error_get_code(__pyx_v_err);
+00496: cdef size_t c_len = 0
__pyx_v_c_len = 0;
+00497: cdef const char* c_msg = questdb_error_msg(err, &c_len)
__pyx_v_c_msg = questdb_error_msg(__pyx_v_err, (&__pyx_v_c_len));
00498: cdef line_sender_qwpws_error_view qwp_ws_view
+00499: cdef bint in_doubt = questdb_error_in_doubt(err)
__pyx_v_in_doubt = questdb_error_in_doubt(__pyx_v_err);
00500: cdef object py_msg
00501: cdef object py_code
+00502: cdef object py_sender_error = None
__Pyx_INCREF(Py_None);
__pyx_v_py_sender_error = Py_None;
+00503: try:
/*try:*/ {
+00504: py_code = c_err_code_to_py(code)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_code_to_py(__pyx_v_code); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 504, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_py_code = __pyx_t_2; __pyx_t_2 = 0;
+00505: py_msg = PyUnicode_FromStringAndSize(c_msg, <Py_ssize_t>c_len)
__pyx_t_2 = PyUnicode_FromStringAndSize(__pyx_v_c_msg, ((Py_ssize_t)__pyx_v_c_len)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 505, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_py_msg = __pyx_t_2; __pyx_t_2 = 0;
+00506: if line_sender_error_qwpws_get_view(err, &qwp_ws_view):
__pyx_t_1 = line_sender_error_qwpws_get_view(__pyx_v_err, (&__pyx_v_qwp_ws_view));
if (__pyx_t_1) {
/* … */
}
+00507: py_sender_error = c_sender_error_view_to_raw(qwp_ws_view)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_sender_error_view_to_raw(__pyx_v_qwp_ws_view); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 507, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF_SET(__pyx_v_py_sender_error, __pyx_t_2); __pyx_t_2 = 0;
+00508: return (py_code, py_msg, py_sender_error, in_doubt)
__pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_in_doubt); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 508, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 508, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_py_code); __Pyx_GIVEREF(__pyx_v_py_code); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_py_code) != (0)) __PYX_ERR(0, 508, __pyx_L5_error); __Pyx_INCREF(__pyx_v_py_msg); __Pyx_GIVEREF(__pyx_v_py_msg); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_py_msg) != (0)) __PYX_ERR(0, 508, __pyx_L5_error); __Pyx_INCREF(__pyx_v_py_sender_error); __Pyx_GIVEREF(__pyx_v_py_sender_error); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_py_sender_error) != (0)) __PYX_ERR(0, 508, __pyx_L5_error); __Pyx_GIVEREF(__pyx_t_2); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_2) != (0)) __PYX_ERR(0, 508, __pyx_L5_error); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L4_return; }
00509: finally:
+00510: questdb_error_free(err)
/*finally:*/ {
__pyx_L5_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
if ( unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
{
questdb_error_free(__pyx_v_err);
/* … */
questdb_error_free(__pyx_v_err);
+00511: _oidc_raise_unscheduled_main()
__pyx_t_13 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 511, __pyx_L9_error) } __Pyx_XGIVEREF(__pyx_t_10); __Pyx_XGIVEREF(__pyx_t_11); __Pyx_XGIVEREF(__pyx_t_12); __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); __Pyx_XGIVEREF(__pyx_t_7); __Pyx_XGIVEREF(__pyx_t_8); __Pyx_XGIVEREF(__pyx_t_9); __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9); __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6; goto __pyx_L1_error; __pyx_L9_error:; __Pyx_XGIVEREF(__pyx_t_10); __Pyx_XGIVEREF(__pyx_t_11); __Pyx_XGIVEREF(__pyx_t_12); __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; goto __pyx_L1_error; } __pyx_L4_return: { __pyx_t_12 = __pyx_r; __pyx_r = 0; /* … */ __pyx_t_13 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 511, __pyx_L1_error) __pyx_r = __pyx_t_12; __pyx_t_12 = 0; goto __pyx_L0; } }
00512:
00513:
+00514: cdef inline object c_err_to_py(line_sender_error* err):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_c_err_to_py(struct line_sender_error *__pyx_v_err) {
struct questdb_oidc_error_view __pyx_v_oidc_view;
PyObject *__pyx_v_token_exc = 0;
PyObject *__pyx_v_tup = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_AddTraceback("questdb._client.c_err_to_py", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_token_exc);
__Pyx_XDECREF(__pyx_v_tup);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00515: """Build the Python exception for a C error, which will be freed.
00516:
00517: Returns an ``OidcError`` (from ``questdb.auth``) when the native error has
00518: an OIDC failure anywhere in its causal chain -- reachable only on an
00519: ``oidc_auth`` transport -- or ``TokenUnavailableError`` for a generic
00520: provider failure; otherwise a plain ``QuestDBError`` subclass.
00521:
00522: Note the native predicate is "caused by", not "is": a transport that
00523: re-classifies an error keeps the auth payload attached, so a flush or
00524: failover failure whose root cause was a token refresh also lands here, with
00525: the transport's own ``code`` and message preserved by
00526: ``_oidc_err_to_py``. That is why ``OidcError`` must stay a ``QuestDBError``
00527: subclass -- ``except QuestDBError`` keeps catching every such error --
00528: while ``except OidcError`` (or a typed subclass) additionally selects the
00529: ones an auth failure is behind.
00530: """
00531: cdef questdb_oidc_error_view oidc_view
00532: cdef object token_exc
+00533: if err != NULL:
__pyx_t_1 = (__pyx_v_err != NULL);
if (__pyx_t_1) {
/* … */
}
+00534: memset(&oidc_view, 0, sizeof(questdb_oidc_error_view))
(void)(memset((&__pyx_v_oidc_view), 0, (sizeof(struct questdb_oidc_error_view))));
+00535: oidc_view.struct_size = sizeof(questdb_oidc_error_view)
__pyx_v_oidc_view.struct_size = (sizeof(struct questdb_oidc_error_view));
+00536: if questdb_error_oidc_get_view(err, &oidc_view):
__pyx_t_1 = questdb_error_oidc_get_view(__pyx_v_err, (&__pyx_v_oidc_view));
if (__pyx_t_1) {
/* … */
}
+00537: return _oidc_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 537, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
00538: # A token provider's classified failure, wherever it surfaced.
+00539: token_exc = _tp_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client__tp_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 539, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_token_exc = __pyx_t_2; __pyx_t_2 = 0;
+00540: if token_exc is not None:
__pyx_t_1 = (__pyx_v_token_exc != Py_None);
if (__pyx_t_1) {
/* … */
}
+00541: return token_exc
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_token_exc);
__pyx_r = __pyx_v_token_exc;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+00542: cdef object tup = c_err_to_fields(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_fields(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 542, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_tup = __pyx_t_2; __pyx_t_2 = 0;
+00543: if tup[0] == QuestDBErrorCode.ServerRejection:
__pyx_t_2 = __Pyx_GetItemInt(__pyx_v_tup, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 543, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 543, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_ServerRejection); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 543, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_2, __pyx_t_4, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 543, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_1) { /* … */ }
+00544: return QuestDBServerRejectionError(
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBServerRejectionError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 544, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
/* … */
#endif
__pyx_t_9 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_3))) {
__pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
assert(__pyx_t_2);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
__Pyx_INCREF(__pyx_t_2);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
__pyx_t_9 = 0;
}
#endif
{
PyObject *__pyx_callargs[5] = {__pyx_t_2, __pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8};
#if CYTHON_VECTORCALL
__pyx_t_10 = __pyx_mstate_global->__pyx_tuple[7];
if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 544, __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, 544, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
}
#endif
__pyx_t_4 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_9, (4-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_10);
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 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;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 544, __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;
+00545: tup[0], tup[1], tup[2], in_doubt=tup[3])
__pyx_t_5 = __Pyx_GetItemInt(__pyx_v_tup, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 545, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_tup, 1, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 545, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_tup, 2, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 545, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_tup, 3, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 545, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); #if CYTHON_VECTORCALL
+00546: return QuestDBError(tup[0], tup[1], tup[2], in_doubt=tup[3])
__pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 546, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_tup, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 546, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_tup, 1, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 546, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_tup, 2, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 546, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_tup, 3, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 546, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #if CYTHON_VECTORCALL #endif __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(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_9 = 0; } #endif { PyObject *__pyx_callargs[5] = {__pyx_t_3, __pyx_t_8, __pyx_t_7, __pyx_t_6, __pyx_t_5}; #if CYTHON_VECTORCALL __pyx_t_2 = __pyx_mstate_global->__pyx_tuple[7]; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 546, __pyx_L1_error) __Pyx_INCREF(__pyx_t_2); #else { PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_in_doubt}; __pyx_t_2 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+4, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 546, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } #endif __pyx_t_4 = __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_2); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 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; #if CYTHON_VECTORCALL #endif __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 546, __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;
00547:
00548:
+00549: cdef inline object c_err_to_py_fmt(line_sender_error* err, str fmt):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_c_err_to_py_fmt(struct line_sender_error *__pyx_v_err, PyObject *__pyx_v_fmt) {
PyObject *__pyx_v_exc = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.c_err_to_py_fmt", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00550: """Build the Python exception for a C error, which will be freed.
00551:
00552: Like ``c_err_to_py`` but formats the message through ``fmt``, preserving
00553: generic provider classification and every OIDC subclass.
00554: ``questdb_error_oidc_get_view`` reports an OIDC failure
00555: anywhere in the error's *causal chain*, not that the error is one: native
00556: keeps the auth payload attached when a transport re-classifies an error on
00557: its way out, so a failure whose root cause was a token refresh answers true
00558: while its code and message remain the transport's. ``fmt`` is that
00559: transport's context, so it applies; the caller cannot tell a pure auth
00560: failure from a transport failure an auth error caused, and dropping the
00561: context is only ever wrong for the second.
00562:
00563: There are two callers, and the OIDC branch is reachable from one of them:
00564:
00565: * ``Sender.flush`` (in this file) applies ``fmt`` only on the TCP path,
00566: where native rejects ``oidc_auth`` outright ("Bearer token providers are
00567: supported only for ILP/HTTP(S) and QWP/WebSocket"), so the OIDC branch
00568: cannot fire there.
00569: * ``_dataframe_handle_auto_flush`` (``dataframe.pxi``) is
00570: protocol-agnostic, so an HTTP or QWP sender built with ``oidc_auth=``
00571: reaches this with a token failure during an auto-flush, and the
00572: ``args`` re-frame below runs in production.
00573: """
00574: # Use the same converter for every path: formatting must not flatten
00575: # generic provider failures, OIDC subclasses, or structured rejections.
00576: # It consumes err exactly once; args is what Exception.__str__ reads.
+00577: cdef object exc = c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 577, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_exc = __pyx_t_1; __pyx_t_1 = 0;
+00578: exc.args = (fmt.format(str(exc)),)
__pyx_t_1 = __Pyx_PyObject_Unicode(__pyx_v_exc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 578, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_CallUnboundCMethod1(&__pyx_mstate_global->__pyx_umethod_PyUnicode_Type__format, __pyx_v_fmt, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 578, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (!(likely(PyUnicode_CheckExact(__pyx_t_2)) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_2))) __PYX_ERR(0, 578, __pyx_L1_error) __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 578, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_2); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 578, __pyx_L1_error); __pyx_t_2 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_args, __pyx_t_1) < (0)) __PYX_ERR(0, 578, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+00579: return exc
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_exc);
__pyx_r = __pyx_v_exc;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
00580:
00581:
+00582: cdef object _error_with_message(object exc, str msg):
static PyObject *__pyx_f_7questdb_7_client__error_with_message(PyObject *__pyx_v_exc, PyObject *__pyx_v_msg) {
PyObject *__pyx_v_cls = 0;
PyObject *__pyx_v_out = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client._error_with_message", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_cls);
__Pyx_XDECREF(__pyx_v_out);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00583: """A new exception of `exc`'s class carrying every field of `exc` and
00584: `msg` as its message, for `raise ... from exc`.
00585:
00586: Calling the class with `QuestDBError`'s positional signature does not
00587: work for every class `c_err_to_py` returns: `TokenUnavailableError`,
00588: `OidcDeviceFlowError` and `OidcTimeoutError` take one positional message
00589: and raise `TypeError`, and the other `OidcError` classes take the code as
00590: a message and fall back to their default code. Copying the instance
00591: keeps the class, `code`, `in_doubt`, `sender_error` and the subclass
00592: fields (`status`, `retry_after`, `retryable`, ...).
00593: """
+00594: cdef object cls = type(exc)
__Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_exc)));
__pyx_v_cls = ((PyObject *)Py_TYPE(__pyx_v_exc));
+00595: cdef object out = cls.__new__(cls)
__pyx_t_2 = __pyx_v_cls; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_cls}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_new, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 595, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_out = __pyx_t_1; __pyx_t_1 = 0;
+00596: out.__dict__.update(exc.__dict__)
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_mstate_global->__pyx_n_u_dict); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 596, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __pyx_t_4; __Pyx_INCREF(__pyx_t_2); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_dict); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 596, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_5}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_update, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 596, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+00597: out.args = (msg,)
__pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 597, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_msg); __Pyx_GIVEREF(__pyx_v_msg); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_msg) != (0)) __PYX_ERR(0, 597, __pyx_L1_error); if (__Pyx_PyObject_SetAttrStr(__pyx_v_out, __pyx_mstate_global->__pyx_n_u_args, __pyx_t_1) < (0)) __PYX_ERR(0, 597, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+00598: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
00599:
00600:
+00601: cdef inline void_int reserve_buffer(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_reserve_buffer(struct line_sender_buffer *__pyx_v_buffer, size_t __pyx_v_additional) {
struct line_sender_error *__pyx_v_err;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.reserve_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00602: line_sender_buffer* buffer,
00603: size_t additional) except -1:
+00604: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+00605: if not line_sender_buffer_reserve(buffer, additional, &err):
__pyx_t_1 = (!line_sender_buffer_reserve(__pyx_v_buffer, __pyx_v_additional, (&__pyx_v_err)));
if (unlikely(__pyx_t_1)) {
/* … */
}
+00606: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 606, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 606, __pyx_L1_error)
00607:
00608:
00609: # First native connect-retry slice `_direct_conn_open_checked` runs between
00610: # checks of the terminal-OIDC gate when a provider is attached. Later slices
00611: # double, up to the remaining budget.
+00612: cdef uint64_t _OIDC_FOREGROUND_RETRY_SLICE_MS = 2000
__pyx_v_7questdb_7_client__OIDC_FOREGROUND_RETRY_SLICE_MS = 0x7D0;
00613:
00614: # A native slice that failed this much before its deadline gave up on an error
00615: # the native reconnect loop treats as terminal; see `_direct_conn_open_checked`.
00616: # Must stay well below `_OIDC_FOREGROUND_RETRY_SLICE_MS`.
+00617: cdef uint64_t _OIDC_FOREGROUND_SLICE_EARLY_MARGIN_MS = 100
__pyx_v_7questdb_7_client__OIDC_FOREGROUND_SLICE_EARLY_MARGIN_MS = 0x64;
00618:
00619: # The codes native `reconnect_error_is_terminal` stops its reconnect loop on
00620: # (`qwp_ws_driver.rs`). Role rejects are exempt, including the
00621: # ProtocolVersionError synthesized when durable ACK is required and every
00622: # endpoint rejects by role. A 421 with a role header is RoleMismatch.
+00623: _NATIVE_RECONNECT_TERMINAL_CODES = frozenset((
{
PyObject* const __pyx_temp[] = {__pyx_t_17, __pyx_t_16, __pyx_t_25, __pyx_t_20, __pyx_t_18};
__pyx_t_5 = __Pyx_PyFrozenSet_FromArray(__pyx_temp, 5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 623, __pyx_L1_error)
}
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
__Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_NATIVE_RECONNECT_TERMINAL_CODES, __pyx_t_5) < (0)) __PYX_ERR(0, 623, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+00624: QuestDBErrorCode.AuthError,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 624, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_AuthError); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 624, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+00625: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 625, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 625, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+00626: QuestDBErrorCode.ProtocolVersionError,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 626, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_25 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ProtocolVersionError); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 626, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+00627: QuestDBErrorCode.StoreResendRequired,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 627, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_StoreResendRequired); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 627, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+00628: QuestDBErrorCode.SymbolDictFull))
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 628, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_SymbolDictFull); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 628, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
00629:
00630:
+00631: cdef inline bint _is_oidc_terminal_for_foreground(object exc):
static CYTHON_INLINE int __pyx_f_7questdb_7_client__is_oidc_terminal_for_foreground(PyObject *__pyx_v_exc) {
PyObject *__pyx_v_mod = 0;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client._is_oidc_terminal_for_foreground", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_mod);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00632: """Whether ``exc`` is an OIDC failure that a foreground retry cannot clear.
00633:
00634: ``OidcInteractionRequired`` alone needs this gate, and it covers three
00635: native conditions that are indistinguishable by class *and* by code:
00636: ``classify_provider_error`` reclassifies every OIDC ``InteractionRequired``
00637: to a retryable ``SocketError``, so ``exc.code`` cannot separate them.
00638:
00639: * Nobody has signed in, and nothing is in flight. Retrying re-polls a
00640: provider documented never to prompt, so the call would burn the whole
00641: reconnect budget (300s by default) only to raise the same error. Fail
00642: fast and let the caller run ``sign_in()``.
00643: * A peer ``sign_in()`` holds the acquisition lock, or a renderer callback
00644: is mid-paint. Both clear on their own -- the second in milliseconds --
00645: and ``oidc.h`` states normatively that a transport "must retry rather
00646: than terminalize" for the callback case. Retrying here is what the
00647: native side classified the error for.
00648:
00649: Native records which case produced this specific error in its structured
00650: OIDC payload. The converted exception carries that immutable classification
00651: as ``_acquisition_busy``; consulting the provider's current sign-in state
00652: here would race the callback or sign-in finishing between the native return
00653: and this Python check.
00654:
00655: Every other OIDC failure is already handled by the caller's code check:
00656: ``classify_provider_error`` exempts ``OidcErrorKind::Config`` from the
00657: reclassification to ``SocketError``, so an ``OidcConfigError`` arrives with
00658: ``ConfigError`` from both native conversion and direct Python construction
00659: and is terminal there.
00660:
00661: Resolved without importing: if ``questdb.auth`` was never imported then no
00662: OIDC error can exist, so this costs one dict lookup on the ordinary error
00663: path, and it cannot re-enter the import of the very module that imports
00664: this extension.
00665:
00666: It goes through ``_oidc_errors_module_if_ready`` rather than reading
00667: ``sys.modules`` directly so that the class this tests against is the same
00668: object the exception was built from. Two independent lookups can disagree
00669: after any ``sys.modules`` swap -- leaving ``isinstance`` permanently False
00670: and this gate silently disabled -- and a direct read can also observe the
00671: module mid-import, where ``OidcInteractionRequired`` does not exist yet and
00672: the attribute access would raise over the error being reported.
00673: """
+00674: cdef object mod = _oidc_errors_module_if_ready()
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_errors_module_if_ready(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 674, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_mod = __pyx_t_1; __pyx_t_1 = 0;
+00675: if mod is None:
__pyx_t_2 = (__pyx_v_mod == Py_None);
if (__pyx_t_2) {
/* … */
}
+00676: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+00677: if not isinstance(exc, mod.OidcInteractionRequired):
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_mod, __pyx_mstate_global->__pyx_n_u_OidcInteractionRequired); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_IsInstance(__pyx_v_exc, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 677, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = (!__pyx_t_2); if (__pyx_t_3) { /* … */ }
+00678: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
00679: # This is metadata from the native error snapshot, not mutable provider
00680: # state. A callback can finish in the gap between native conversion and
00681: # this check; the error remains transient even after that happens.
+00682: return not bool(getattr(exc, '_acquisition_busy', False))
__pyx_t_4 = NULL; __pyx_t_5 = __Pyx_GetAttr3(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_acquisition_busy_2, Py_False); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 682, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_5}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 682, __pyx_L1_error) __Pyx_GOTREF((PyObject *)__pyx_t_1); } __pyx_t_3 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_t_1)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 682, __pyx_L1_error) __Pyx_DECREF((PyObject *)__pyx_t_1); __pyx_t_1 = 0; { __pyx_r = (!__pyx_t_3); } goto __pyx_L0;
00683:
00684:
+00685: def _debug_is_oidc_terminal_for_foreground(exc):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_99_debug_is_oidc_terminal_for_foreground(PyObject *__pyx_self, #if CYTHON_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_98_debug_is_oidc_terminal_for_foreground, "Internal test hook for the foreground OIDC retry gate."); static PyMethodDef __pyx_mdef_7questdb_7_client_99_debug_is_oidc_terminal_for_foreground = {"_debug_is_oidc_terminal_for_foreground", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_99_debug_is_oidc_terminal_for_foreground, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_98_debug_is_oidc_terminal_for_foreground}; static PyObject *__pyx_pw_7questdb_7_client_99_debug_is_oidc_terminal_for_foreground(PyObject *__pyx_self, #if CYTHON_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 = 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_is_oidc_terminal_for_foreground (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,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 685, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 685, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_is_oidc_terminal_for_foreground", 0) < (0)) __PYX_ERR(0, 685, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_is_oidc_terminal_for_foreground", 1, 1, 1, i); __PYX_ERR(0, 685, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 685, __pyx_L3_error) } __pyx_v_exc = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_debug_is_oidc_terminal_for_foreground", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 685, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client._debug_is_oidc_terminal_for_foreground", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_98_debug_is_oidc_terminal_for_foreground(__pyx_self, __pyx_v_exc); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_98_debug_is_oidc_terminal_for_foreground(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_exc) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("questdb._client._debug_is_oidc_terminal_for_foreground", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_99_debug_is_oidc_terminal_for_foreground, 0, __pyx_mstate_global->__pyx_n_u_debug_is_oidc_terminal_for_fore, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[156])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 685, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_is_oidc_terminal_for_fore, __pyx_t_5) < (0)) __PYX_ERR(0, 685, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
00686: """Internal test hook for the foreground OIDC retry gate."""
+00687: return bool(_is_oidc_terminal_for_foreground(exc))
__pyx_t_2 = NULL; __pyx_t_3 = __pyx_f_7questdb_7_client__is_oidc_terminal_for_foreground(__pyx_v_exc); if (unlikely(__pyx_t_3 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 687, __pyx_L1_error) __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 687, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 687, __pyx_L1_error) __Pyx_GOTREF((PyObject *)__pyx_t_1); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = ((PyObject *)__pyx_t_1); } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
00688:
00689:
+00690: cdef object _utf8_decode_error(
static PyObject *__pyx_f_7questdb_7_client__utf8_decode_error(PyObject *__pyx_v_string, uint32_t __pyx_v_bad_codepoint) {
PyObject *__pyx_v_s = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_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;
}
00691: PyObject* string, uint32_t bad_codepoint):
+00692: cdef str s = <str><object>string
__pyx_t_1 = ((PyObject *)__pyx_v_string);
__Pyx_INCREF(__pyx_t_1);
__pyx_v_s = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
+00693: return QuestDBError(
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 693, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3);
+00694: QuestDBErrorCode.InvalidUtf8,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidUtf8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+00695: f'Invalid codepoint 0x{bad_codepoint:x} in string {s!r}: ' +
__pyx_t_4 = __Pyx_PyUnicode_From_uint32_t(__pyx_v_bad_codepoint, 0, ' ', 'x'); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 695, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_s), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 695, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7[0] = __pyx_mstate_global->__pyx_kp_u_Invalid_codepoint_0x; __pyx_t_7[1] = __pyx_t_4; __pyx_t_7[2] = __pyx_mstate_global->__pyx_kp_u_in_string; __pyx_t_7[3] = __pyx_t_6; __pyx_t_7[4] = __pyx_mstate_global->__pyx_kp_u_Cannot_be_encoded_as_UTF_8; __pyx_t_8 = 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, 695, __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, 693, __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;
00696: 'Cannot be encoded as UTF-8.')
00697:
00698:
+00699: cdef str _fqn(type obj):
static PyObject *__pyx_f_7questdb_7_client__fqn(PyTypeObject *__pyx_v_obj) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client._fqn", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+00700: if obj.__module__ == 'builtins':
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_mstate_global->__pyx_n_u_module); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 700, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_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, 700, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* … */ }
+00701: 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, 701, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(0, 701, __pyx_L1_error) { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = ((PyObject*)__pyx_t_1); } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
00702: else:
+00703: 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, 703, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_t_1, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 703, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_mstate_global->__pyx_n_u_qualname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 703, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_1, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 703, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_5[0] = __pyx_t_3;
__pyx_t_5[1] = __pyx_mstate_global->__pyx_kp_u__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, 703, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = ((PyObject*)__pyx_t_1);
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_1 = 0;
goto __pyx_L0;
}
00704:
00705:
00706: # The only names `Sender` (on PyPy) and `QuestDB` keep in their instance
00707: # dictionary.
+00708: cdef tuple _DICT_ONLY_ATTRS = ('_bearer_token_provider',)
__Pyx_INCREF(__pyx_mstate_global->__pyx_tuple[72]); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__DICT_ONLY_ATTRS); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__DICT_ONLY_ATTRS, __pyx_mstate_global->__pyx_tuple[72]); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[72]); /* … */ { PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_bearer_token_provider}; __pyx_mstate_global->__pyx_tuple[72] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[72])) __PYX_ERR(0, 708, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[72]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[72]);
+00709: cdef object _NO_SUCH_ATTR = object()
__pyx_t_18 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_18, NULL};
__pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_object, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 709, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
__Pyx_XGOTREF(__pyx_v_7questdb_7_client__NO_SUCH_ATTR);
__Pyx_DECREF_SET(__pyx_v_7questdb_7_client__NO_SUCH_ATTR, __pyx_t_5);
__Pyx_GIVEREF(__pyx_t_5);
__pyx_t_5 = 0;
00710:
00711:
+00712: cdef void_int _setattr_without_dict(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__setattr_without_dict(PyObject *__pyx_v_obj, PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_dict_only, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
PyObject *__pyx_v_descr = 0;
PyObject *__pyx_v_klass = NULL;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_AddTraceback("questdb._client._setattr_without_dict", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_descr);
__Pyx_XDECREF(__pyx_v_klass);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00713: object obj, type cls, tuple dict_only, object name,
00714: object value) except -1:
00715: """Set `name` on `obj` as if `cls` had no instance dictionary, except
00716: for the names in `dict_only`.
00717:
00718: `Sender` and `QuestDB` have a `__dict__` only to hold the bearer-token
00719: holder where PyPy's collector can see it (`Sender` uses it only on PyPy;
00720: see `_sender_hold_bearer`), and `RefreshingTokenProvider` only to hold
00721: its native handle there. Any other new name -- a misspelt or invented
00722: setting such as `sender.request_timeout = 5000` or
00723: `tokens.cold_wait = 5` -- would otherwise be stored and read back while
00724: configuring nothing, where it used to raise `AttributeError`. Python
00725: subclasses keep the dictionary every subclass of an extension type has
00726: always had; those of `Sender` and `RefreshingTokenProvider` also get the
00727: generic setter back (see `_subclass_keeps_generic_setattr`).
00728: """
+00729: cdef object descr = _NO_SUCH_ATTR
__Pyx_INCREF(__pyx_v_7questdb_7_client__NO_SUCH_ATTR);
__pyx_v_descr = __pyx_v_7questdb_7_client__NO_SUCH_ATTR;
+00730: if (type(obj) is cls and isinstance(name, str)
__pyx_t_2 = (((PyObject *)Py_TYPE(__pyx_v_obj)) == ((PyObject *)__pyx_v_cls));
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
/* … */
__pyx_t_2 = PyUnicode_Check(__pyx_v_name);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
/* … */
if (__pyx_t_1) {
/* … */
}
+00731: and name not in dict_only):
__pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_name, __pyx_v_dict_only, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 731, __pyx_L1_error) __pyx_t_1 = __pyx_t_2; __pyx_L4_bool_binop_done:;
+00732: for klass in cls.__mro__:
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cls), __pyx_mstate_global->__pyx_n_u_mro); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 732, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) { __pyx_t_4 = __pyx_t_3; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; __pyx_t_6 = NULL; } else { __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 732, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 732, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; for (;;) { if (likely(!__pyx_t_6)) { if (likely(PyList_CheckExact(__pyx_t_4))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 732, __pyx_L1_error) #endif if (__pyx_t_5 >= __pyx_temp) break; } __pyx_t_3 = __Pyx_PyList_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, 732, __pyx_L1_error) #endif if (__pyx_t_5 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_3 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5)); #else __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_5); #endif ++__pyx_t_5; } if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 732, __pyx_L1_error) } else { __pyx_t_3 = __pyx_t_6(__pyx_t_4); if (unlikely(!__pyx_t_3)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 732, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_klass, __pyx_t_3); __pyx_t_3 = 0; /* … */ } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L10_for_end; __pyx_L8_break:; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L10_for_end; __pyx_L10_for_end:;
+00733: descr = klass.__dict__.get(name, _NO_SUCH_ATTR)
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_klass, __pyx_mstate_global->__pyx_n_u_dict); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 733, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_7 = __pyx_t_8; __Pyx_INCREF(__pyx_t_7); __pyx_t_9 = 0; { PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_v_name, __pyx_v_7questdb_7_client__NO_SUCH_ATTR}; __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 733, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_DECREF_SET(__pyx_v_descr, __pyx_t_3); __pyx_t_3 = 0;
+00734: if descr is not _NO_SUCH_ATTR:
__pyx_t_1 = (__pyx_v_descr != __pyx_v_7questdb_7_client__NO_SUCH_ATTR);
if (__pyx_t_1) {
/* … */
}
+00735: break
goto __pyx_L8_break;
+00736: if descr is _NO_SUCH_ATTR:
__pyx_t_1 = (__pyx_v_descr == __pyx_v_7questdb_7_client__NO_SUCH_ATTR);
if (unlikely(__pyx_t_1)) {
/* … */
}
+00737: raise AttributeError(
__pyx_t_3 = NULL;
+00738: f"'{_fqn(cls)}' object has no attribute {name!r}")
__pyx_t_8 = __pyx_f_7questdb_7_client__fqn(__pyx_v_cls); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 738, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 738, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_8 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 738, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_10[0] = __pyx_mstate_global->__pyx_kp_u__27; __pyx_t_10[1] = __pyx_t_7; __pyx_t_10[2] = __pyx_mstate_global->__pyx_kp_u_object_has_no_attribute; __pyx_t_10[3] = __pyx_t_8; __pyx_t_5 = 27; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10[3]); #endif __pyx_t_11 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_11 |= __Pyx_PyUnicode_KIND_04(__pyx_t_10[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_10[3]); #endif __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_10, 4, __pyx_t_5, __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 738, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_9 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_12}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_AttributeError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 737, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 737, __pyx_L1_error)
+00739: if not hasattr(type(descr), '__set__'):
__pyx_t_1 = __Pyx_HasAttr(((PyObject *)Py_TYPE(__pyx_v_descr)), __pyx_mstate_global->__pyx_n_u_set_2); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 739, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (unlikely(__pyx_t_2)) { /* … */ }
+00740: raise AttributeError(
__pyx_t_12 = NULL;
+00741: f"'{_fqn(cls)}' object attribute {name!r} is read-only")
__pyx_t_3 = __pyx_f_7questdb_7_client__fqn(__pyx_v_cls); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 741, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 741, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 741, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_13[0] = __pyx_mstate_global->__pyx_kp_u__27; __pyx_t_13[1] = __pyx_t_8; __pyx_t_13[2] = __pyx_mstate_global->__pyx_kp_u_object_attribute; __pyx_t_13[3] = __pyx_t_3; __pyx_t_13[4] = __pyx_mstate_global->__pyx_kp_u_is_read_only; __pyx_t_5 = 33; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13[3]); #endif __pyx_t_11 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_11 |= __Pyx_PyUnicode_KIND_04(__pyx_t_13[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_13[3]); #endif __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_13, 5, __pyx_t_5, __pyx_t_11); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 741, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_9 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_7}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_AttributeError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 740, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 740, __pyx_L1_error)
00742: # Not `object.__setattr__`: before 3.13 CPython refuses it ("can't apply
00743: # this __setattr__") on any instance whose type, like `cls`, overrides
00744: # the C-level setattr slot. This is the function it would have called.
+00745: PyObject_GenericSetAttr(obj, name, value)
__pyx_t_11 = PyObject_GenericSetAttr(__pyx_v_obj, __pyx_v_name, __pyx_v_value); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 745, __pyx_L1_error)
+00746: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
00747:
00748:
+00749: cdef bint _method_not_overridden(
static int __pyx_f_7questdb_7_client__method_not_overridden(PyObject *__pyx_v_obj, PyTypeObject *__pyx_v_owner, PyObject *__pyx_v_name) {
PyObject *__pyx_v_instance_dict = 0;
PyObject *__pyx_v_klass = NULL;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client._method_not_overridden", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_instance_dict);
__Pyx_XDECREF(__pyx_v_klass);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00750: object obj, type owner, str name) except -1:
00751: """Whether ``obj.<name>`` resolves to ``owner``'s own definition: no class
00752: ahead of ``owner`` in the MRO defines it, and no instance attribute
00753: shadows it. Reads only class and instance dictionaries, so it runs no
00754: descriptor."""
+00755: cdef object instance_dict = getattr(obj, '__dict__', None)
__pyx_t_1 = __Pyx_GetAttr3(__pyx_v_obj, __pyx_mstate_global->__pyx_n_u_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 755, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_instance_dict = __pyx_t_1; __pyx_t_1 = 0;
+00756: if isinstance(instance_dict, dict) and name in instance_dict:
__pyx_t_3 = PyDict_Check(__pyx_v_instance_dict); if (__pyx_t_3) { } else { __pyx_t_2 = __pyx_t_3; goto __pyx_L4_bool_binop_done; } __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_name, __pyx_v_instance_dict, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 756, __pyx_L1_error) __pyx_t_2 = __pyx_t_3; __pyx_L4_bool_binop_done:; if (__pyx_t_2) { /* … */ }
+00757: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+00758: for klass in type(obj).__mro__:
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_obj)), __pyx_mstate_global->__pyx_n_u_mro); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 758, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { __pyx_t_4 = __pyx_t_1; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; __pyx_t_6 = NULL; } else { __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 758, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 758, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; for (;;) { if (likely(!__pyx_t_6)) { if (likely(PyList_CheckExact(__pyx_t_4))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 758, __pyx_L1_error) #endif if (__pyx_t_5 >= __pyx_temp) break; } __pyx_t_1 = __Pyx_PyList_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, 758, __pyx_L1_error) #endif if (__pyx_t_5 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5)); #else __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_5); #endif ++__pyx_t_5; } if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 758, __pyx_L1_error) } else { __pyx_t_1 = __pyx_t_6(__pyx_t_4); if (unlikely(!__pyx_t_1)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 758, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_klass, __pyx_t_1); __pyx_t_1 = 0; /* … */ } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+00759: if name in klass.__dict__:
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_klass, __pyx_mstate_global->__pyx_n_u_dict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 759, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_name, __pyx_t_1, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 759, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* … */ }
+00760: return klass is owner
__pyx_t_2 = (__pyx_v_klass == ((PyObject *)__pyx_v_owner));
{
__pyx_r = __pyx_t_2;
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L0;
+00761: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
00762:
00763:
+00764: cdef void_int _subclass_keeps_generic_setattr(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__subclass_keeps_generic_setattr(PyTypeObject *__pyx_v_cls, PyTypeObject *__pyx_v_ext_cls) {
PyObject *__pyx_v_setattr_owner = 0;
PyObject *__pyx_v_delattr_owner = 0;
int __pyx_v_after_ext;
PyObject *__pyx_v_klass = NULL;
PyObject *__pyx_v_attrs = NULL;
PyObject *__pyx_v_name = NULL;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_AddTraceback("questdb._client._subclass_keeps_generic_setattr", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_setattr_owner);
__Pyx_XDECREF(__pyx_v_delattr_owner);
__Pyx_XDECREF(__pyx_v_klass);
__Pyx_XDECREF(__pyx_v_attrs);
__Pyx_XDECREF(__pyx_v_name);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00765: type cls, type ext_cls) except -1:
00766: """Give `cls`, a Python subclass of `ext_cls`, the generic attribute
00767: setter back, unless a class in between sets attributes its own way.
00768:
00769: `ext_cls.__setattr__` refuses new names only on `ext_cls` itself, but a
00770: subclass inherits the override all the same: each of its attribute
00771: stores would pay for the call, and CPython 3.11+ does not specialize
00772: stores on a type that overrides the setter, so a `__slots__` store runs
00773: about twice as slow.
00774:
00775: A class after `ext_cls` in the MRO that sets or deletes attributes its
00776: own way -- `Mixin` in `class S(Sender, Mixin)` -- is refused instead:
00777: Python finds `ext_cls`'s method first, so the class's own would silently
00778: never run, where it did before `ext_cls` had one. Listed before
00779: `ext_cls`, it runs.
00780: """
+00781: cdef object setattr_owner = None
__Pyx_INCREF(Py_None);
__pyx_v_setattr_owner = Py_None;
+00782: cdef object delattr_owner = None
__Pyx_INCREF(Py_None);
__pyx_v_delattr_owner = Py_None;
+00783: cdef bint after_ext = False
__pyx_v_after_ext = 0;
+00784: for klass in cls.__mro__:
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cls), __pyx_mstate_global->__pyx_n_u_mro); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 784, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; __pyx_t_4 = NULL; } else { __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 784, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 784, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; for (;;) { if (likely(!__pyx_t_4)) { if (likely(PyList_CheckExact(__pyx_t_2))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_2); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 784, __pyx_L1_error) #endif if (__pyx_t_3 >= __pyx_temp) break; } __pyx_t_1 = __Pyx_PyList_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, 784, __pyx_L1_error) #endif if (__pyx_t_3 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3)); #else __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_3); #endif ++__pyx_t_3; } if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 784, __pyx_L1_error) } else { __pyx_t_1 = __pyx_t_4(__pyx_t_2); if (unlikely(!__pyx_t_1)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 784, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_klass, __pyx_t_1); __pyx_t_1 = 0; /* … */ } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+00785: attrs = klass.__dict__
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_klass, __pyx_mstate_global->__pyx_n_u_dict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 785, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_attrs, __pyx_t_1); __pyx_t_1 = 0;
+00786: if after_ext and klass is not object:
if (__pyx_v_after_ext) {
} else {
__pyx_t_5 = __pyx_v_after_ext;
goto __pyx_L6_bool_binop_done;
}
__pyx_t_6 = (__pyx_v_klass != __pyx_builtin_object);
__pyx_t_5 = __pyx_t_6;
__pyx_L6_bool_binop_done:;
if (__pyx_t_5) {
/* … */
}
+00787: for name in ('__setattr__', '__delattr__'):
__pyx_t_1 = __pyx_mstate_global->__pyx_tuple[35]; __Pyx_INCREF(__pyx_t_1); __pyx_t_7 = 0; for (;;) { if (__pyx_t_7 >= 2) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_8 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_7)); #else __pyx_t_8 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_7); #endif ++__pyx_t_7; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 787, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); if (!(likely(PyUnicode_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_8))) __PYX_ERR(0, 787, __pyx_L1_error) __Pyx_XDECREF_SET(__pyx_v_name, ((PyObject*)__pyx_t_8)); __pyx_t_8 = 0; /* … */ } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* … */ { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_setattr, __pyx_mstate_global->__pyx_n_u_delattr}; __pyx_mstate_global->__pyx_tuple[35] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[35])) __PYX_ERR(0, 787, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[35]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[35]);
+00788: if name in attrs:
__pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_v_name, __pyx_v_attrs, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 788, __pyx_L1_error) if (unlikely(__pyx_t_5)) { /* … */ }
+00789: raise TypeError(
__pyx_t_9 = NULL;
+00790: f'{klass.__name__}.{name} would never run on '
__pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_klass, __pyx_mstate_global->__pyx_n_u_name_2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 790, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_11 = __Pyx_PyObject_FormatSimple(__pyx_t_10, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 790, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_10 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 790, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); /* … */ __pyx_t_18 = 120; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_18 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17[0]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17[2]) * 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17[4]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17[6]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17[10]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17[12]); #endif __pyx_t_19 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_19 |= __Pyx_PyUnicode_KIND_04(__pyx_t_17[0]) | __Pyx_PyUnicode_KIND_04(__pyx_t_17[2]) | __Pyx_PyUnicode_KIND_04(__pyx_t_17[4]) | __Pyx_PyUnicode_KIND_04(__pyx_t_17[6]) | __Pyx_PyUnicode_KIND_04(__pyx_t_17[10]) | __Pyx_PyUnicode_KIND_04(__pyx_t_17[12]); #endif __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_17, 14, __pyx_t_18, __pyx_t_19); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 790, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_20 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_12}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_20, (2-__pyx_t_20) | (__pyx_t_20*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 789, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 789, __pyx_L1_error)
+00791: f'{cls.__name__}: {ext_cls.__name__}, which comes '
__pyx_t_12 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cls), __pyx_mstate_global->__pyx_n_u_name_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 791, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_13 = __Pyx_PyObject_FormatSimple(__pyx_t_12, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 791, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_12 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_ext_cls), __pyx_mstate_global->__pyx_n_u_name_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 791, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_t_12, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 791, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
00792: 'before it in the method resolution order, defines '
+00793: f'{name} too. List {klass.__name__} before '
__pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_klass, __pyx_mstate_global->__pyx_n_u_name_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 793, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_15 = __Pyx_PyObject_FormatSimple(__pyx_t_12, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 793, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+00794: f'{ext_cls.__name__} in the bases.')
__pyx_t_12 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_ext_cls), __pyx_mstate_global->__pyx_n_u_name_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 794, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_16 = __Pyx_PyObject_FormatSimple(__pyx_t_12, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 794, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_17[0] = __pyx_t_11; __pyx_t_17[1] = __pyx_mstate_global->__pyx_kp_u__3; __pyx_t_17[2] = __pyx_t_10; __pyx_t_17[3] = __pyx_mstate_global->__pyx_kp_u_would_never_run_on; __pyx_t_17[4] = __pyx_t_13; __pyx_t_17[5] = __pyx_mstate_global->__pyx_kp_u__2; __pyx_t_17[6] = __pyx_t_14; __pyx_t_17[7] = __pyx_mstate_global->__pyx_kp_u_which_comes_before_it_in_the_me; __pyx_t_17[8] = __pyx_t_10; __pyx_t_17[9] = __pyx_mstate_global->__pyx_kp_u_too_List; __pyx_t_17[10] = __pyx_t_15; __pyx_t_17[11] = __pyx_mstate_global->__pyx_kp_u_before; __pyx_t_17[12] = __pyx_t_16; __pyx_t_17[13] = __pyx_mstate_global->__pyx_kp_u_in_the_bases;
+00795: if klass is ext_cls:
__pyx_t_5 = (__pyx_v_klass == ((PyObject *)__pyx_v_ext_cls));
if (__pyx_t_5) {
/* … */
}
+00796: after_ext = True
__pyx_v_after_ext = 1;
+00797: if setattr_owner is None and '__setattr__' in attrs:
__pyx_t_6 = (__pyx_v_setattr_owner == Py_None);
if (__pyx_t_6) {
} else {
__pyx_t_5 = __pyx_t_6;
goto __pyx_L14_bool_binop_done;
}
__pyx_t_6 = (__Pyx_PySequence_ContainsTF(__pyx_mstate_global->__pyx_n_u_setattr, __pyx_v_attrs, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 797, __pyx_L1_error)
__pyx_t_5 = __pyx_t_6;
__pyx_L14_bool_binop_done:;
if (__pyx_t_5) {
/* … */
}
+00798: setattr_owner = klass
__Pyx_INCREF(__pyx_v_klass); __Pyx_DECREF_SET(__pyx_v_setattr_owner, __pyx_v_klass);
+00799: if delattr_owner is None and '__delattr__' in attrs:
__pyx_t_6 = (__pyx_v_delattr_owner == Py_None);
if (__pyx_t_6) {
} else {
__pyx_t_5 = __pyx_t_6;
goto __pyx_L17_bool_binop_done;
}
__pyx_t_6 = (__Pyx_PySequence_ContainsTF(__pyx_mstate_global->__pyx_n_u_delattr, __pyx_v_attrs, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 799, __pyx_L1_error)
__pyx_t_5 = __pyx_t_6;
__pyx_L17_bool_binop_done:;
if (__pyx_t_5) {
/* … */
}
+00800: delattr_owner = klass
__Pyx_INCREF(__pyx_v_klass); __Pyx_DECREF_SET(__pyx_v_delattr_owner, __pyx_v_klass);
+00801: if setattr_owner is ext_cls and delattr_owner in (ext_cls, object):
__pyx_t_6 = (__pyx_v_setattr_owner == ((PyObject *)__pyx_v_ext_cls));
if (__pyx_t_6) {
} else {
__pyx_t_5 = __pyx_t_6;
goto __pyx_L21_bool_binop_done;
}
__Pyx_INCREF(__pyx_v_delattr_owner);
__pyx_t_2 = __pyx_v_delattr_owner;
__pyx_t_21 = __Pyx_PyObject_RichCompareBool(__pyx_t_2, ((PyObject *)__pyx_v_ext_cls), Py_EQ); if (unlikely((__pyx_t_21 < 0))) __PYX_ERR(0, 801, __pyx_L1_error)
if (!__pyx_t_21) {
} else {
__pyx_t_6 = __pyx_t_21;
goto __pyx_L23_bool_binop_done;
}
__pyx_t_21 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_2, __pyx_builtin_object, Py_EQ); if (unlikely((__pyx_t_21 < 0))) __PYX_ERR(0, 801, __pyx_L1_error)
__pyx_t_6 = __pyx_t_21;
__pyx_L23_bool_binop_done:;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_21 = __pyx_t_6;
__pyx_t_5 = __pyx_t_21;
__pyx_L21_bool_binop_done:;
if (__pyx_t_5) {
/* … */
}
+00802: cls.__setattr__ = object.__setattr__
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_builtin_object, __pyx_mstate_global->__pyx_n_u_setattr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 802, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_cls), __pyx_mstate_global->__pyx_n_u_setattr, __pyx_t_2) < (0)) __PYX_ERR(0, 802, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+00803: cls.__delattr__ = object.__delattr__
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_builtin_object, __pyx_mstate_global->__pyx_n_u_delattr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 803, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_cls), __pyx_mstate_global->__pyx_n_u_delattr, __pyx_t_2) < (0)) __PYX_ERR(0, 803, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+00804: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
00805:
00806:
+00807: def _sender_init_subclass(cls, **kwargs):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_101_sender_init_subclass(PyObject *__pyx_self,
#if CYTHON_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_101_sender_init_subclass = {"_sender_init_subclass", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_101_sender_init_subclass, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_101_sender_init_subclass(PyObject *__pyx_self,
#if CYTHON_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_kwargs = 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_init_subclass (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);
__pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
__Pyx_GOTREF(__pyx_v_kwargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_cls,0};
PyObject* values[1] = {0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 807, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 807, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, __pyx_v_kwargs, values, kwd_pos_args, __pyx_kwds_len, "_sender_init_subclass", 1) < (0)) __PYX_ERR(0, 807, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_sender_init_subclass", 1, 1, 1, i); __PYX_ERR(0, 807, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 1)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 807, __pyx_L3_error)
}
__pyx_v_cls = values[0];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("_sender_init_subclass", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 807, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
__Pyx_AddTraceback("questdb._client._sender_init_subclass", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_100_sender_init_subclass(__pyx_self, __pyx_v_cls, __pyx_v_kwargs);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_DECREF(__pyx_v_kwargs);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_100_sender_init_subclass(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_cls, PyObject *__pyx_v_kwargs) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client._sender_init_subclass", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_101_sender_init_subclass, 0, __pyx_mstate_global->__pyx_n_u_sender_init_subclass, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[157])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 807, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
#endif
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_sender_init_subclass, __pyx_t_5) < (0)) __PYX_ERR(0, 807, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+00808: super(Sender, cls).__init_subclass__(**kwargs)
__pyx_t_2 = NULL;
__pyx_t_3 = 1;
{
PyObject *__pyx_callargs[3] = {__pyx_t_2, ((PyObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender), __pyx_v_cls};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_super, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 808, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_init_subclass); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 808, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_1 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 808, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_mstate_global->__pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 808, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+00809: _subclass_keeps_generic_setattr(cls, Sender)
__pyx_t_4 = __pyx_v_cls; __Pyx_INCREF(__pyx_t_4); if (!(likely(PyType_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("type", __pyx_t_4))) __PYX_ERR(0, 809, __pyx_L1_error) __pyx_t_5 = __pyx_f_7questdb_7_client__subclass_keeps_generic_setattr(((PyTypeObject*)__pyx_t_4), __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender); if (unlikely(__pyx_t_5 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 809, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
00810:
00811:
+00812: cdef inline void_int _encode_utf8(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__encode_utf8(struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_string, struct line_sender_utf8 *__pyx_v_utf8_out) {
uint32_t __pyx_v_bad_codepoint;
size_t __pyx_v_count;
int __pyx_v_kind;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client._encode_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00813: qdb_pystr_buf* b,
00814: PyObject* string,
00815: line_sender_utf8* utf8_out) except -1:
+00816: cdef uint32_t bad_codepoint = 0
__pyx_v_bad_codepoint = 0;
+00817: cdef size_t count = <size_t>(PyUnicode_GET_LENGTH(string))
__pyx_v_count = ((size_t)PyUnicode_GET_LENGTH(__pyx_v_string));
+00818: cdef int kind = PyUnicode_KIND(string)
__pyx_v_kind = PyUnicode_KIND(__pyx_v_string);
+00819: if kind == PyUnicode_1BYTE_KIND:
switch (__pyx_v_kind) {
case PyUnicode_1BYTE_KIND:
/* … */
break;
case PyUnicode_2BYTE_KIND:
00820: # No error handling for UCS1: All code points translate into valid UTF8.
+00821: qdb_ucs1_to_utf8(
qdb_ucs1_to_utf8(__pyx_v_b, __pyx_v_count, PyUnicode_1BYTE_DATA(__pyx_v_string), (&__pyx_v_utf8_out->len), (&__pyx_v_utf8_out->buf));
00822: b,
00823: count,
00824: PyUnicode_1BYTE_DATA(string),
00825: &utf8_out.len,
00826: &utf8_out.buf)
+00827: elif kind == PyUnicode_2BYTE_KIND:
break;
case PyUnicode_4BYTE_KIND:
+00828: if not qdb_ucs2_to_utf8(
__pyx_t_1 = (!qdb_ucs2_to_utf8(__pyx_v_b, __pyx_v_count, PyUnicode_2BYTE_DATA(__pyx_v_string), (&__pyx_v_utf8_out->len), (&__pyx_v_utf8_out->buf), (&__pyx_v_bad_codepoint)));
if (unlikely(__pyx_t_1)) {
/* … */
}
00829: b,
00830: count,
00831: PyUnicode_2BYTE_DATA(string),
00832: &utf8_out.len,
00833: &utf8_out.buf,
00834: &bad_codepoint):
+00835: raise _utf8_decode_error(string, bad_codepoint)
__pyx_t_2 = __pyx_f_7questdb_7_client__utf8_decode_error(__pyx_v_string, __pyx_v_bad_codepoint); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 835, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 835, __pyx_L1_error)
+00836: elif kind == PyUnicode_4BYTE_KIND:
break;
default:
+00837: if not qdb_ucs4_to_utf8(
__pyx_t_1 = (!qdb_ucs4_to_utf8(__pyx_v_b, __pyx_v_count, ((uint32_t const *)PyUnicode_4BYTE_DATA(__pyx_v_string)), (&__pyx_v_utf8_out->len), (&__pyx_v_utf8_out->buf), (&__pyx_v_bad_codepoint)));
if (unlikely(__pyx_t_1)) {
/* … */
}
00838: b,
00839: count,
00840:
00841: # This cast is required and is possibly a Cython compiler bug.
00842: # It doesn't recognize that `const Py_UCS4*`
00843: # is the same as `const uint32_t*`.
00844: <const uint32_t*>PyUnicode_4BYTE_DATA(string),
00845:
00846: &utf8_out.len,
00847: &utf8_out.buf,
00848: &bad_codepoint):
+00849: raise _utf8_decode_error(string, bad_codepoint)
__pyx_t_2 = __pyx_f_7questdb_7_client__utf8_decode_error(__pyx_v_string, __pyx_v_bad_codepoint); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 849, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 849, __pyx_L1_error)
00850: else:
+00851: raise ValueError(f'Unknown UCS kind: {kind}.')
__pyx_t_3 = NULL;
__pyx_t_4 = __Pyx_PyUnicode_From_int(__pyx_v_kind, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 851, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5[0] = __pyx_mstate_global->__pyx_kp_u_Unknown_UCS_kind;
__pyx_t_5[1] = __pyx_t_4;
__pyx_t_5[2] = __pyx_mstate_global->__pyx_kp_u__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, 851, __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, 851, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 851, __pyx_L1_error)
break;
}
00852:
00853:
+00854: cdef void_int str_to_utf8(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_str_to_utf8(struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_string, struct line_sender_utf8 *__pyx_v_utf8_out) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client.str_to_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00855: qdb_pystr_buf* b,
00856: PyObject* string,
00857: line_sender_utf8* utf8_out) except -1:
00858: """
00859: Convert a Python string to a UTF-8 borrowed buffer.
00860: This is done without allocating new Python `bytes` objects.
00861: In case the string is an ASCII string, it's also generally zero-copy.
00862: The `utf8_out` param will point to (borrow from) either the ASCII buffer
00863: inside the original Python object or a part of memory allocated inside the
00864: `b` buffer.
00865:
00866: If you need to use `utf8_out` without the GIL, call `qdb_pystr_buf_copy`.
00867: """
+00868: if not PyUnicode_CheckExact(string):
__pyx_t_1 = (!PyUnicode_CheckExact(__pyx_v_string));
if (unlikely(__pyx_t_1)) {
/* … */
}
+00869: raise TypeError(
__pyx_t_3 = NULL;
+00870: 'Expected a str object, not an object of type ' +
__pyx_t_5 = __Pyx_PyUnicode_ConcatSafe(__pyx_mstate_global->__pyx_kp_u_Expected_a_str_object_not_an_obj, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 870, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 869, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 869, __pyx_L1_error)
+00871: _fqn(type(<str><object>string)))
__pyx_t_4 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_string))))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 871, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4);
+00872: PyUnicode_READY(string)
__pyx_t_7 = PyUnicode_READY(__pyx_v_string); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 872, __pyx_L1_error)
00873:
00874: # We optimize the common case of ASCII strings.
00875: # This avoid memory allocations and copies altogether.
00876: # We get away with this because ASCII is a subset of UTF-8.
+00877: if PyUnicode_IS_COMPACT_ASCII(string):
__pyx_t_1 = PyUnicode_IS_COMPACT_ASCII(__pyx_v_string);
if (__pyx_t_1) {
/* … */
}
+00878: utf8_out.len = <size_t>(PyUnicode_GET_LENGTH(string))
__pyx_v_utf8_out->len = ((size_t)PyUnicode_GET_LENGTH(__pyx_v_string));
+00879: utf8_out.buf = <const char*>(PyUnicode_1BYTE_DATA(string))
__pyx_v_utf8_out->buf = ((char const *)PyUnicode_1BYTE_DATA(__pyx_v_string));
+00880: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
00881:
+00882: _encode_utf8(b, string, utf8_out)
__pyx_t_8 = __pyx_f_7questdb_7_client__encode_utf8(__pyx_v_b, __pyx_v_string, __pyx_v_utf8_out); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 882, __pyx_L1_error)
00883:
00884:
00885:
+00886: cdef void_int str_to_utf8_copy(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_str_to_utf8_copy(struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_string, struct line_sender_utf8 *__pyx_v_utf8_out) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client.str_to_utf8_copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00887: qdb_pystr_buf* b,
00888: PyObject* string,
00889: line_sender_utf8* utf8_out) except -1:
00890: """
00891: Variant of `str_to_utf8` that always copies the string to a new buffer.
00892:
00893: The resulting `utf8_out` can be used when not holding the GIL:
00894: The pointed-to memory is owned by `b`.
00895: """
+00896: if not PyUnicode_CheckExact(string):
__pyx_t_1 = (!PyUnicode_CheckExact(__pyx_v_string));
if (unlikely(__pyx_t_1)) {
/* … */
}
+00897: raise TypeError(
__pyx_t_3 = NULL;
+00898: 'Expected a str object, not an object of type ' +
__pyx_t_5 = __Pyx_PyUnicode_ConcatSafe(__pyx_mstate_global->__pyx_kp_u_Expected_a_str_object_not_an_obj, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 898, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 897, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 897, __pyx_L1_error)
+00899: _fqn(type(<str><object>string)))
__pyx_t_4 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_string))))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 899, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4);
00900:
+00901: PyUnicode_READY(string)
__pyx_t_7 = PyUnicode_READY(__pyx_v_string); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 901, __pyx_L1_error)
+00902: _encode_utf8(b, string, utf8_out)
__pyx_t_8 = __pyx_f_7questdb_7_client__encode_utf8(__pyx_v_b, __pyx_v_string, __pyx_v_utf8_out); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 902, __pyx_L1_error)
00903:
00904:
+00905: cdef void_int str_to_table_name(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_str_to_table_name(struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_string, struct line_sender_table_name *__pyx_v_name_out) {
struct line_sender_error *__pyx_v_err;
struct line_sender_utf8 __pyx_v_utf8;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client.str_to_table_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00906: qdb_pystr_buf* b,
00907: PyObject* string,
00908: line_sender_table_name* name_out) except -1:
00909: """
00910: Python string to borrowed C table name.
00911: Also see `str_to_utf8`.
00912: """
+00913: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
00914: cdef line_sender_utf8 utf8
+00915: str_to_utf8(b, string, &utf8)
__pyx_t_1 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, __pyx_v_string, (&__pyx_v_utf8)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 915, __pyx_L1_error)
+00916: if not line_sender_table_name_init(name_out, utf8.len, utf8.buf, &err):
__pyx_t_2 = (!line_sender_table_name_init(__pyx_v_name_out, __pyx_v_utf8.len, __pyx_v_utf8.buf, (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
+00917: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 917, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 917, __pyx_L1_error)
00918:
00919:
+00920: cdef void_int str_to_table_name_copy(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_str_to_table_name_copy(struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_string, struct line_sender_table_name *__pyx_v_name_out) {
struct line_sender_error *__pyx_v_err;
struct line_sender_utf8 __pyx_v_utf8;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client.str_to_table_name_copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00921: qdb_pystr_buf* b,
00922: PyObject* string,
00923: line_sender_table_name* name_out) except -1:
00924: """
00925: Python string to copied C table name.
00926: Also see `str_to_utf8_copy`.
00927: """
+00928: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
00929: cdef line_sender_utf8 utf8
+00930: str_to_utf8_copy(b, string, &utf8)
__pyx_t_1 = __pyx_f_7questdb_7_client_str_to_utf8_copy(__pyx_v_b, __pyx_v_string, (&__pyx_v_utf8)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 930, __pyx_L1_error)
+00931: if not line_sender_table_name_init(name_out, utf8.len, utf8.buf, &err):
__pyx_t_2 = (!line_sender_table_name_init(__pyx_v_name_out, __pyx_v_utf8.len, __pyx_v_utf8.buf, (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
+00932: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 932, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 932, __pyx_L1_error)
00933:
00934:
+00935: cdef void_int str_to_column_name(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_str_to_column_name(struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_string, struct line_sender_column_name *__pyx_v_name_out) {
struct line_sender_error *__pyx_v_err;
struct line_sender_utf8 __pyx_v_utf8;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client.str_to_column_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00936: qdb_pystr_buf* b,
00937: str string,
00938: line_sender_column_name* name_out) except -1:
00939: """
00940: Python string to borrowed C column name.
00941: Also see `str_to_utf8`.
00942: """
+00943: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
00944: cdef line_sender_utf8 utf8
+00945: str_to_utf8(b, <PyObject*>string, &utf8)
__pyx_t_1 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_string), (&__pyx_v_utf8)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 945, __pyx_L1_error)
+00946: if not line_sender_column_name_init(name_out, utf8.len, utf8.buf, &err):
__pyx_t_2 = (!line_sender_column_name_init(__pyx_v_name_out, __pyx_v_utf8.len, __pyx_v_utf8.buf, (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
+00947: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 947, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 947, __pyx_L1_error)
00948:
00949:
+00950: cdef void_int str_to_column_name_copy(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_str_to_column_name_copy(struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_string, struct line_sender_column_name *__pyx_v_name_out) {
struct line_sender_error *__pyx_v_err;
struct line_sender_utf8 __pyx_v_utf8;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client.str_to_column_name_copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00951: qdb_pystr_buf* b,
00952: str string,
00953: line_sender_column_name* name_out) except -1:
00954: """
00955: Python string to copied C column name.
00956: Also see `str_to_utf8_copy`.
00957: """
+00958: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
00959: cdef line_sender_utf8 utf8
+00960: str_to_utf8_copy(b, <PyObject*>string, &utf8)
__pyx_t_1 = __pyx_f_7questdb_7_client_str_to_utf8_copy(__pyx_v_b, ((PyObject *)__pyx_v_string), (&__pyx_v_utf8)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 960, __pyx_L1_error)
+00961: if not line_sender_column_name_init(name_out, utf8.len, utf8.buf, &err):
__pyx_t_2 = (!line_sender_column_name_init(__pyx_v_name_out, __pyx_v_utf8.len, __pyx_v_utf8.buf, (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
+00962: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 962, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 962, __pyx_L1_error)
00963:
00964:
+00965: cdef object _UTC = datetime.timezone.utc
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 965, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_timezone); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 965, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_utc); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 965, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_XGOTREF(__pyx_v_7questdb_7_client__UTC); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__UTC, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_5 = 0;
+00966: cdef object _UTC_EPOCH = datetime.datetime(1970, 1, 1, tzinfo=_UTC)
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 966, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 966, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 966, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_tzinfo, __pyx_v_7questdb_7_client__UTC) < (0)) __PYX_ERR(0, 966, __pyx_L1_error) __pyx_t_20 = __Pyx_PyObject_Call(__pyx_t_18, __pyx_mstate_global->__pyx_tuple[3], __pyx_t_5); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 966, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 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;
00967:
00968:
+00969: _NAIVE_DATETIME_WARNED = False
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_NAIVE_DATETIME_WARNED, Py_False) < (0)) __PYX_ERR(0, 969, __pyx_L1_error)
00970:
00971:
+00972: cdef object _as_utc_aware(cp_datetime dt):
static PyObject *__pyx_f_7questdb_7_client__as_utc_aware(PyDateTime_DateTime *__pyx_v_dt) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client._as_utc_aware", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00973: global _NAIVE_DATETIME_WARNED
+00974: if dt.tzinfo is not None:
__pyx_t_1 = __pyx_f_7cpython_8datetime_8datetime_6tzinfo___get__(__pyx_v_dt); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 974, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = (__pyx_t_1 != Py_None); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* … */ }
+00975: return dt
{
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;
+00976: 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, 976, __pyx_L1_error) if (unlikely(__pyx_t_2)) { /* … */ }
+00977: raise ValueError('NaT is not a valid timestamp.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_NaT_is_not_a_valid_timestamp};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 977, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 977, __pyx_L1_error)
+00978: if not _NAIVE_DATETIME_WARNED:
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_NAIVE_DATETIME_WARNED); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 978, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 978, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = (!__pyx_t_2); if (__pyx_t_5) { /* … */ }
+00979: _NAIVE_DATETIME_WARNED = True
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_NAIVE_DATETIME_WARNED, Py_True) < (0)) __PYX_ERR(0, 979, __pyx_L1_error)
00980: # cdef frames and this module's def entry points are invisible to
00981: # the warnings stack walker, so level 1 is already the user's call.
+00982: warnings.warn(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_warnings); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 982, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_warn); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 982, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
#endif
__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[28];
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 982, __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, 982, __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;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 982, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
00983: 'Naive datetime interpreted as UTC (questdb 4.x used local '
00984: 'time). If you meant "now", use TimestampNanos.now() or '
00985: 'datetime.now(timezone.utc); pass timezone-aware datetimes '
00986: 'to silence this warning.',
+00987: UserWarning,
#if CYTHON_VECTORCALL
00988: stacklevel=1)
+00989: 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, 989, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_timezone); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 989, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_utc); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 989, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; #if CYTHON_VECTORCALL #endif __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[36]; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 989, __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, 989, __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; #if CYTHON_VECTORCALL #endif __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 989, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } { 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[36] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[36])) __PYX_ERR(0, 989, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[36]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[36]);
00990:
00991:
+00992: cdef int64_t datetime_to_micros(cp_datetime dt):
static int64_t __pyx_f_7questdb_7_client_datetime_to_micros(PyDateTime_DateTime *__pyx_v_dt) {
PyObject *__pyx_v_aware = 0;
PyObject *__pyx_v_delta = 0;
int64_t __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.datetime_to_micros", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1L;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_aware);
__Pyx_XDECREF(__pyx_v_delta);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00993: """
00994: Convert a :class:`datetime.datetime` to microseconds since the epoch.
00995:
00996: Naive datetimes are interpreted as UTC.
00997: """
+00998: cdef object aware = _as_utc_aware(dt)
__pyx_t_1 = __pyx_f_7questdb_7_client__as_utc_aware(__pyx_v_dt); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 998, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_aware = __pyx_t_1; __pyx_t_1 = 0;
+00999: cdef object delta = aware - _UTC_EPOCH
__pyx_t_1 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_aware, __pyx_v_7questdb_7_client__UTC_EPOCH); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 999, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_delta = __pyx_t_1; __pyx_t_1 = 0;
01000: return (
+01001: <int64_t>delta.days * <int64_t>86_400_000_000 +
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_delta, __pyx_mstate_global->__pyx_n_u_days); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1001, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyLong_As_int64_t(__pyx_t_1); if (unlikely((__pyx_t_2 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1001, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+01002: <int64_t>delta.seconds * <int64_t>1_000_000 +
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_delta, __pyx_mstate_global->__pyx_n_u_seconds); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1002, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyLong_As_int64_t(__pyx_t_1); if (unlikely((__pyx_t_3 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1002, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* … */ { __pyx_r = (((((int64_t)__pyx_t_2) * ((int64_t)0x141DD76000)) + (((int64_t)__pyx_t_3) * ((int64_t)0xF4240))) + ((int64_t)__pyx_t_4)); } goto __pyx_L0;
+01003: <int64_t>delta.microseconds)
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_delta, __pyx_mstate_global->__pyx_n_u_microseconds); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1003, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyLong_As_int64_t(__pyx_t_1); if (unlikely((__pyx_t_4 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1003, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
01004:
01005:
+01006: cdef int64_t datetime_to_nanos(cp_datetime dt):
static int64_t __pyx_f_7questdb_7_client_datetime_to_nanos(PyDateTime_DateTime *__pyx_v_dt) {
int64_t __pyx_v_micros;
int64_t __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client.datetime_to_nanos", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1L;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01007: """
01008: Convert a `datetime.datetime` to nanoseconds since the epoch.
01009: """
+01010: cdef int64_t micros = datetime_to_micros(dt)
__pyx_t_1 = __pyx_f_7questdb_7_client_datetime_to_micros(__pyx_v_dt); if (unlikely(__pyx_t_1 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 1010, __pyx_L1_error) __pyx_v_micros = __pyx_t_1;
01011: # INT64_MAX // 1000 == 9_223_372_036_854_775 is the largest microsecond
01012: # value whose nanosecond product still fits in an int64.
+01013: if (micros > <int64_t>9_223_372_036_854_775 or
__pyx_t_3 = (__pyx_v_micros > ((int64_t)0x20C49BA5E353F7));
if (!__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L4_bool_binop_done;
}
/* … */
if (unlikely(__pyx_t_2)) {
/* … */
}
+01014: micros < <int64_t>-9_223_372_036_854_775):
__pyx_t_3 = (__pyx_v_micros < ((int64_t)-9223372036854775L)); __pyx_t_2 = __pyx_t_3; __pyx_L4_bool_binop_done:;
+01015: raise ValueError(
__pyx_t_5 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_datetime_is_out_of_range_for_a_n};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1015, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 1015, __pyx_L1_error)
01016: 'datetime is out of range for a nanosecond timestamp: '
01017: 'must be between 1677-09-21T00:12:43.145225Z and '
01018: '2262-04-11T23:47:16.854775Z.')
+01019: return micros * 1000
{
__pyx_r = (__pyx_v_micros * 0x3E8);
}
goto __pyx_L0;
01020:
01021:
+01022: class ServerTimestampType:
__pyx_t_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, 1022, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __pyx_t_5 = __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_5)) __PYX_ERR(0, 1022, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ServerTimestampType, __pyx_t_5) < (0)) __PYX_ERR(0, 1022, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
01023: """
01024: A placeholder value to indicate that the data should be inserted
01025: using a server-generated-timestamp.
01026:
01027: Don't instantiate this class directly, use the singleton
01028: :data:`ServerTimestamp` instead.
01029:
01030: This feature is mostly provided for legacy compatibility.
01031: We recommend always specifying an explicit timestamp.
01032:
01033: Using ``ServerTimestamp`` will prevent QuestDB's deduplication
01034: feature from working as it would generate unique rows on resubmission.
01035: """
01036: pass
01037:
01038:
01039: #: Singleton instance used to request server-side timestamping.
01040: #: See :class:`ServerTimestampType` for more details.
+01041: ServerTimestamp = ServerTimestampType()
__pyx_t_5 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_ServerTimestampType); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1041, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL}; __pyx_t_20 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_18, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 1041, __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, 1041, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
01042:
01043:
+01044: cdef class TimestampMicros:
struct __pyx_obj_7questdb_7_client_TimestampMicros {
PyObject_HEAD
int64_t _value;
};
01045: """
01046: A timestamp in microseconds since the UNIX epoch (UTC).
01047:
01048: You may construct a ``TimestampMicros`` from an integer or a
01049: ``datetime.datetime``, or simply call the :func:`TimestampMicros.now`
01050: method.
01051:
01052: .. code-block:: python
01053:
01054: # Recommended way to get the current timestamp.
01055: TimestampMicros.now()
01056:
01057: # The above is equivalent to:
01058: TimestampMicros(time.time_ns() // 1000)
01059:
01060: # You can provide a numeric timestamp too. It can't be negative.
01061: TimestampMicros(1657888365426838)
01062:
01063: ``TimestampMicros`` can also be constructed from a ``datetime.datetime``
01064: object.
01065:
01066: .. code-block:: python
01067:
01068: TimestampMicros.from_datetime(
01069: datetime.datetime.now(tz=datetime.timezone.utc))
01070:
01071: We recommend that when using ``datetime`` objects, you explicitly pass in
01072: the timezone to use. A ``datetime`` object without an associated timezone
01073: is interpreted as UTC (a ``UserWarning`` is emitted once per process).
01074: Note that ``datetime.datetime.now()`` is your local wall clock: use
01075: ``datetime.datetime.now(datetime.timezone.utc)`` or ``now()`` on this
01076: class for the current instant.
01077: """
01078: cdef int64_t _value
01079:
+01080: def __cinit__(self, value):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_15TimestampMicros_1__cinit__(PyObject *__pyx_v_self,
#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, 1080, __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, 1080, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__cinit__", 0) < (0)) __PYX_ERR(0, 1080, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, i); __PYX_ERR(0, 1080, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 1)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1080, __pyx_L3_error)
}
__pyx_v_value = values[0];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1080, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.TimestampMicros.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return -1;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_15TimestampMicros___cinit__(((struct __pyx_obj_7questdb_7_client_TimestampMicros *)__pyx_v_self), __pyx_v_value);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_15TimestampMicros___cinit__(struct __pyx_obj_7questdb_7_client_TimestampMicros *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_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;
}
+01081: 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, 1081, __pyx_L1_error) if (unlikely(__pyx_t_1)) { /* … */ }
+01082: raise ValueError('value must be a non-negative integer.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_value_must_be_a_non_negative_int};
__pyx_t_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, 1082, __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, 1082, __pyx_L1_error)
+01083: self._value = value
__pyx_t_5 = __Pyx_PyLong_As_int64_t(__pyx_v_value); if (unlikely((__pyx_t_5 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1083, __pyx_L1_error) __pyx_v_self->_value = __pyx_t_5;
01084:
+01085: @classmethod
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_15TimestampMicros_3from_datetime(PyObject *__pyx_v_cls, #if CYTHON_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, 1085, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1085, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "from_datetime", 0) < (0)) __PYX_ERR(0, 1085, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("from_datetime", 1, 1, 1, i); __PYX_ERR(0, 1085, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1085, __pyx_L3_error) } __pyx_v_dt = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("from_datetime", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1085, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.TimestampMicros.from_datetime", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_15TimestampMicros_2from_datetime(((PyTypeObject*)__pyx_v_cls), __pyx_v_dt); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_15TimestampMicros_2from_datetime(PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_dt) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("questdb._client.TimestampMicros.from_datetime", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_20 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 1085, __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, 1085, __pyx_L1_error) __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_15TimestampMicros_3from_datetime, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_TimestampMicros_from_datetime, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[158])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1085, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_18, __pyx_t_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_18) < (0)) __PYX_ERR(0, 1085, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_GetNameInClass(__pyx_t_18, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros, __pyx_mstate_global->__pyx_n_u_from_datetime); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1085, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_20 = __Pyx_Method_ClassMethod(__pyx_t_18); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 1085, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros, __pyx_mstate_global->__pyx_n_u_from_datetime, __pyx_t_20) < (0)) __PYX_ERR(0, 1085, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
01086: def from_datetime(cls, dt: datetime.datetime):
01087: """
01088: Construct a ``TimestampMicros`` from a :class:`datetime.datetime` object.
01089: """
+01090: if not isinstance(dt, cp_datetime):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_dt, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime);
__pyx_t_2 = (!__pyx_t_1);
if (unlikely(__pyx_t_2)) {
/* … */
}
+01091: raise TypeError('dt must be a datetime object.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_dt_must_be_a_datetime_object};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1091, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 1091, __pyx_L1_error)
+01092: return cls(datetime_to_micros(dt))
__pyx_t_4 = NULL; if (!(likely(((__pyx_v_dt) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dt, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(0, 1092, __pyx_L1_error) __pyx_t_6 = __pyx_f_7questdb_7_client_datetime_to_micros(((PyDateTime_DateTime *)__pyx_v_dt)); if (unlikely(__pyx_t_6 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 1092, __pyx_L1_error) __pyx_t_7 = __Pyx_PyLong_From_int64_t(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1092, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_5 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_v_cls, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1092, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
01093:
+01094: @classmethod
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_15TimestampMicros_5now(PyObject *__pyx_v_cls, #if CYTHON_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[159])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 1094, __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, 1094, __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, 1094, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __pyx_t_18 = __Pyx_Method_ClassMethod(__pyx_t_20); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1094, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __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_18) < (0)) __PYX_ERR(0, 1094, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
01095: def now(cls):
01096: """
01097: Construct a ``TimestampMicros`` from the current time as UTC.
01098: """
+01099: cdef int64_t value = line_sender_now_micros()
__pyx_v_value = line_sender_now_micros();
+01100: return cls(value)
__pyx_t_2 = NULL; __pyx_t_3 = __Pyx_PyLong_From_int64_t(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1100, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_v_cls, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1100, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
01101:
+01102: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_15TimestampMicros_5value_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_15TimestampMicros_5value_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_15TimestampMicros_5value___get__(((struct __pyx_obj_7questdb_7_client_TimestampMicros *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_15TimestampMicros_5value___get__(struct __pyx_obj_7questdb_7_client_TimestampMicros *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.TimestampMicros.value.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01103: def value(self) -> int:
01104: """Number of microseconds (Unix epoch timestamp, UTC)."""
+01105: return self._value
__pyx_t_1 = __Pyx_PyLong_From_int64_t(__pyx_v_self->_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1105, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
01106:
+01107: def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_15TimestampMicros_7__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_15TimestampMicros_7__repr__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_15TimestampMicros_6__repr__(((struct __pyx_obj_7questdb_7_client_TimestampMicros *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_15TimestampMicros_6__repr__(struct __pyx_obj_7questdb_7_client_TimestampMicros *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_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;
}
+01108: 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, 1108, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2[0] = __pyx_mstate_global->__pyx_kp_u_TimestampMicros; __pyx_t_2[1] = __pyx_t_1; __pyx_t_2[2] = __pyx_mstate_global->__pyx_kp_u__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, 1108, __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;
01109:
01110:
+01111: cdef class TimestampNanos:
struct __pyx_obj_7questdb_7_client_TimestampNanos {
PyObject_HEAD
int64_t _value;
};
01112: """
01113: A timestamp in nanoseconds since the UNIX epoch (UTC).
01114:
01115: You may construct a ``TimestampNanos`` from an integer or a
01116: ``datetime.datetime``, or simply call the :func:`TimestampNanos.now`
01117: method.
01118:
01119: .. code-block:: python
01120:
01121: # Recommended way to get the current timestamp.
01122: TimestampNanos.now()
01123:
01124: # The above is equivalent to:
01125: TimestampNanos(time.time_ns())
01126:
01127: # You can provide a numeric timestamp too. It can't be negative.
01128: TimestampNanos(1657888365426838016)
01129:
01130: ``TimestampNanos`` can also be constructed from a ``datetime`` object.
01131:
01132: .. code-block:: python
01133:
01134: TimestampNanos.from_datetime(
01135: datetime.datetime.now(tz=datetime.timezone.utc))
01136:
01137: We recommend that when using ``datetime`` objects, you explicitly pass in
01138: the timezone to use. A ``datetime`` object without an associated timezone
01139: is interpreted as UTC (a ``UserWarning`` is emitted once per process).
01140: Note that ``datetime.datetime.now()`` is your local wall clock: use
01141: ``datetime.datetime.now(datetime.timezone.utc)`` or ``now()`` on this
01142: class for the current instant.
01143: """
01144: cdef int64_t _value
01145:
+01146: def __cinit__(self, value):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_14TimestampNanos_1__cinit__(PyObject *__pyx_v_self,
#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, 1146, __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, 1146, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__cinit__", 0) < (0)) __PYX_ERR(0, 1146, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, i); __PYX_ERR(0, 1146, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 1)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1146, __pyx_L3_error)
}
__pyx_v_value = values[0];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1146, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.TimestampNanos.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return -1;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_14TimestampNanos___cinit__(((struct __pyx_obj_7questdb_7_client_TimestampNanos *)__pyx_v_self), __pyx_v_value);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_14TimestampNanos___cinit__(struct __pyx_obj_7questdb_7_client_TimestampNanos *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_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;
}
+01147: 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, 1147, __pyx_L1_error) if (unlikely(__pyx_t_1)) { /* … */ }
+01148: raise ValueError('value must be a non-negative integer.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_value_must_be_a_non_negative_int};
__pyx_t_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, 1148, __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, 1148, __pyx_L1_error)
+01149: self._value = value
__pyx_t_5 = __Pyx_PyLong_As_int64_t(__pyx_v_value); if (unlikely((__pyx_t_5 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1149, __pyx_L1_error) __pyx_v_self->_value = __pyx_t_5;
01150:
+01151: @classmethod
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_14TimestampNanos_3from_datetime(PyObject *__pyx_v_cls, #if CYTHON_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, 1151, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1151, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "from_datetime", 0) < (0)) __PYX_ERR(0, 1151, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("from_datetime", 1, 1, 1, i); __PYX_ERR(0, 1151, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1151, __pyx_L3_error) } __pyx_v_dt = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("from_datetime", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1151, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.TimestampNanos.from_datetime", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_14TimestampNanos_2from_datetime(((PyTypeObject*)__pyx_v_cls), __pyx_v_dt); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_14TimestampNanos_2from_datetime(PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_dt) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("questdb._client.TimestampNanos.from_datetime", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1151, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_dt, __pyx_mstate_global->__pyx_kp_u_datetime_datetime) < (0)) __PYX_ERR(0, 1151, __pyx_L1_error) __pyx_t_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[162])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 1151, __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_18); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos, __pyx_mstate_global->__pyx_n_u_from_datetime, __pyx_t_20) < (0)) __PYX_ERR(0, 1151, __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, 1151, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __pyx_t_18 = __Pyx_Method_ClassMethod(__pyx_t_20); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1151, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __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_18) < (0)) __PYX_ERR(0, 1151, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
01152: def from_datetime(cls, dt: datetime.datetime):
01153: """
01154: Construct a ``TimestampNanos`` from a ``datetime.datetime`` object.
01155: """
+01156: if not isinstance(dt, cp_datetime):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_dt, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime);
__pyx_t_2 = (!__pyx_t_1);
if (unlikely(__pyx_t_2)) {
/* … */
}
+01157: raise TypeError('dt must be a datetime object.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_dt_must_be_a_datetime_object};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1157, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 1157, __pyx_L1_error)
+01158: return cls(datetime_to_nanos(dt))
__pyx_t_4 = NULL; if (!(likely(((__pyx_v_dt) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dt, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(0, 1158, __pyx_L1_error) __pyx_t_6 = __pyx_f_7questdb_7_client_datetime_to_nanos(((PyDateTime_DateTime *)__pyx_v_dt)); if (unlikely(__pyx_t_6 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 1158, __pyx_L1_error) __pyx_t_7 = __Pyx_PyLong_From_int64_t(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1158, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_5 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_v_cls, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1158, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
01159:
+01160: @classmethod
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_14TimestampNanos_5now(PyObject *__pyx_v_cls, #if CYTHON_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_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_14TimestampNanos_5now, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_TimestampNanos_now, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[163])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos, __pyx_mstate_global->__pyx_n_u_now, __pyx_t_18) < (0)) __PYX_ERR(0, 1160, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_GetNameInClass(__pyx_t_18, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos, __pyx_mstate_global->__pyx_n_u_now); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_20 = __Pyx_Method_ClassMethod(__pyx_t_18); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 1160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos, __pyx_mstate_global->__pyx_n_u_now, __pyx_t_20) < (0)) __PYX_ERR(0, 1160, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
01161: def now(cls):
01162: """
01163: Construct a ``TimestampNanos`` from the current time as UTC.
01164: """
+01165: cdef int64_t value = line_sender_now_nanos()
__pyx_v_value = line_sender_now_nanos();
+01166: return cls(value)
__pyx_t_2 = NULL; __pyx_t_3 = __Pyx_PyLong_From_int64_t(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1166, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_v_cls, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1166, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
01167:
+01168: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_14TimestampNanos_5value_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_14TimestampNanos_5value_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_14TimestampNanos_5value___get__(((struct __pyx_obj_7questdb_7_client_TimestampNanos *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_14TimestampNanos_5value___get__(struct __pyx_obj_7questdb_7_client_TimestampNanos *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.TimestampNanos.value.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01169: def value(self) -> int:
01170: """Number of nanoseconds (Unix epoch timestamp, UTC)."""
+01171: return self._value
__pyx_t_1 = __Pyx_PyLong_From_int64_t(__pyx_v_self->_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1171, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
01172:
+01173: def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_14TimestampNanos_7__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_14TimestampNanos_7__repr__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_14TimestampNanos_6__repr__(((struct __pyx_obj_7questdb_7_client_TimestampNanos *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_14TimestampNanos_6__repr__(struct __pyx_obj_7questdb_7_client_TimestampNanos *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.TimestampNanos.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01174: return f'TimestampNanos({self.value})'
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1174, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_t_1, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1174, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3[0] = __pyx_mstate_global->__pyx_kp_u_TimestampNanos; __pyx_t_3[1] = __pyx_t_2; __pyx_t_3[2] = __pyx_mstate_global->__pyx_kp_u__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, 1174, __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;
01175:
01176:
+01177: cdef class Char:
struct __pyx_obj_7questdb_7_client_Char {
PyObject_HEAD
uint16_t _value;
};
01178: """A QuestDB CHAR value stored as one UTF-16 code unit.
01179:
01180: ``'\\x00'`` is stored as code unit 0. CHAR has no physical ``NULL``
01181: representation: QWP/Arrow egress returns it as 0, while text output
01182: renders it as empty. Some QuestDB SQL operations treat code unit 0 as
01183: CHAR's null/absent marker.
01184: """
01185: cdef uint16_t _value
01186:
+01187: def __cinit__(self, value):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_4Char_1__cinit__(PyObject *__pyx_v_self,
#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, 1187, __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, 1187, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__cinit__", 0) < (0)) __PYX_ERR(0, 1187, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, i); __PYX_ERR(0, 1187, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 1)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1187, __pyx_L3_error)
}
__pyx_v_value = values[0];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1187, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.Char.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return -1;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_4Char___cinit__(((struct __pyx_obj_7questdb_7_client_Char *)__pyx_v_self), __pyx_v_value);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_4Char___cinit__(struct __pyx_obj_7questdb_7_client_Char *__pyx_v_self, PyObject *__pyx_v_value) {
long __pyx_v_code_point;
int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Char.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01188: if not isinstance(value, str):
__pyx_t_1 = PyUnicode_Check(__pyx_v_value);
__pyx_t_2 = (!__pyx_t_1);
if (unlikely(__pyx_t_2)) {
/* … */
}
+01189: raise TypeError('value must be a str.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_value_must_be_a_str};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1189, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 1189, __pyx_L1_error)
+01190: if len(value) != 1:
__pyx_t_6 = PyObject_Length(__pyx_v_value); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1190, __pyx_L1_error) __pyx_t_2 = (__pyx_t_6 != 1); if (unlikely(__pyx_t_2)) { /* … */ }
+01191: raise ValueError('value must contain exactly one code point.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_value_must_contain_exactly_one_c};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1191, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 1191, __pyx_L1_error)
+01192: code_point = ord(value)
__pyx_t_7 = __Pyx_PyObject_Ord(__pyx_v_value); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 1192, __pyx_L1_error) __pyx_v_code_point = __pyx_t_7;
+01193: if code_point > 0xFFFF:
__pyx_t_2 = (__pyx_v_code_point > 0xFFFF);
if (unlikely(__pyx_t_2)) {
/* … */
}
+01194: raise ValueError(
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_a_supplementary_character_needs};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1194, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 1194, __pyx_L1_error)
01195: 'a supplementary character needs a surrogate pair and '
01196: 'cannot fit CHAR; use str/VARCHAR instead.')
+01197: self._value = <uint16_t>code_point
__pyx_v_self->_value = ((uint16_t)__pyx_v_code_point);
01198:
+01199: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_4Char_5value_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_4Char_5value_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_4Char_5value___get__(((struct __pyx_obj_7questdb_7_client_Char *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_4Char_5value___get__(struct __pyx_obj_7questdb_7_client_Char *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.Char.value.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01200: def value(self) -> str:
01201: """The single Python code point represented by this CHAR."""
+01202: return chr(self._value)
__pyx_t_1 = PyUnicode_FromOrdinal(__pyx_v_self->_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1202, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
01203:
+01204: def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_4Char_3__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_4Char_3__repr__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_4Char_2__repr__(((struct __pyx_obj_7questdb_7_client_Char *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_4Char_2__repr__(struct __pyx_obj_7questdb_7_client_Char *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Char.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01205: return f'Char({self.value!r})'
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1205, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_t_1), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1205, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3[0] = __pyx_mstate_global->__pyx_kp_u_Char; __pyx_t_3[1] = __pyx_t_2; __pyx_t_3[2] = __pyx_mstate_global->__pyx_kp_u__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, 1205, __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;
01206:
01207:
+01208: cdef class DateMillis:
struct __pyx_obj_7questdb_7_client_DateMillis {
PyObject_HEAD
int64_t _value;
};
01209: """A QuestDB DATE value in milliseconds since the Unix epoch (UTC).
01210:
01211: QuestDB DATE is a millisecond timestamp, not a civil date. The full signed
01212: 64-bit range is accepted, including pre-epoch values. ``INT64_MIN`` is
01213: accepted but reads back from QuestDB as ``NULL``.
01214:
01215: This is how :func:`Buffer.row <questdb.ingress.Buffer.row>` writes a
01216: DATE column. DataFrames claim DATE from the column's Arrow type
01217: instead — ``pa.timestamp('ms')`` (naive or tz-aware),
01218: ``pa.date32()``, or ``pa.date64()`` — so there is no DATE cell type
01219: and no ``'date'`` kind for ``schema_overrides``. A NumPy
01220: ``datetime64[ms]`` dtype has no route of its own to DATE and widens
01221: to a microsecond TIMESTAMP, unless the frame carries a
01222: ``df.attrs['questdb']`` claim naming the column DATE, which puts the
01223: Arrow type back on it first. That claim is written as
01224: ``{'kind': 'date'}`` under the column's entry in the version-1 claim
01225: mapping. Like the other QWP-only types, DATE needs a QWP sender; ILP
01226: senders have no DATE type, so the datetime columns they accept all
01227: land as TIMESTAMP.
01228: """
01229: cdef int64_t _value
01230:
+01231: def __cinit__(self, millis):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_10DateMillis_1__cinit__(PyObject *__pyx_v_self,
#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, 1231, __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, 1231, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__cinit__", 0) < (0)) __PYX_ERR(0, 1231, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, i); __PYX_ERR(0, 1231, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 1)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1231, __pyx_L3_error)
}
__pyx_v_millis = values[0];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1231, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.DateMillis.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return -1;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_10DateMillis___cinit__(((struct __pyx_obj_7questdb_7_client_DateMillis *)__pyx_v_self), __pyx_v_millis);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_10DateMillis___cinit__(struct __pyx_obj_7questdb_7_client_DateMillis *__pyx_v_self, PyObject *__pyx_v_millis) {
int __pyx_r;
__Pyx_INCREF(__pyx_v_millis);
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.DateMillis.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_millis);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01232: if not _is_integral_not_bool(millis):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_integral_not_bool(__pyx_v_millis); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1232, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (unlikely(__pyx_t_2)) { /* … */ }
+01233: raise TypeError('millis must be a whole number.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_millis_must_be_a_whole_number};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1233, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 1233, __pyx_L1_error)
+01234: millis = int(millis)
__pyx_t_3 = __Pyx_PyNumber_Int(__pyx_v_millis); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1234, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF_SET(__pyx_v_millis, __pyx_t_3); __pyx_t_3 = 0;
+01235: if millis < INT64_MIN or millis > INT64_MAX:
__pyx_t_3 = __Pyx_PyLong_From_int64_t(INT64_MIN); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1235, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_millis, __pyx_t_3, Py_LT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1235, __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, 1235, __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, 1235, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_2 = __pyx_t_1; __pyx_L5_bool_binop_done:; if (unlikely(__pyx_t_2)) { /* … */ }
+01236: raise ValueError('millis must fit in a signed 64-bit integer.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_millis_must_fit_in_a_signed_64_b};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1236, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 1236, __pyx_L1_error)
+01237: self._value = <int64_t>millis
__pyx_t_6 = __Pyx_PyLong_As_int64_t(__pyx_v_millis); if (unlikely((__pyx_t_6 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1237, __pyx_L1_error) __pyx_v_self->_value = ((int64_t)__pyx_t_6);
01238:
+01239: @classmethod
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_10DateMillis_3from_datetime(PyObject *__pyx_v_cls, #if CYTHON_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, 1239, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1239, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "from_datetime", 0) < (0)) __PYX_ERR(0, 1239, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("from_datetime", 1, 1, 1, i); __PYX_ERR(0, 1239, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1239, __pyx_L3_error) } __pyx_v_dt = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("from_datetime", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1239, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.DateMillis.from_datetime", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_10DateMillis_2from_datetime(((PyTypeObject*)__pyx_v_cls), __pyx_v_dt); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_10DateMillis_2from_datetime(PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_dt) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("questdb._client.DateMillis.from_datetime", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_20 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 1239, __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, 1239, __pyx_L1_error) __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_10DateMillis_3from_datetime, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DateMillis_from_datetime, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[168])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1239, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_18, __pyx_t_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_18) < (0)) __PYX_ERR(0, 1239, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_GetNameInClass(__pyx_t_18, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis, __pyx_mstate_global->__pyx_n_u_from_datetime); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1239, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_20 = __Pyx_Method_ClassMethod(__pyx_t_18); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 1239, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis, __pyx_mstate_global->__pyx_n_u_from_datetime, __pyx_t_20) < (0)) __PYX_ERR(0, 1239, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
01240: def from_datetime(cls, dt: datetime.datetime):
01241: """Construct a ``DateMillis`` by flooring a datetime to milliseconds."""
+01242: if not isinstance(dt, cp_datetime):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_dt, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime);
__pyx_t_2 = (!__pyx_t_1);
if (unlikely(__pyx_t_2)) {
/* … */
}
+01243: raise TypeError('dt must be a datetime object.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_dt_must_be_a_datetime_object};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1243, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 1243, __pyx_L1_error)
+01244: return cls(datetime_to_micros(dt) // 1000)
__pyx_t_4 = NULL; if (!(likely(((__pyx_v_dt) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dt, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(0, 1244, __pyx_L1_error) __pyx_t_6 = __pyx_f_7questdb_7_client_datetime_to_micros(((PyDateTime_DateTime *)__pyx_v_dt)); if (unlikely(__pyx_t_6 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 1244, __pyx_L1_error) __pyx_t_7 = __Pyx_PyLong_From_int64_t(__Pyx_div_int64_t(__pyx_t_6, 0x3E8, 1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1244, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_5 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_v_cls, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1244, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
01245:
+01246: @classmethod
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_10DateMillis_5now(PyObject *__pyx_v_cls, #if CYTHON_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[169])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 1246, __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, 1246, __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, 1246, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __pyx_t_18 = __Pyx_Method_ClassMethod(__pyx_t_20); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1246, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __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_18) < (0)) __PYX_ERR(0, 1246, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
01247: def now(cls):
01248: """Construct a ``DateMillis`` from the current time as UTC."""
+01249: return cls(line_sender_now_micros() // 1000)
__pyx_t_2 = NULL; __pyx_t_3 = __Pyx_PyLong_From_int64_t(__Pyx_div_int64_t(line_sender_now_micros(), 0x3E8, 1)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1249, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_v_cls, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1249, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
01250:
+01251: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_10DateMillis_5value_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_10DateMillis_5value_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_10DateMillis_5value___get__(((struct __pyx_obj_7questdb_7_client_DateMillis *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_10DateMillis_5value___get__(struct __pyx_obj_7questdb_7_client_DateMillis *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.DateMillis.value.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01252: def value(self) -> int:
01253: """Milliseconds since the Unix epoch (UTC)."""
+01254: return self._value
__pyx_t_1 = __Pyx_PyLong_From_int64_t(__pyx_v_self->_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1254, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
01255:
+01256: def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_10DateMillis_7__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_10DateMillis_7__repr__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_10DateMillis_6__repr__(((struct __pyx_obj_7questdb_7_client_DateMillis *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_10DateMillis_6__repr__(struct __pyx_obj_7questdb_7_client_DateMillis *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_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;
}
+01257: 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, 1257, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2[0] = __pyx_mstate_global->__pyx_kp_u_DateMillis; __pyx_t_2[1] = __pyx_t_1; __pyx_t_2[2] = __pyx_mstate_global->__pyx_kp_u__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, 1257, __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;
01258:
01259:
+01260: cdef class Long256:
struct __pyx_obj_7questdb_7_client_Long256 {
PyObject_HEAD
PyObject *_bytes;
};
01261: """An unsigned 256-bit integer for a QuestDB LONG256 column.
01262:
01263: The value whose four 64-bit limbs are all ``0x8000000000000000`` is
01264: accepted but reads back from QuestDB as ``NULL``.
01265: """
01266: cdef bytes _bytes
01267:
+01268: def __cinit__(self, value):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_7Long256_1__cinit__(PyObject *__pyx_v_self,
#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, 1268, __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, 1268, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__cinit__", 0) < (0)) __PYX_ERR(0, 1268, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, i); __PYX_ERR(0, 1268, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 1)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1268, __pyx_L3_error)
}
__pyx_v_value = values[0];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1268, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.Long256.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return -1;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_7Long256___cinit__(((struct __pyx_obj_7questdb_7_client_Long256 *)__pyx_v_self), __pyx_v_value);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_7Long256___cinit__(struct __pyx_obj_7questdb_7_client_Long256 *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
__Pyx_INCREF(__pyx_v_value);
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Long256.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_value);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01269: if not _is_integral_not_bool(value):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_integral_not_bool(__pyx_v_value); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1269, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (unlikely(__pyx_t_2)) { /* … */ }
+01270: raise TypeError('value must be a whole number.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_value_must_be_a_whole_number};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1270, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 1270, __pyx_L1_error)
+01271: value = int(value)
__pyx_t_3 = __Pyx_PyNumber_Int(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1271, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_3); __pyx_t_3 = 0;
+01272: if value < 0 or value >= (1 << 256):
__pyx_t_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, 1272, __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, 1272, __pyx_L1_error) __pyx_t_2 = __pyx_t_1; __pyx_L5_bool_binop_done:; if (unlikely(__pyx_t_2)) { /* … */ }
+01273: raise ValueError('value must be in the range 0 <= value < 2**256.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_value_must_be_in_the_range_0_val};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1273, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 1273, __pyx_L1_error)
01274: # The column write reads exactly 32 bytes from the pointer. The
01275: # unbound `int.to_bytes` keeps a subclass override out of the way,
01276: # so the result is always a `bytes` of exactly that width.
+01277: self._bytes = int.to_bytes(value, 32, 'little')
__pyx_t_4 = ((PyObject *)(&PyLong_Type)); __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; { PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_v_value, __pyx_mstate_global->__pyx_int_32, __pyx_mstate_global->__pyx_n_u_little}; __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_to_bytes, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1277, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } if (!(likely(PyBytes_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_3))) __PYX_ERR(0, 1277, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_3); __Pyx_GOTREF(__pyx_v_self->_bytes); __Pyx_DECREF_SET(__pyx_v_self->_bytes, ((PyObject*)__pyx_t_3)); __pyx_t_3 = 0;
01278:
+01279: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7Long256_5value_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_7Long256_5value_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_7Long256_5value___get__(((struct __pyx_obj_7questdb_7_client_Long256 *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_7Long256_5value___get__(struct __pyx_obj_7questdb_7_client_Long256 *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Long256.value.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01280: def value(self) -> int:
01281: """The unsigned integer value."""
+01282: return int.from_bytes(self._bytes, 'little')
__pyx_t_2 = ((PyObject *)(&PyLong_Type)); __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_self->_bytes, __pyx_mstate_global->__pyx_n_u_little}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_bytes, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1282, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
01283:
+01284: def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7Long256_3__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_7Long256_3__repr__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_7Long256_2__repr__(((struct __pyx_obj_7questdb_7_client_Long256 *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_7Long256_2__repr__(struct __pyx_obj_7questdb_7_client_Long256 *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Long256.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01285: return f'Long256({self.value})'
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1285, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_t_1, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1285, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3[0] = __pyx_mstate_global->__pyx_kp_u_Long256; __pyx_t_3[1] = __pyx_t_2; __pyx_t_3[2] = __pyx_mstate_global->__pyx_kp_u__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, 1285, __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;
01286:
01287:
+01288: cdef class Geohash:
struct __pyx_obj_7questdb_7_client_Geohash {
PyObject_HEAD
uint64_t _bits;
uint8_t _precision;
};
01289: """A QuestDB GEOHASH value represented by bits and precision.
01290:
01291: This scalar wrapper is strict: ``precision`` must be in ``1..=60``
01292: and ``bits`` must satisfy ``0 <= bits < 2**precision``. Bulk
01293: GEOHASH columns, whether NumPy, Arrow or object, deliberately have
01294: a different, unchecked value contract; see
01295: :meth:`QuestDB.dataframe <questdb.QuestDB.dataframe>`.
01296:
01297: Precision is pinned per column within one buffer's worth of rows.
01298: The first GEOHASH cell written to a column fixes the precision for
01299: the rest of that batch, and a later cell at a different precision
01300: is rejected by :func:`Buffer.row <questdb.ingress.Buffer.row>`
01301: itself, with the buffer rewound to what it held before that row --
01302: the bad row is not left waiting for a flush.
01303:
01304: The pin goes with the buffer: a flush clears it and the next batch
01305: starts over. A precision the server's column does not have is
01306: therefore the server's to reject, at flush time.
01307: """
01308: cdef uint64_t _bits
01309: cdef uint8_t _precision
01310:
+01311: def __cinit__(self, bits, precision):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_7Geohash_1__cinit__(PyObject *__pyx_v_self,
#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, 1311, __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, 1311, __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, 1311, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__cinit__", 0) < (0)) __PYX_ERR(0, 1311, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, i); __PYX_ERR(0, 1311, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 2)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1311, __pyx_L3_error)
values[1] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1311, __pyx_L3_error)
}
__pyx_v_bits = values[0];
__pyx_v_precision = values[1];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1311, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.Geohash.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return -1;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_7Geohash___cinit__(((struct __pyx_obj_7questdb_7_client_Geohash *)__pyx_v_self), __pyx_v_bits, __pyx_v_precision);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_7Geohash___cinit__(struct __pyx_obj_7questdb_7_client_Geohash *__pyx_v_self, PyObject *__pyx_v_bits, PyObject *__pyx_v_precision) {
int __pyx_r;
__Pyx_INCREF(__pyx_v_bits);
__Pyx_INCREF(__pyx_v_precision);
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Geohash.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_bits);
__Pyx_XDECREF(__pyx_v_precision);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01312: if not _is_integral_not_bool(bits):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_integral_not_bool(__pyx_v_bits); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1312, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (unlikely(__pyx_t_2)) { /* … */ }
+01313: raise TypeError('bits must be a whole number.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_bits_must_be_a_whole_number};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1313, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 1313, __pyx_L1_error)
+01314: if not _is_integral_not_bool(precision):
__pyx_t_2 = __pyx_f_7questdb_7_client__is_integral_not_bool(__pyx_v_precision); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1314, __pyx_L1_error) __pyx_t_1 = (!__pyx_t_2); if (unlikely(__pyx_t_1)) { /* … */ }
+01315: raise TypeError('precision must be a whole number.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_precision_must_be_a_whole_number};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1315, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 1315, __pyx_L1_error)
+01316: bits = int(bits)
__pyx_t_3 = __Pyx_PyNumber_Int(__pyx_v_bits); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1316, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF_SET(__pyx_v_bits, __pyx_t_3); __pyx_t_3 = 0;
+01317: precision = int(precision)
__pyx_t_3 = __Pyx_PyNumber_Int(__pyx_v_precision); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1317, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF_SET(__pyx_v_precision, __pyx_t_3); __pyx_t_3 = 0;
+01318: if precision < 1 or precision > 60:
__pyx_t_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, 1318, __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, 1318, __pyx_L1_error) __pyx_t_1 = __pyx_t_2; __pyx_L6_bool_binop_done:; if (unlikely(__pyx_t_1)) { /* … */ }
+01319: raise ValueError('precision must be in the range 1..60.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_precision_must_be_in_the_range_1};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1319, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 1319, __pyx_L1_error)
+01320: if bits < 0 or bits >= (1 << precision):
__pyx_t_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, 1320, __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, 1320, __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, 1320, __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)) { /* … */ }
+01321: 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, 1321, __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, 1321, __pyx_L1_error)
+01322: self._bits = <uint64_t>bits
__pyx_t_6 = __Pyx_PyLong_As_uint64_t(__pyx_v_bits); if (unlikely((__pyx_t_6 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1322, __pyx_L1_error) __pyx_v_self->_bits = ((uint64_t)__pyx_t_6);
+01323: self._precision = <uint8_t>precision
__pyx_t_7 = __Pyx_PyLong_As_uint8_t(__pyx_v_precision); if (unlikely((__pyx_t_7 == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1323, __pyx_L1_error) __pyx_v_self->_precision = ((uint8_t)__pyx_t_7);
01324:
+01325: @classmethod
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_7Geohash_3from_string(PyObject *__pyx_v_cls, #if CYTHON_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, 1325, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1325, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "from_string", 0) < (0)) __PYX_ERR(0, 1325, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("from_string", 1, 1, 1, i); __PYX_ERR(0, 1325, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1325, __pyx_L3_error) } __pyx_v_value = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("from_string", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1325, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Geohash.from_string", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_7Geohash_2from_string(((PyTypeObject*)__pyx_v_cls), __pyx_v_value); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_7Geohash_2from_string(PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_value) { PyObject *__pyx_v_bits = NULL; PyObject *__pyx_v_char = NULL; PyObject *__pyx_v_digit = NULL; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_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_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7Geohash_3from_string, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Geohash_from_string, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[174])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1325, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Geohash, __pyx_mstate_global->__pyx_n_u_from_string, __pyx_t_18) < (0)) __PYX_ERR(0, 1325, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_GetNameInClass(__pyx_t_18, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Geohash, __pyx_mstate_global->__pyx_n_u_from_string); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1325, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_20 = __Pyx_Method_ClassMethod(__pyx_t_18); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 1325, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Geohash, __pyx_mstate_global->__pyx_n_u_from_string, __pyx_t_20) < (0)) __PYX_ERR(0, 1325, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
01326: def from_string(cls, value):
01327: """Construct a GEOHASH from one to twelve base32 characters."""
+01328: if not isinstance(value, str):
__pyx_t_1 = PyUnicode_Check(__pyx_v_value);
__pyx_t_2 = (!__pyx_t_1);
if (unlikely(__pyx_t_2)) {
/* … */
}
+01329: raise TypeError('value must be a str.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_value_must_be_a_str};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1329, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 1329, __pyx_L1_error)
+01330: if len(value) < 1 or len(value) > 12:
__pyx_t_6 = PyObject_Length(__pyx_v_value); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1330, __pyx_L1_error) __pyx_t_1 = (__pyx_t_6 < 1); if (!__pyx_t_1) { } else { __pyx_t_2 = __pyx_t_1; goto __pyx_L5_bool_binop_done; } __pyx_t_6 = PyObject_Length(__pyx_v_value); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1330, __pyx_L1_error) __pyx_t_1 = (__pyx_t_6 > 12); __pyx_t_2 = __pyx_t_1; __pyx_L5_bool_binop_done:; if (unlikely(__pyx_t_2)) { /* … */ }
+01331: raise ValueError('geohash string must contain 1 to 12 characters.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_geohash_string_must_contain_1_to};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1331, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 1331, __pyx_L1_error)
+01332: bits = 0
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
__pyx_v_bits = __pyx_mstate_global->__pyx_int_0;
+01333: for char in value:
if (likely(PyList_CheckExact(__pyx_v_value)) || PyTuple_CheckExact(__pyx_v_value)) { __pyx_t_3 = __pyx_v_value; __Pyx_INCREF(__pyx_t_3); __pyx_t_6 = 0; __pyx_t_7 = NULL; } else { __pyx_t_6 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1333, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1333, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_7)) { if (likely(PyList_CheckExact(__pyx_t_3))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1333, __pyx_L1_error) #endif if (__pyx_t_6 >= __pyx_temp) break; } __pyx_t_4 = __Pyx_PyList_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, 1333, __pyx_L1_error) #endif if (__pyx_t_6 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_4 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_6)); #else __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_6); #endif ++__pyx_t_6; } if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1333, __pyx_L1_error) } else { __pyx_t_4 = __pyx_t_7(__pyx_t_3); if (unlikely(!__pyx_t_4)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 1333, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_4); __Pyx_XDECREF_SET(__pyx_v_char, __pyx_t_4); __pyx_t_4 = 0; /* … */ } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
01334: digit = (
+01335: '0123456789bcdefghjkmnpqrstuvwxyz'.find(char.lower())
__pyx_t_9 = __pyx_v_char;
__Pyx_INCREF(__pyx_t_9);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_9, NULL};
__pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_lower, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1335, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
}
__pyx_t_10 = PyUnicode_Find(__pyx_mstate_global->__pyx_kp_u_0123456789bcdefghjkmnpqrstuvwxyz, __pyx_t_8, 0, PY_SSIZE_T_MAX, 1); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-2))) __PYX_ERR(0, 1335, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_8 = PyLong_FromSsize_t(__pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1335, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
if (__Pyx_PyInt_FromNumber(&__pyx_t_8, NULL, 0) < (0)) __PYX_ERR(0, 1335, __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;
+01336: if char.isascii() else -1)
__pyx_t_9 = __pyx_v_char;
__Pyx_INCREF(__pyx_t_9);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_9, NULL};
__pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_isascii, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1336, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
}
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1336, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (__pyx_t_2) {
+01337: if digit < 0:
__pyx_t_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, 1337, __pyx_L1_error) if (unlikely(__pyx_t_2)) { /* … */ }
+01338: raise ValueError(
__pyx_t_8 = NULL;
+01339: f'invalid geohash character {char!r}; expected the base32 '
__pyx_t_9 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_char), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1339, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_11[0] = __pyx_mstate_global->__pyx_kp_u_invalid_geohash_character; __pyx_t_11[1] = __pyx_t_9; __pyx_t_11[2] = __pyx_mstate_global->__pyx_kp_u_expected_the_base32_alphabet_01; __pyx_t_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, 1339, __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, 1338, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 1338, __pyx_L1_error)
01340: 'alphabet 0123456789bcdefghjkmnpqrstuvwxyz.')
+01341: bits = bits * 32 + digit
__pyx_t_4 = __Pyx_PyLong_MultiplyObjC(__pyx_v_bits, __pyx_mstate_global->__pyx_int_32, 32, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1341, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_13 = __Pyx_PyNumber_Add_int_int(__pyx_t_4, __pyx_v_digit); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1341, __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;
+01342: 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, 1342, __pyx_L1_error) __pyx_t_4 = PyLong_FromSsize_t((5 * __pyx_t_6)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1342, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = 1; { PyObject *__pyx_callargs[3] = {__pyx_t_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, 1342, __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;
01343:
+01344: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7Geohash_4bits_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_7Geohash_4bits_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_7Geohash_4bits___get__(((struct __pyx_obj_7questdb_7_client_Geohash *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_7Geohash_4bits___get__(struct __pyx_obj_7questdb_7_client_Geohash *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.Geohash.bits.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01345: def bits(self) -> int:
01346: """The packed geohash bits."""
+01347: return self._bits
__pyx_t_1 = __Pyx_PyLong_From_uint64_t(__pyx_v_self->_bits); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1347, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
01348:
+01349: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7Geohash_9precision_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_7Geohash_9precision_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_7Geohash_9precision___get__(((struct __pyx_obj_7questdb_7_client_Geohash *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_7Geohash_9precision___get__(struct __pyx_obj_7questdb_7_client_Geohash *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.Geohash.precision.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01350: def precision(self) -> int:
01351: """The precision in bits."""
+01352: return self._precision
__pyx_t_1 = __Pyx_PyLong_From_uint8_t(__pyx_v_self->_precision); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1352, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
01353:
+01354: def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7Geohash_5__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_7Geohash_5__repr__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_7Geohash_4__repr__(((struct __pyx_obj_7questdb_7_client_Geohash *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_7Geohash_4__repr__(struct __pyx_obj_7questdb_7_client_Geohash *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_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;
}
+01355: 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, 1355, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyUnicode_From_uint8_t(__pyx_v_self->_precision, 0, ' ', 'd'); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1355, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3[0] = __pyx_mstate_global->__pyx_kp_u_Geohash; __pyx_t_3[1] = __pyx_t_1; __pyx_t_3[2] = __pyx_mstate_global->__pyx_kp_u__28; __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, 1355, __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;
01356:
01357:
01358: # The two value unions the `row()` family accepts, defined here as well
01359: # as in the stub. A name carried only by `_client.pyi` type-checks and
01360: # then `ImportError`s at runtime, so the definition lives in both.
01361: # Not exported: they name a parameter type, they are not part of the
01362: # ingestion surface.
+01363: TransactionColumnValue = Union[
__Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_Union); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 1363, __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_5, ((PyObject *)__pyx_mstate_global->__pyx_ptype_5numpy_ndarray), __pyx_t_18}; __pyx_t_25 = __Pyx_PyTuple_FromArray(__pyx_temp, 10); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1363, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __pyx_t_18 = __Pyx_PyObject_GetItem(__pyx_t_20, __pyx_t_25); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1363, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_TransactionColumnValue, __pyx_t_18) < (0)) __PYX_ERR(0, 1363, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
01364: None, bool, int, float, str, TimestampMicros, TimestampNanos,
+01365: datetime.datetime, cnp.ndarray, Decimal]
__Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1365, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1365, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_Decimal); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1365, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18);
+01366: RowColumnValue = Union[
__Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_Union); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1366, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); /* … */ { 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_25, __pyx_t_16, __pyx_t_17, ((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_5 = __Pyx_PyTuple_FromArray(__pyx_temp, 19); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1366, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_17 = __Pyx_PyObject_GetItem(__pyx_t_18, __pyx_t_5); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1366, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_RowColumnValue, __pyx_t_17) < (0)) __PYX_ERR(0, 1366, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
01367: None, bool, int, float, str, TimestampMicros, TimestampNanos,
+01368: datetime.datetime, cnp.ndarray, Decimal, uuid.UUID,
__Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1368, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 1368, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_Decimal); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1368, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_uuid); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1368, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_UUID); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1368, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+01369: ipaddress.IPv4Address, bytes, bytearray, memoryview, Char, DateMillis,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ipaddress); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1369, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_IPv4Address); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1369, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
01370: Long256, Geohash]
01371: # What `schema_overrides` accepts: a kind on its own, or a kind and its
01372: # argument. Only 'geohash' takes one, the precision in bits.
+01373: SchemaOverrides = Dict[str, Union[str, Tuple[str, SupportsIndex]]]
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_Dict); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1373, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_Union); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1373, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_Tuple); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1373, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_SupportsIndex); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1373, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); { PyObject* __pyx_temp[2] = {((PyObject *)(&PyUnicode_Type)), __pyx_t_16}; __pyx_t_25 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1373, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); } __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = __Pyx_PyObject_GetItem(__pyx_t_18, __pyx_t_25); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1373, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; { PyObject* __pyx_temp[2] = {((PyObject *)(&PyUnicode_Type)), __pyx_t_16}; __pyx_t_25 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1373, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); } __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_25); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1373, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; { PyObject* __pyx_temp[2] = {((PyObject *)(&PyUnicode_Type)), __pyx_t_16}; __pyx_t_25 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1373, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); } __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = __Pyx_PyObject_GetItem(__pyx_t_17, __pyx_t_25); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1373, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_SchemaOverrides, __pyx_t_16) < (0)) __PYX_ERR(0, 1373, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
01374:
01375:
+01376: cdef class QuestDB
struct __pyx_obj_7questdb_7_client_QuestDB {
PyObject_HEAD
struct __pyx_vtabstruct_7questdb_7_client_QuestDB *__pyx_vtab;
struct questdb_db *_db;
PyObject *_conf_str;
PyObject *_state_cond;
size_t _lease_uses;
size_t _call_uses;
int _closing;
int _close_running;
PyObject *_close_deadline;
PyObject *_thread_owner_token;
PyObject *_dispatch_context;
PyObject *_connection_listener;
PyObject *_error_handler;
PyObject *_oidc_auth;
PyObject *__dict__;
size_t _cb_refs_key;
struct __pyx_t_7questdb_7_client_auto_flush_mode_t _auto_flush_mode;
int _auto_flush_bytes_dynamic;
};
+01377: cdef class Sender
struct __pyx_obj_7questdb_7_client_Sender {
PyObject_HEAD
struct __pyx_vtabstruct_7questdb_7_client_Sender *__pyx_vtab;
PyObject *__weakref__;
enum line_sender_protocol _c_protocol;
struct line_sender_opts *_opts;
struct line_sender *_impl;
struct __pyx_obj_7questdb_7_client_Buffer *_buffer;
PyObject *_thread_owner_token;
PyObject *_dispatch_context;
PyObject *_error_handler;
PyObject *_connection_listener;
PyObject *_oidc_auth;
PyObject *_bearer_holder;
PyObject *__dict__;
struct __pyx_t_7questdb_7_client_auto_flush_mode_t _auto_flush_mode;
int _auto_flush_bytes_dynamic;
int64_t *_last_flush_ms;
size_t _init_buf_size;
int _in_txn;
int _native_in_flight;
int64_t _slot_id;
struct line_sender_opts *_qwp_ws_opts;
size_t _cb_refs_key;
};
+01378: cdef class PooledSender
struct __pyx_obj_7questdb_7_client_PooledSender {
PyObject_HEAD
struct __pyx_vtabstruct_7questdb_7_client_PooledSender *__pyx_vtab;
struct qwp_sender *_qwp;
struct questdb_db *_db;
struct __pyx_obj_7questdb_7_client_QuestDB *_handle;
struct __pyx_obj_7questdb_7_client_Buffer *_buffer;
PyObject *_lock;
int64_t _batch_started_ms;
int64_t _call_depth;
};
+01379: cdef class Buffer
struct __pyx_obj_7questdb_7_client_Buffer {
PyObject_HEAD
struct __pyx_vtabstruct_7questdb_7_client_Buffer *__pyx_vtab;
struct line_sender_buffer *_impl;
struct qdb_pystr_buf *_b;
size_t _init_buf_size;
size_t _max_name_len;
int _qwp;
int _native_borrows;
unsigned long _frame_thread;
int _marker_set;
int _row_depth;
PyObject *_row_complete_sender;
};
01380:
01381:
+01382: cdef void_int may_flush_on_row_complete(Buffer buffer, Sender sender) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_may_flush_on_row_complete(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer, struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.may_flush_on_row_complete", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01383: if should_auto_flush(
__pyx_t_1 = __pyx_f_7questdb_7_client_should_auto_flush((&__pyx_v_sender->_auto_flush_mode), __pyx_v_buffer->_impl, (__pyx_v_sender->_last_flush_ms[0])); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1383, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
01384: &sender._auto_flush_mode,
01385: buffer._impl,
01386: sender._last_flush_ms[0]):
+01387: sender.flush(buffer)
__pyx_t_3.__pyx_n = 1;
__pyx_t_3.buffer = __pyx_v_buffer;
__pyx_t_2 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_sender->__pyx_vtab)->flush(__pyx_v_sender, 0, &__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1387, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
01388:
01389:
+01390: cdef bint _is_tcp_protocol(line_sender_protocol protocol):
static int __pyx_f_7questdb_7_client__is_tcp_protocol(enum line_sender_protocol __pyx_v_protocol) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
01391: return (
+01392: (protocol == line_sender_protocol_tcp) or
switch (__pyx_v_protocol) {
case line_sender_protocol_tcp:
case line_sender_protocol_tcps:
/* … */
__pyx_t_1 = 1;
/* … */
break;
default:
__pyx_t_1 = 0;
break;
}
{
__pyx_r = __pyx_t_1;
}
goto __pyx_L0;
01393: (protocol == line_sender_protocol_tcps))
01394:
01395:
+01396: cdef bint _is_http_protocol(line_sender_protocol protocol):
static int __pyx_f_7questdb_7_client__is_http_protocol(enum line_sender_protocol __pyx_v_protocol) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
01397: return (
+01398: (protocol == line_sender_protocol_http) or
switch (__pyx_v_protocol) {
case line_sender_protocol_http:
case line_sender_protocol_https:
/* … */
__pyx_t_1 = 1;
/* … */
break;
default:
__pyx_t_1 = 0;
break;
}
{
__pyx_r = __pyx_t_1;
}
goto __pyx_L0;
01399: (protocol == line_sender_protocol_https))
01400:
01401:
+01402: cdef bint _is_qwp_udp_protocol(line_sender_protocol protocol):
static int __pyx_f_7questdb_7_client__is_qwp_udp_protocol(enum line_sender_protocol __pyx_v_protocol) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
+01403: return protocol == line_sender_protocol_udp
{
__pyx_r = (__pyx_v_protocol == line_sender_protocol_udp);
}
goto __pyx_L0;
01404:
01405:
+01406: cdef bint _is_qwp_ws_protocol(line_sender_protocol protocol):
static int __pyx_f_7questdb_7_client__is_qwp_ws_protocol(enum line_sender_protocol __pyx_v_protocol) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
01407: return (
+01408: (protocol == line_sender_protocol_ws) or
switch (__pyx_v_protocol) {
case line_sender_protocol_ws:
case line_sender_protocol_wss:
/* … */
__pyx_t_1 = 1;
/* … */
break;
default:
__pyx_t_1 = 0;
break;
}
{
__pyx_r = __pyx_t_1;
}
goto __pyx_L0;
01409: (protocol == line_sender_protocol_wss))
01410:
01411:
+01412: cdef class SenderTransaction:
struct __pyx_obj_7questdb_7_client_SenderTransaction {
PyObject_HEAD
struct __pyx_vtabstruct_7questdb_7_client_SenderTransaction *__pyx_vtab;
struct __pyx_obj_7questdb_7_client_Sender *_sender;
PyObject *_table_name;
int _complete;
int _committing;
};
/* … */
struct __pyx_vtabstruct_7questdb_7_client_SenderTransaction {
__pyx_t_7questdb_7_client_void_int (*_check_usable)(struct __pyx_obj_7questdb_7_client_SenderTransaction *, PyObject *);
};
static struct __pyx_vtabstruct_7questdb_7_client_SenderTransaction *__pyx_vtabptr_7questdb_7_client_SenderTransaction;
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_17SenderTransaction__check_usable(struct __pyx_obj_7questdb_7_client_SenderTransaction *, PyObject *);
01413: """
01414: A transaction for a specific table.
01415:
01416: Transactions are only supported with ILP/HTTP.
01417:
01418: The sender API can only operate on one transaction at a time.
01419:
01420: To create a transaction:
01421:
01422: .. code-block:: python
01423:
01424: with sender.transaction('table_name') as txn:
01425: txn.row(..)
01426: txn.dataframe(..)
01427: """
01428: cdef Sender _sender
01429: cdef str _table_name
01430: cdef bint _complete
01431: cdef bint _committing
01432:
+01433: def __cinit__(self, Sender sender, str table_name):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_17SenderTransaction_1__cinit__(PyObject *__pyx_v_self,
#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, 1433, __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, 1433, __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, 1433, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__cinit__", 0) < (0)) __PYX_ERR(0, 1433, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, i); __PYX_ERR(0, 1433, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 2)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1433, __pyx_L3_error)
values[1] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1433, __pyx_L3_error)
}
__pyx_v_sender = ((struct __pyx_obj_7questdb_7_client_Sender *)values[0]);
__pyx_v_table_name = ((PyObject*)values[1]);
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1433, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.SenderTransaction.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return -1;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sender), __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, 1, "sender", 0))) __PYX_ERR(0, 1433, __pyx_L1_error)
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 1, "table_name", 1))) __PYX_ERR(0, 1433, __pyx_L1_error)
__pyx_r = __pyx_pf_7questdb_7_client_17SenderTransaction___cinit__(((struct __pyx_obj_7questdb_7_client_SenderTransaction *)__pyx_v_self), __pyx_v_sender, __pyx_v_table_name);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = -1;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
goto __pyx_L7_cleaned_up;
__pyx_L0:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__pyx_L7_cleaned_up:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_17SenderTransaction___cinit__(struct __pyx_obj_7questdb_7_client_SenderTransaction *__pyx_v_self, struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender, PyObject *__pyx_v_table_name) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.SenderTransaction.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01434: if not _is_http_protocol(sender._c_protocol):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_http_protocol(__pyx_v_sender->_c_protocol); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1434, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (unlikely(__pyx_t_2)) { /* … */ }
+01435: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1435, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+01436: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1436, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1436, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_Transactions_are_only_supported}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1435, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 1435, __pyx_L1_error)
01437: 'Transactions are only supported for ILP/HTTP.')
+01438: self._sender = sender
__Pyx_INCREF((PyObject *)__pyx_v_sender); __Pyx_GIVEREF((PyObject *)__pyx_v_sender); __Pyx_GOTREF((PyObject *)__pyx_v_self->_sender); __Pyx_DECREF_SET(__pyx_v_self->_sender, __pyx_v_sender);
+01439: self._table_name = table_name
__Pyx_INCREF(__pyx_v_table_name); __Pyx_GIVEREF(__pyx_v_table_name); __Pyx_GOTREF(__pyx_v_self->_table_name); __Pyx_DECREF_SET(__pyx_v_self->_table_name, __pyx_v_table_name);
+01440: self._complete = False
__pyx_v_self->_complete = 0;
+01441: self._committing = False
__pyx_v_self->_committing = 0;
01442:
+01443: cdef inline void_int _check_usable(self, str method) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_17SenderTransaction__check_usable(struct __pyx_obj_7questdb_7_client_SenderTransaction *__pyx_v_self, PyObject *__pyx_v_method) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_AddTraceback("questdb._client.SenderTransaction._check_usable", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01444: """Keep completion an absorbing state for the whole object."""
+01445: if self._complete:
if (unlikely(__pyx_v_self->_complete)) {
/* … */
}
+01446: raise QuestDBError(
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1446, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
+01447: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1447, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1447, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+01448: f"Transaction already completed, can't call {method}().")
__pyx_t_4 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1448, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6[0] = __pyx_mstate_global->__pyx_kp_u_Transaction_already_completed_ca; __pyx_t_6[1] = __pyx_t_4; __pyx_t_6[2] = __pyx_mstate_global->__pyx_kp_u__29; __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, 1448, __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, 1446, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 1446, __pyx_L1_error)
+01449: if self._committing:
if (unlikely(__pyx_v_self->_committing)) {
/* … */
}
+01450: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1450, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
+01451: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1451, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1451, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+01452: f"Transaction commit is already in progress, can't call "
__pyx_t_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, 1452, __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, 1450, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 1450, __pyx_L1_error)
+01453: f"{method}().")
__pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1453, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6[0] = __pyx_mstate_global->__pyx_kp_u_Transaction_commit_is_already_in; __pyx_t_6[1] = __pyx_t_5; __pyx_t_6[2] = __pyx_mstate_global->__pyx_kp_u__29;
01454:
+01455: 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_16 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_17SenderTransaction_3__enter__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SenderTransaction___enter, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[177])); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1455, __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_SenderTransaction, __pyx_mstate_global->__pyx_n_u_enter, __pyx_t_16) < (0)) __PYX_ERR(0, 1455, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+01456: self._check_usable('__enter__')
__pyx_t_1 = __pyx_f_7questdb_7_client_17SenderTransaction__check_usable(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1456, __pyx_L1_error)
+01457: self._sender._check_not_in_own_callback('transaction')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self->_sender, __pyx_mstate_global->__pyx_n_u_transaction, NULL); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1457, __pyx_L1_error)
+01458: if self._sender._in_txn:
if (unlikely(__pyx_v_self->_sender->_in_txn)) {
/* … */
}
+01459: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1459, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+01460: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1460, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1460, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Already_inside_a_transaction_can}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1459, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 1459, __pyx_L1_error)
01461: 'Already inside a transaction, can\'t start another.')
01462: # A transaction requires a clear buffer, which a `dataframe()`
01463: # part-way through its plan build still has -- it has written
01464: # nothing yet. A transaction opened there would take in rows the
01465: # caller wrote outside any transaction, and its rollback would
01466: # discard them.
+01467: if self._sender._buffer is not None:
__pyx_t_8 = (((PyObject *)__pyx_v_self->_sender->_buffer) != Py_None);
if (__pyx_t_8) {
/* … */
}
+01468: self._sender._buffer._check_not_in_row('__enter__')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self->_sender->_buffer, __pyx_mstate_global->__pyx_n_u_enter, NULL); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1468, __pyx_L1_error)
+01469: if self._sender._buffer is not None and len(self._sender._buffer):
__pyx_t_9 = (((PyObject *)__pyx_v_self->_sender->_buffer) != Py_None);
if (__pyx_t_9) {
} else {
__pyx_t_8 = __pyx_t_9;
goto __pyx_L6_bool_binop_done;
}
__pyx_t_2 = ((PyObject *)__pyx_v_self->_sender->_buffer);
__Pyx_INCREF(__pyx_t_2);
__pyx_t_10 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1469, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_9 = (__pyx_t_10 != 0);
__pyx_t_8 = __pyx_t_9;
__pyx_L6_bool_binop_done:;
if (__pyx_t_8) {
/* … */
}
+01470: if self._sender._auto_flush_mode.enabled:
if (likely(__pyx_v_self->_sender->_auto_flush_mode.enabled)) {
/* … */
goto __pyx_L8;
}
+01471: self._sender.flush()
__pyx_t_2 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_self->_sender->__pyx_vtab)->flush(__pyx_v_self->_sender, 0, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1471, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
01472: else:
+01473: raise QuestDBError(
/*else*/ {
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1473, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
+01474: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1474, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1474, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Sender_buffer_must_be_clear_when}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1473, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 1473, __pyx_L1_error) } __pyx_L8:;
01475: 'Sender buffer must be clear when starting a ' +
01476: 'transaction. You must call `.flush()` before this call.')
+01477: self._sender._in_txn = True
__pyx_v_self->_sender->_in_txn = 1;
+01478: return self
{
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;
01479:
+01480: def __exit__(self, exc_type, exc_val, exc_tb):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_5__exit__(PyObject *__pyx_v_self,
#if CYTHON_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, 1480, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1480, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1480, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1480, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__exit__", 0) < (0)) __PYX_ERR(0, 1480, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, i); __PYX_ERR(0, 1480, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 3)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1480, __pyx_L3_error)
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1480, __pyx_L3_error)
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1480, __pyx_L3_error)
}
__pyx_v_exc_type = values[0];
__pyx_v_exc_val = values[1];
__pyx_v_exc_tb = values[2];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 1480, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.SenderTransaction.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_17SenderTransaction_4__exit__(((struct __pyx_obj_7questdb_7_client_SenderTransaction *)__pyx_v_self), __pyx_v_exc_type, __pyx_v_exc_val, __pyx_v_exc_tb);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_17SenderTransaction_4__exit__(struct __pyx_obj_7questdb_7_client_SenderTransaction *__pyx_v_self, PyObject *__pyx_v_exc_type, CYTHON_UNUSED PyObject *__pyx_v_exc_val, CYTHON_UNUSED PyObject *__pyx_v_exc_tb) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client.SenderTransaction.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_16 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_17SenderTransaction_5__exit__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SenderTransaction___exit, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[178])); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1480, __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_SenderTransaction, __pyx_mstate_global->__pyx_n_u_exit, __pyx_t_16) < (0)) __PYX_ERR(0, 1480, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+01481: if exc_type is not None:
__pyx_t_1 = (__pyx_v_exc_type != Py_None);
if (__pyx_t_1) {
/* … */
}
+01482: if not self._complete:
__pyx_t_1 = (!__pyx_v_self->_complete);
if (__pyx_t_1) {
/* … */
}
+01483: self.rollback()
__pyx_t_3 = ((PyObject *)__pyx_v_self);
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_rollback, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1483, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+01484: return False
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(Py_False);
__pyx_r = Py_False;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
01485: else:
+01486: if not self._complete:
/*else*/ {
__pyx_t_1 = (!__pyx_v_self->_complete);
if (__pyx_t_1) {
/* … */
}
+01487: self.commit()
__pyx_t_3 = ((PyObject *)__pyx_v_self);
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_commit, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1487, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+01488: return True
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(Py_True);
__pyx_r = Py_True;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
}
01489:
+01490: 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, 1490, __pyx_L3_error) if (likely(__pyx_kwds_len > 0)) { switch (__pyx_nargs) { case 0: break; default: goto __pyx_L5_argtuple_error; } if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, 0, __pyx_kwds_len, "row", 0) < (0)) __PYX_ERR(0, 1490, __pyx_L3_error) /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_17SenderTransaction_6row(struct __pyx_obj_7questdb_7_client_SenderTransaction *__pyx_v_self, PyObject *__pyx_v_symbols, PyObject *__pyx_v_columns, PyObject *__pyx_v_at) { struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buf = 0; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("questdb._client.SenderTransaction.row", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_buf); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_16 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1490, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); /* … */ __pyx_t_25 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1490, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_Optional_str) < (0)) __PYX_ERR(0, 1490, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_columns, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_Union_None_boo) < (0)) __PYX_ERR(0, 1490, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_ServerTimestampType_Timest) < (0)) __PYX_ERR(0, 1490, __pyx_L1_error) __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_17SenderTransaction_7row, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SenderTransaction_row, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[179])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1490, __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_16); __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_17, __pyx_t_25); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_SenderTransaction, __pyx_mstate_global->__pyx_n_u_row_2, __pyx_t_17) < (0)) __PYX_ERR(0, 1490, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
01491: self,
01492: *,
+01493: symbols: Optional[Dict[str, Optional[str]]]=None,
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_symbols, Py_None) < (0)) __PYX_ERR(0, 1490, __pyx_L1_error)
01494: columns: Optional[Dict[
01495: str,
01496: Union[None, bool, int, float, str, TimestampMicros, TimestampNanos, datetime.datetime, numpy.ndarray, Decimal]]
+01497: ]=None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None)); for (Py_ssize_t i = 0; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("row", *(__pyx_pyargnames[i - 0])); __PYX_ERR(0, 1490, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 0)) { goto __pyx_L5_argtuple_error; } else { __Pyx_RaiseKeywordRequired("row", __pyx_mstate_global->__pyx_n_u_at); __PYX_ERR(0, 1490, __pyx_L3_error) } __pyx_v_at = values[0]; __pyx_v_symbols = ((PyObject*)values[1]); __pyx_v_columns = ((PyObject*)values[2]); } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("row", 1, 0, 0, __pyx_nargs); __PYX_ERR(0, 1490, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.SenderTransaction.row", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_symbols), (&PyDict_Type), 1, "symbols", 2))) __PYX_ERR(0, 1493, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_columns), (&PyDict_Type), 1, "columns", 2))) __PYX_ERR(0, 1494, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_17SenderTransaction_6row(((struct __pyx_obj_7questdb_7_client_SenderTransaction *)__pyx_v_self), __pyx_v_symbols, __pyx_v_columns, __pyx_v_at); /* … */ if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_columns, Py_None) < (0)) __PYX_ERR(0, 1490, __pyx_L1_error)
01498: at: Union[ServerTimestampType, TimestampNanos, datetime.datetime]):
01499: """
01500: Write a row for the table in the transaction.
01501:
01502: The table name is taken from the transaction.
01503:
01504: **Note**: Support for NumPy arrays (``numpy.array``) requires QuestDB server version 9.0.0 or higher.
01505:
01506: UUID, IPV4, BINARY, CHAR, DATE, LONG256, and GEOHASH columns are
01507: QWP-only and are not supported by ``SenderTransaction``, which is
01508: ILP/HTTP-only by construction.
01509: """
01510: cdef Buffer buf
+01511: self._check_usable('row')
__pyx_t_1 = __pyx_f_7questdb_7_client_17SenderTransaction__check_usable(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_row_2); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1511, __pyx_L1_error)
+01512: if at is None:
__pyx_t_2 = (__pyx_v_at == Py_None);
if (unlikely(__pyx_t_2)) {
/* … */
}
+01513: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1513, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+01514: QuestDBErrorCode.InvalidTimestamp,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1514, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1514, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_at_must_be_of_type_TimestampNan}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1513, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 1513, __pyx_L1_error)
01515: "`at` must be of type TimestampNanos, datetime, or ServerTimestamp"
01516: )
01517:
+01518: if self._sender._buffer is None:
__pyx_t_2 = (((PyObject *)__pyx_v_self->_sender->_buffer) == Py_None);
if (unlikely(__pyx_t_2)) {
/* … */
}
+01519: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1519, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
+01520: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1520, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1520, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_row_can_t_be_called_Sender_is_cl}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1519, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 1519, __pyx_L1_error)
01521: "row() can\'t be called: Sender is closed."
01522: )
01523:
+01524: self._sender._check_not_in_own_callback('transaction.row')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self->_sender, __pyx_mstate_global->__pyx_kp_u_transaction_row, NULL); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1524, __pyx_L1_error)
01525: # The sender holds the only reference to the buffer, and a column
01526: # value whose conversion runs Python code can reach back in here.
01527: # A strong local reference keeps the buffer alive for the whole
01528: # row, including its cleanup.
+01529: buf = self._sender._buffer
__pyx_t_3 = ((PyObject *)__pyx_v_self->_sender->_buffer);
__Pyx_INCREF(__pyx_t_3);
__pyx_v_buf = ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_3);
__pyx_t_3 = 0;
+01530: buf._row(
__pyx_t_9.__pyx_n = 3; __pyx_t_9.symbols = ((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, 1530, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
01531: False, # allow_auto_flush
+01532: self._table_name,
__pyx_t_3 = __pyx_v_self->_table_name;
__Pyx_INCREF(__pyx_t_3);
01533: symbols=symbols,
01534: columns=columns,
01535: at=at)
+01536: return self
{
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;
01537:
+01538: 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, 1538, __pyx_L3_error) if (likely(__pyx_kwds_len > 0)) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1538, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "dataframe", 0) < (0)) __PYX_ERR(0, 1538, __pyx_L3_error) if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_n_u_auto)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, i); __PYX_ERR(0, 1538, __pyx_L3_error) } } for (Py_ssize_t i = 1; i < 2; i++) { if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("dataframe", *(__pyx_pyargnames[i - 0])); __PYX_ERR(0, 1538, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { __Pyx_RaiseKeywordRequired("dataframe", __pyx_mstate_global->__pyx_n_u_at); __PYX_ERR(0, 1538, __pyx_L3_error) } __pyx_v_df = values[0]; __pyx_v_at = values[1]; __pyx_v_symbols = values[2]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1538, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.SenderTransaction.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_17SenderTransaction_8dataframe(((struct __pyx_obj_7questdb_7_client_SenderTransaction *)__pyx_v_self), __pyx_v_df, __pyx_v_symbols, __pyx_v_at); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_17SenderTransaction_8dataframe(struct __pyx_obj_7questdb_7_client_SenderTransaction *__pyx_v_self, PyObject *__pyx_v_df, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at) { struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer = 0; int __pyx_v_outer_in_flight; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("questdb._client.SenderTransaction.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_buffer); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_17 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1538, __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_n_u_auto) < (0)) __PYX_ERR(0, 1538, __pyx_L1_error) __pyx_t_25 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1538, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Union_str_bool_List_int_List_str) < (0)) __PYX_ERR(0, 1538, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_ServerTimestampType_int_st) < (0)) __PYX_ERR(0, 1538, __pyx_L1_error) __pyx_t_16 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_17SenderTransaction_9dataframe, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SenderTransaction_dataframe, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[180])); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1538, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_16); #endif __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_16, __pyx_t_17); __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_16, __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_SenderTransaction, __pyx_mstate_global->__pyx_n_u_dataframe, __pyx_t_16) < (0)) __PYX_ERR(0, 1538, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
01539: self,
01540: df, # : pd.DataFrame
01541: *,
01542: symbols: Union[str, bool, List[int], List[str]] = 'auto',
01543: at: Union[ServerTimestampType, int, str, TimestampNanos, datetime.datetime]):
01544: """
01545: Write a dataframe for the table in the transaction.
01546:
01547: The table name is taken from the transaction.
01548: """
01549: # Referenced for the whole call: the serializer writes into the
01550: # buffer through raw pointers.
+01551: cdef Buffer buffer = self._sender._buffer
__pyx_t_1 = ((PyObject *)__pyx_v_self->_sender->_buffer);
__Pyx_INCREF(__pyx_t_1);
__pyx_v_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_1);
__pyx_t_1 = 0;
01552: cdef bint outer_in_flight
+01553: self._check_usable('dataframe')
__pyx_t_2 = __pyx_f_7questdb_7_client_17SenderTransaction__check_usable(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_dataframe); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1553, __pyx_L1_error)
+01554: if at is None:
__pyx_t_3 = (__pyx_v_at == Py_None);
if (unlikely(__pyx_t_3)) {
/* … */
}
+01555: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1555, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+01556: QuestDBErrorCode.InvalidTimestamp,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1556, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1556, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_at_must_be_of_type_TimestampNan}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1555, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 1555, __pyx_L1_error)
01557: "`at` must be of type TimestampNanos, datetime, or ServerTimestamp"
01558: )
+01559: if buffer is None:
__pyx_t_3 = (((PyObject *)__pyx_v_buffer) == Py_None);
if (unlikely(__pyx_t_3)) {
/* … */
}
+01560: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1560, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
+01561: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1561, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1561, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_dataframe_can_t_be_called_Sender}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1560, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 1560, __pyx_L1_error)
01562: "dataframe() can\'t be called: Sender is closed."
01563: )
+01564: self._sender._check_not_in_own_callback('transaction.dataframe')
__pyx_t_2 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self->_sender, __pyx_mstate_global->__pyx_kp_u_transaction_dataframe, NULL); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1564, __pyx_L1_error)
01565: # Refused before the borrow below, as `_dataframe` would refuse it
01566: # after: a frame this call came back into from its own Python keeps
01567: # the borrow it holds.
+01568: buffer._check_not_in_row('dataframe')
__pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_buffer, __pyx_mstate_global->__pyx_n_u_dataframe, NULL); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1568, __pyx_L1_error)
01569: # Borrow the buffer as `Sender.dataframe()` does, so that reading it
01570: # or closing the sender from another thread raises instead of racing
01571: # the serializer or freeing the buffer under it.
+01572: outer_in_flight = self._sender._enter_native()
__pyx_v_outer_in_flight = __pyx_f_7questdb_7_client_6Sender__enter_native(__pyx_v_self->_sender);
+01573: buffer._begin_frame_borrow()
__pyx_f_7questdb_7_client_6Buffer__begin_frame_borrow(__pyx_v_buffer);
+01574: try:
/*try:*/ {
+01575: _dataframe(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe(__pyx_v_buffer, __pyx_f_7questdb_7_client_auto_flush_blank(), __pyx_v_buffer->_impl, __pyx_v_df, __pyx_t_1, Py_None, __pyx_v_symbols, __pyx_v_at); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1575, __pyx_L6_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; }
01576: buffer,
01577: auto_flush_blank(),
01578: buffer._impl,
01579: df,
+01580: self._table_name,
__pyx_t_1 = __pyx_v_self->_table_name;
__Pyx_INCREF(__pyx_t_1);
01581: None, # table_name_col,
01582: symbols,
01583: at)
01584: finally:
+01585: buffer._end_frame_borrow()
/*finally:*/ {
/*normal exit:*/{
__pyx_f_7questdb_7_client_6Buffer__end_frame_borrow(__pyx_v_buffer);
/* … */
__pyx_f_7questdb_7_client_6Buffer__end_frame_borrow(__pyx_v_buffer);
+01586: self._sender._exit_native(outer_in_flight)
__pyx_f_7questdb_7_client_6Sender__exit_native(__pyx_v_self->_sender, __pyx_v_outer_in_flight);
/* … */
__pyx_f_7questdb_7_client_6Sender__exit_native(__pyx_v_self->_sender, __pyx_v_outer_in_flight);
+01587: _oidc_raise_unscheduled_main()
__pyx_t_2 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1587, __pyx_L1_error) goto __pyx_L7; } __pyx_L6_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); if ( unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14); __Pyx_XGOTREF(__pyx_t_12); __Pyx_XGOTREF(__pyx_t_13); __Pyx_XGOTREF(__pyx_t_14); __Pyx_XGOTREF(__pyx_t_15); __Pyx_XGOTREF(__pyx_t_16); __Pyx_XGOTREF(__pyx_t_17); __pyx_t_9 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_11 = __pyx_filename; { /* … */ __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1587, __pyx_L9_error) } __Pyx_XGIVEREF(__pyx_t_15); __Pyx_XGIVEREF(__pyx_t_16); __Pyx_XGIVEREF(__pyx_t_17); __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17); __Pyx_XGIVEREF(__pyx_t_12); __Pyx_XGIVEREF(__pyx_t_13); __Pyx_XGIVEREF(__pyx_t_14); __Pyx_ErrRestore(__pyx_t_12, __pyx_t_13, __pyx_t_14); __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_11; goto __pyx_L1_error; __pyx_L9_error:; __Pyx_XGIVEREF(__pyx_t_15); __Pyx_XGIVEREF(__pyx_t_16); __Pyx_XGIVEREF(__pyx_t_17); __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17); __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; goto __pyx_L1_error; } __pyx_L7:; }
+01588: return self
{
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;
01589:
+01590: 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_16 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_17SenderTransaction_11commit, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SenderTransaction_commit, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[181])); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1590, __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_SenderTransaction, __pyx_mstate_global->__pyx_n_u_commit, __pyx_t_16) < (0)) __PYX_ERR(0, 1590, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
01591: """
01592: Commit the transaction.
01593:
01594: A commit is also automatic at the end of a successful `with` block.
01595:
01596: This will flush the buffer.
01597: """
+01598: if self._complete:
if (unlikely(__pyx_v_self->_complete)) {
/* … */
}
+01599: raise QuestDBError(
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1599, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
+01600: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1600, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1600, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Transaction_already_completed_ca_2}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 1599, __pyx_L1_error)
01601: 'Transaction already completed, can\'t commit')
+01602: if self._committing:
if (unlikely(__pyx_v_self->_committing)) {
/* … */
}
+01603: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1603, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+01604: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1604, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1604, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_4, __pyx_mstate_global->__pyx_kp_u_Transaction_commit_is_already_in_2}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1603, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 1603, __pyx_L1_error)
01605: "Transaction commit is already in progress, can't commit.")
+01606: self._sender._check_not_in_own_callback('transaction.commit')
__pyx_t_7 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self->_sender, __pyx_mstate_global->__pyx_kp_u_transaction_commit, NULL); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1606, __pyx_L1_error)
+01607: if self._sender._buffer is None:
__pyx_t_8 = (((PyObject *)__pyx_v_self->_sender->_buffer) == Py_None);
if (unlikely(__pyx_t_8)) {
/* … */
}
+01608: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1608, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+01609: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1609, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1609, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_2, __pyx_mstate_global->__pyx_kp_u_commit_can_t_be_called_Sender_is}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1608, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 1608, __pyx_L1_error)
01610: "commit() can't be called: Sender is closed.")
01611: # Checked here rather than left to the flush below, which is
01612: # skipped when the buffer is empty. `dataframe()` counts into
01613: # `_row_depth` before it writes anything, so a commit re-entered
01614: # from the plan build would find nothing to flush, end the
01615: # transaction, and leave the frame's rows to go out afterwards
01616: # outside it.
+01617: self._sender._buffer._check_not_in_row('commit')
__pyx_t_7 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self->_sender->_buffer, __pyx_mstate_global->__pyx_n_u_commit, NULL); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1617, __pyx_L1_error)
01618: # `_in_txn` has to come down first, because an explicit flush
01619: # inside a transaction is refused.
+01620: self._committing = True
__pyx_v_self->_committing = 1;
+01621: self._sender._in_txn = False
__pyx_v_self->_sender->_in_txn = 0;
+01622: try:
/*try:*/ {
+01623: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
goto __pyx_L14_try_end;
__pyx_L9_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
__pyx_L11_except_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
goto __pyx_L7_error;
__pyx_L14_try_end:;
}
+01624: if len(self._sender._buffer):
__pyx_t_1 = ((PyObject *)__pyx_v_self->_sender->_buffer);
__Pyx_INCREF(__pyx_t_1);
__pyx_t_12 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1624, __pyx_L9_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_8 = (__pyx_t_12 != 0);
if (__pyx_t_8) {
/* … */
}
+01625: self._sender.flush(transactional=True)
__pyx_t_4 = ((PyObject *)__pyx_v_self->_sender);
__Pyx_INCREF(__pyx_t_4);
#if CYTHON_VECTORCALL
#endif
__pyx_t_6 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, Py_True};
#if CYTHON_VECTORCALL
__pyx_t_2 = __pyx_mstate_global->__pyx_tuple[37];
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1625, __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, 1625, __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;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1625, __pyx_L9_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
{
PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_transactional};
__pyx_mstate_global->__pyx_tuple[37] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[37])) __PYX_ERR(0, 1625, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[37]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[37]);
+01626: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client.SenderTransaction.commit", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_4) < 0) __PYX_ERR(0, 1626, __pyx_L11_except_error)
__Pyx_XGOTREF(__pyx_t_1);
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_4);
01627: # A flush that reached the wire clears the buffer whether it
01628: # succeeded or not, so there is nothing left to commit and
01629: # the transaction is over -- saying otherwise would strand
01630: # the sender inside it and make the next `close(flush=True)`
01631: # raise over the caller's own error.
01632: #
01633: # Rows are still in the buffer only when `Sender.flush`
01634: # refused before making the native call, which is a short
01635: # and closed list: a row part-way through being written, a
01636: # call from inside the sender's own callback or while the
01637: # sender is already in a native call, and a sender already
01638: # closed. In those the transaction is still the caller's to
01639: # finish or roll back.
01640: #
01641: # The buffer is therefore the discriminator, and it is
01642: # `Sender.flush` that maintains it, not this method.
01643: # `test_flush_clears_the_buffer_on_a_wire_failure` pins that
01644: # behaviour by name for exactly this reason.
01645: #
01646: # Asking it cannot be allowed to raise: `len()` goes through
01647: # `Buffer.__len__`, which refuses on a closed buffer, and a
01648: # sender closed during the flush would put that error over
01649: # the caller's own. A closed buffer holds no rows, which is
01650: # the same answer an empty one gives.
+01651: rows_left = False
__Pyx_INCREF(Py_False);
__pyx_v_rows_left = Py_False;
+01652: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
goto __pyx_L25_try_end;
__pyx_L18_error:;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
__pyx_L20_except_error:;
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15);
goto __pyx_L11_except_error;
__pyx_L19_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15);
__pyx_L25_try_end:;
}
+01653: rows_left = (self._sender._buffer is not None
__pyx_t_8 = (((PyObject *)__pyx_v_self->_sender->_buffer) != Py_None);
if (__pyx_t_8) {
} else {
__pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1653, __pyx_L18_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_5 = __pyx_t_3;
__pyx_t_3 = 0;
goto __pyx_L26_bool_binop_done;
}
+01654: and len(self._sender._buffer) > 0)
__pyx_t_3 = ((PyObject *)__pyx_v_self->_sender->_buffer);
__Pyx_INCREF(__pyx_t_3);
__pyx_t_12 = PyObject_Length(__pyx_t_3); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1654, __pyx_L18_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_8 = (__pyx_t_12 > 0);
__pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1654, __pyx_L18_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_5 = __pyx_t_3;
__pyx_t_3 = 0;
__pyx_L26_bool_binop_done:;
__Pyx_DECREF_SET(__pyx_v_rows_left, __pyx_t_5);
__pyx_t_5 = 0;
+01655: except QuestDBError:
__Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_3, &__pyx_t_16); __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1655, __pyx_L20_except_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_18 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_5, __pyx_t_17); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_ErrRestore(__pyx_t_5, __pyx_t_3, __pyx_t_16); __pyx_t_5 = 0; __pyx_t_3 = 0; __pyx_t_16 = 0; if (__pyx_t_18) { __Pyx_ErrRestore(0,0,0);
+01656: rows_left = False
__Pyx_INCREF(Py_False); __Pyx_DECREF_SET(__pyx_v_rows_left, Py_False); goto __pyx_L19_exception_handled; } goto __pyx_L20_except_error;
+01657: if rows_left:
__pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_rows_left); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1657, __pyx_L11_except_error) if (__pyx_t_8) { /* … */ goto __pyx_L30; }
+01658: self._sender._in_txn = True
__pyx_v_self->_sender->_in_txn = 1;
01659: else:
+01660: self._complete = True
/*else*/ {
__pyx_v_self->_complete = 1;
}
__pyx_L30:;
+01661: raise
__Pyx_GIVEREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_4); __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_2, __pyx_t_4); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_4 = 0; __PYX_ERR(0, 1661, __pyx_L11_except_error) }
+01662: self._complete = True
__pyx_v_self->_complete = 1; }
01663: finally:
01664: # A commit releases the GIL in `flush()`. Refuse another
01665: # terminal operation while that transition owns the buffer,
01666: # then make the transition available again only after every
01667: # success/failure state above has been published.
+01668: self._committing = False
/*finally:*/ {
/*normal exit:*/{
__pyx_v_self->_committing = 0;
goto __pyx_L8;
}
__pyx_L7_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_14, &__pyx_t_13);
if ( unlikely(__Pyx_GetException(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_13);
__pyx_t_18 = __pyx_lineno; __pyx_t_19 = __pyx_clineno; __pyx_t_20 = __pyx_filename;
{
__pyx_v_self->_committing = 0;
}
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_15, __pyx_t_14, __pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ErrRestore(__pyx_t_11, __pyx_t_10, __pyx_t_9);
__pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0;
__pyx_lineno = __pyx_t_18; __pyx_clineno = __pyx_t_19; __pyx_filename = __pyx_t_20;
goto __pyx_L1_error;
}
__pyx_L8:;
}
01669:
+01670: def rollback(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_13rollback(PyObject *__pyx_v_self, #if CYTHON_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_16 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_17SenderTransaction_13rollback, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SenderTransaction_rollback, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[182])); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1670, __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_SenderTransaction, __pyx_mstate_global->__pyx_n_u_rollback, __pyx_t_16) < (0)) __PYX_ERR(0, 1670, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
01671: """
01672: Roll back the transaction.
01673:
01674: A rollback is also automatic at the end of a failed `with` block.
01675:
01676: This will clear the buffer. When ``rollback()`` is called from
01677: code that a ``row()`` or ``dataframe()`` on this sender runs
01678: while it writes, such as a column value's conversion, it raises
01679: :class:`QuestDBError <questdb.QuestDBError>` (``InvalidApiCall``)
01680: and leaves the transaction as it was.
01681: """
+01682: if self._complete:
if (unlikely(__pyx_v_self->_complete)) {
/* … */
}
+01683: raise QuestDBError(
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1683, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
+01684: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1684, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1684, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Transaction_already_completed_ca_3}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1683, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 1683, __pyx_L1_error)
01685: 'Transaction already completed, can\'t rollback.')
+01686: if self._committing:
if (unlikely(__pyx_v_self->_committing)) {
/* … */
}
+01687: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1687, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+01688: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1688, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1688, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_4, __pyx_mstate_global->__pyx_kp_u_Transaction_commit_is_already_in_3}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1687, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 1687, __pyx_L1_error)
01689: "Transaction commit is already in progress, can't rollback.")
+01690: self._sender._check_not_in_own_callback('transaction.rollback')
__pyx_t_7 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self->_sender, __pyx_mstate_global->__pyx_kp_u_transaction_rollback, NULL); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1690, __pyx_L1_error)
01691: # A rollback from code running inside a `row()` or `dataframe()` on
01692: # this buffer is refused before anything changes: clearing there
01693: # would discard what that call is writing. Every call that would
01694: # change what an in-progress call writes is refused the same way.
+01695: if self._sender._buffer is not None:
__pyx_t_8 = (((PyObject *)__pyx_v_self->_sender->_buffer) != Py_None);
if (__pyx_t_8) {
/* … */
}
+01696: self._sender._buffer._check_not_in_row('rollback')
__pyx_t_7 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self->_sender->_buffer, __pyx_mstate_global->__pyx_n_u_rollback, NULL); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1696, __pyx_L1_error)
+01697: self._sender._in_txn = False
__pyx_v_self->_sender->_in_txn = 0;
+01698: self._complete = True
__pyx_v_self->_complete = 1;
+01699: if self._sender._buffer is not None:
__pyx_t_8 = (((PyObject *)__pyx_v_self->_sender->_buffer) != Py_None);
if (__pyx_t_8) {
/* … */
}
+01700: self._sender._buffer._clear_now()
__pyx_f_7questdb_7_client_6Buffer__clear_now(__pyx_v_self->_sender->_buffer);
01701:
+01702: cdef class Buffer:
struct __pyx_vtabstruct_7questdb_7_client_Buffer {
PyObject *(*_init_ilp_impl)(struct __pyx_obj_7questdb_7_client_Buffer *, enum line_sender_protocol_version, size_t, size_t);
PyObject *(*_init_qwp_impl)(struct __pyx_obj_7questdb_7_client_Buffer *, size_t, size_t);
__pyx_t_7questdb_7_client_void_int (*_check_impl)(struct __pyx_obj_7questdb_7_client_Buffer *);
__pyx_t_7questdb_7_client_void_int (*_check_readable)(struct __pyx_obj_7questdb_7_client_Buffer *);
void (*_begin_native_borrow)(struct __pyx_obj_7questdb_7_client_Buffer *, int);
void (*_end_native_borrow)(struct __pyx_obj_7questdb_7_client_Buffer *, int);
void (*_begin_frame_borrow)(struct __pyx_obj_7questdb_7_client_Buffer *);
void (*_end_frame_borrow)(struct __pyx_obj_7questdb_7_client_Buffer *);
int (*_reentered_from_frame)(struct __pyx_obj_7questdb_7_client_Buffer *);
void (*_clear_now)(struct __pyx_obj_7questdb_7_client_Buffer *);
void (*_leave_row)(struct __pyx_obj_7questdb_7_client_Buffer *);
PyObject *(*_to_bytes)(struct __pyx_obj_7questdb_7_client_Buffer *);
__pyx_t_7questdb_7_client_void_int (*_check_not_in_row)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_opt_args_7questdb_7_client_6Buffer__check_not_in_row *__pyx_optional_args);
__pyx_t_7questdb_7_client_void_int (*_set_marker)(struct __pyx_obj_7questdb_7_client_Buffer *);
__pyx_t_7questdb_7_client_void_int (*_rewind_to_marker)(struct __pyx_obj_7questdb_7_client_Buffer *);
PyObject *(*_clear_marker)(struct __pyx_obj_7questdb_7_client_Buffer *);
PyObject *(*_rewind_after_failure)(struct __pyx_obj_7questdb_7_client_Buffer *);
__pyx_t_7questdb_7_client_void_int (*_table)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *);
struct qdb_pystr_buf *(*_cleared_b)(struct __pyx_obj_7questdb_7_client_Buffer *);
__pyx_t_7questdb_7_client_void_int (*_symbol)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_column_bool)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, int);
__pyx_t_7questdb_7_client_void_int (*_column_decimal)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_require_qwp_column)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_column_binary)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_column_uuid)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_column_ipv4)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_column_char)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_Char *);
__pyx_t_7questdb_7_client_void_int (*_column_date_millis)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_DateMillis *);
__pyx_t_7questdb_7_client_void_int (*_column_long256)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_Long256 *);
__pyx_t_7questdb_7_client_void_int (*_column_geohash)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_Geohash *);
__pyx_t_7questdb_7_client_void_int (*_column_int)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_column_i64)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, int64_t);
__pyx_t_7questdb_7_client_void_int (*_column_f64)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, double);
__pyx_t_7questdb_7_client_void_int (*_column_str)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_column_ts_micros)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_TimestampMicros *);
__pyx_t_7questdb_7_client_void_int (*_column_ts_nanos)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_TimestampNanos *);
__pyx_t_7questdb_7_client_void_int (*_column_numpy)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyArrayObject *);
__pyx_t_7questdb_7_client_void_int (*_column_dt)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyDateTime_DateTime *);
__pyx_t_7questdb_7_client_void_int (*_column)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_column_qwp_only)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_may_trigger_row_complete)(struct __pyx_obj_7questdb_7_client_Buffer *);
__pyx_t_7questdb_7_client_void_int (*_at_ts_us)(struct __pyx_obj_7questdb_7_client_Buffer *, struct __pyx_obj_7questdb_7_client_TimestampMicros *);
__pyx_t_7questdb_7_client_void_int (*_at_ts_ns)(struct __pyx_obj_7questdb_7_client_Buffer *, struct __pyx_obj_7questdb_7_client_TimestampNanos *);
__pyx_t_7questdb_7_client_void_int (*_at_dt)(struct __pyx_obj_7questdb_7_client_Buffer *, PyDateTime_DateTime *);
__pyx_t_7questdb_7_client_void_int (*_at_now)(struct __pyx_obj_7questdb_7_client_Buffer *);
__pyx_t_7questdb_7_client_void_int (*_at)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_row)(struct __pyx_obj_7questdb_7_client_Buffer *, int, PyObject *, struct __pyx_opt_args_7questdb_7_client_6Buffer__row *__pyx_optional_args);
};
static struct __pyx_vtabstruct_7questdb_7_client_Buffer *__pyx_vtabptr_7questdb_7_client_Buffer;
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__init_ilp_impl(struct __pyx_obj_7questdb_7_client_Buffer *, enum line_sender_protocol_version, size_t, size_t);
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__init_qwp_impl(struct __pyx_obj_7questdb_7_client_Buffer *, size_t, size_t);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__check_impl(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__check_readable(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__begin_native_borrow(struct __pyx_obj_7questdb_7_client_Buffer *, int);
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__end_native_borrow(struct __pyx_obj_7questdb_7_client_Buffer *, int);
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__begin_frame_borrow(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__end_frame_borrow(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__clear_now(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__leave_row(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__to_bytes(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_opt_args_7questdb_7_client_6Buffer__check_not_in_row *__pyx_optional_args);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__set_marker(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__rewind_to_marker(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__clear_marker(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__rewind_after_failure(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__table(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *);
static CYTHON_INLINE struct qdb_pystr_buf *__pyx_f_7questdb_7_client_6Buffer__cleared_b(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__symbol(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_bool(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, int);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_decimal(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__require_qwp_column(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_binary(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_uuid(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_ipv4(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_char(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_Char *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_date_millis(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_DateMillis *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_long256(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_Long256 *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_geohash(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_Geohash *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_int(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_i64(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, int64_t);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_f64(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, double);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_str(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_ts_micros(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_TimestampMicros *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_ts_nanos(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_TimestampNanos *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_numpy(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyArrayObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_dt(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyDateTime_DateTime *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__may_trigger_row_complete(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at_ts_us(struct __pyx_obj_7questdb_7_client_Buffer *, struct __pyx_obj_7questdb_7_client_TimestampMicros *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at_ts_ns(struct __pyx_obj_7questdb_7_client_Buffer *, struct __pyx_obj_7questdb_7_client_TimestampNanos *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at_dt(struct __pyx_obj_7questdb_7_client_Buffer *, PyDateTime_DateTime *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at_now(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *);
01703: """
01704: Internal row-serialization buffer, managed by :class:`Sender <questdb.Sender>`.
01705:
01706: Kept importable as ``questdb.ingress.Buffer`` for legacy ILP/HTTP and
01707: ILP/TCP code that constructs buffers explicitly and flushes them via
01708: ``sender.flush(buffer)``.
01709: """
01710: cdef line_sender_buffer* _impl
01711: cdef qdb_pystr_buf* _b
01712: cdef size_t _init_buf_size
01713: cdef size_t _max_name_len
01714: cdef bint _qwp
01715: # Native calls borrowing this buffer, even when it is caller-owned:
01716: # 0 = none, > 0 = that many read-only (const) borrows, such as a
01717: # ``flush(buffer, clear=False)``; -1 = one borrow that may modify it.
01718: # Only updated while holding the GIL.
01719: cdef int _native_borrows
01720: # The thread serializing a frame into this buffer under an exclusive
01721: # borrow (`_begin_frame_borrow`), or 0. See `_reentered_from_frame`.
01722: cdef unsigned long _frame_thread
01723: cdef bint _marker_set
01724: cdef int _row_depth
01725: cdef object _row_complete_sender
01726:
+01727: def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_6Buffer_1__cinit__(PyObject *__pyx_v_self,
#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;
}
+01728: self._impl = NULL
__pyx_v_self->_impl = NULL;
+01729: self._b = NULL
__pyx_v_self->_b = NULL;
+01730: self._init_buf_size = 0
__pyx_v_self->_init_buf_size = 0;
+01731: self._max_name_len = 0
__pyx_v_self->_max_name_len = 0;
+01732: self._qwp = False
__pyx_v_self->_qwp = 0;
+01733: self._native_borrows = 0
__pyx_v_self->_native_borrows = 0;
+01734: self._frame_thread = 0
__pyx_v_self->_frame_thread = 0;
+01735: self._marker_set = False
__pyx_v_self->_marker_set = 0;
+01736: self._row_depth = 0
__pyx_v_self->_row_depth = 0;
+01737: self._row_complete_sender = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_row_complete_sender); __Pyx_DECREF_SET(__pyx_v_self->_row_complete_sender, Py_None);
01738:
+01739: def __init__(
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_6Buffer_3__init__(PyObject *__pyx_v_self,
#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, 1739, __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, 1739, __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, 1739, __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, 1739, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__init__", 0) < (0)) __PYX_ERR(0, 1739, __pyx_L3_error)
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_65536));
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_127));
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 3, i); __PYX_ERR(0, 1739, __pyx_L3_error) }
}
} else {
switch (__pyx_nargs) {
case 3:
values[2] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1739, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1739, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1739, __pyx_L3_error)
break;
default: goto __pyx_L5_argtuple_error;
}
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_65536));
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_127));
}
if (__Pyx_PyInt_FromNumber(&values[0], "protocol_version", 0) < (0)) __PYX_ERR(0, 1741, __pyx_L3_error)
__pyx_v_protocol_version = ((PyObject*)values[0]);
if (__Pyx_PyInt_FromNumber(&values[1], "init_buf_size", 0) < (0)) __PYX_ERR(0, 1742, __pyx_L3_error)
__pyx_v_init_buf_size = ((PyObject*)values[1]);
if (__Pyx_PyInt_FromNumber(&values[2], "max_name_len", 0) < (0)) __PYX_ERR(0, 1743, __pyx_L3_error)
__pyx_v_max_name_len = ((PyObject*)values[2]);
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 3, __pyx_nargs); __PYX_ERR(0, 1739, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.Buffer.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return -1;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_protocol_version), (&PyLong_Type), 0, "protocol_version", 2))) __PYX_ERR(0, 1741, __pyx_L1_error)
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_init_buf_size), (&PyLong_Type), 0, "init_buf_size", 2))) __PYX_ERR(0, 1742, __pyx_L1_error)
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_max_name_len), (&PyLong_Type), 0, "max_name_len", 2))) __PYX_ERR(0, 1743, __pyx_L1_error)
__pyx_r = __pyx_pf_7questdb_7_client_6Buffer_2__init__(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self), __pyx_v_protocol_version, __pyx_v_init_buf_size, __pyx_v_max_name_len);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = -1;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
goto __pyx_L7_cleaned_up;
__pyx_L0:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__pyx_L7_cleaned_up:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_6Buffer_2__init__(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_protocol_version, PyObject *__pyx_v_init_buf_size, PyObject *__pyx_v_max_name_len) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_AddTraceback("questdb._client.Buffer.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01740: self,
01741: protocol_version: int,
01742: init_buf_size: int=65536,
01743: max_name_len: int=127):
+01744: if self._impl != NULL:
__pyx_t_1 = (__pyx_v_self->_impl != NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+01745: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1745, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+01746: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1746, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1746, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Buffer_is_already_initialized}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1745, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 1745, __pyx_L1_error)
01747: 'Buffer is already initialized.')
+01748: if protocol_version not in range(1, 4):
__pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyRange_Type)), __pyx_mstate_global->__pyx_tuple[38], NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1748, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_protocol_version, __pyx_t_2, Py_NE)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1748, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(__pyx_t_1)) { /* … */ } /* … */ { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_int_1, __pyx_mstate_global->__pyx_int_4}; __pyx_mstate_global->__pyx_tuple[38] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[38])) __PYX_ERR(0, 1748, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[38]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[38]);
+01749: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1749, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
+01750: QuestDBErrorCode.ProtocolVersionError,
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1750, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_ProtocolVersionError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1750, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Invalid_protocol_version_Support}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1749, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 1749, __pyx_L1_error)
01751: 'Invalid protocol version. Supported versions are 1-3.')
+01752: self._init_ilp_impl(protocol_version, init_buf_size, max_name_len)
__pyx_t_8 = ((enum line_sender_protocol_version)__Pyx_PyLong_As_enum__line_sender_protocol_version(__pyx_v_protocol_version)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1752, __pyx_L1_error) __pyx_t_7 = __Pyx_PyLong_As_size_t(__pyx_v_init_buf_size); if (unlikely((__pyx_t_7 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1752, __pyx_L1_error) __pyx_t_9 = __Pyx_PyLong_As_size_t(__pyx_v_max_name_len); if (unlikely((__pyx_t_9 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1752, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__init_ilp_impl(__pyx_v_self, __pyx_t_8, __pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1752, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
01753:
+01754: @staticmethod
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_5_new_qwp(CYTHON_UNUSED PyObject *__pyx_self,
#if CYTHON_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, 1754, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1754, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1754, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_new_qwp", 0) < (0)) __PYX_ERR(0, 1754, __pyx_L3_error)
if (!values[0]) values[0] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_65536));
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_127));
} else {
switch (__pyx_nargs) {
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1754, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1754, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
if (!values[0]) values[0] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_65536));
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_127));
}
if (__Pyx_PyInt_FromNumber(&values[0], "init_buf_size", 0) < (0)) __PYX_ERR(0, 1756, __pyx_L3_error)
__pyx_v_init_buf_size = ((PyObject*)values[0]);
if (__Pyx_PyInt_FromNumber(&values[1], "max_name_len", 0) < (0)) __PYX_ERR(0, 1757, __pyx_L3_error)
__pyx_v_max_name_len = ((PyObject*)values[1]);
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("_new_qwp", 0, 0, 2, __pyx_nargs); __PYX_ERR(0, 1754, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.Buffer._new_qwp", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_init_buf_size), (&PyLong_Type), 0, "init_buf_size", 2))) __PYX_ERR(0, 1756, __pyx_L1_error)
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_max_name_len), (&PyLong_Type), 0, "max_name_len", 2))) __PYX_ERR(0, 1757, __pyx_L1_error)
__pyx_r = __pyx_pf_7questdb_7_client_6Buffer_4_new_qwp(__pyx_v_init_buf_size, __pyx_v_max_name_len);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = NULL;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
goto __pyx_L7_cleaned_up;
__pyx_L0:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__pyx_L7_cleaned_up:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Buffer_4_new_qwp(PyObject *__pyx_v_init_buf_size, PyObject *__pyx_v_max_name_len) {
struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buf = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.Buffer._new_qwp", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_buf);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_16 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1754, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_16);
if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_init_buf_size, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 1754, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_max_name_len, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 1754, __pyx_L1_error)
__pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Buffer_5_new_qwp, __Pyx_CYFUNCTION_STATICMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer__new_qwp, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[185])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1754, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_25);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25);
#endif
__Pyx_CyFunction_SetDefaultsTuple(__pyx_t_25, __pyx_mstate_global->__pyx_tuple[73]);
__Pyx_CyFunction_SetAnnotationsDict(__pyx_t_25, __pyx_t_16);
__Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, __pyx_mstate_global->__pyx_n_u_new_qwp, __pyx_t_25) < (0)) __PYX_ERR(0, 1754, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
__pyx_t_16 = NULL;
__Pyx_GetNameInClass(__pyx_t_17, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, __pyx_mstate_global->__pyx_n_u_new_qwp); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1754, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_16, __pyx_t_17};
__pyx_t_25 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_staticmethod, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1754, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_25);
}
if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, __pyx_mstate_global->__pyx_n_u_new_qwp, __pyx_t_25) < (0)) __PYX_ERR(0, 1754, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
/* … */
{
PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_int_65536, __pyx_mstate_global->__pyx_int_127};
__pyx_mstate_global->__pyx_tuple[73] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[73])) __PYX_ERR(0, 1754, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[73]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[73]);
01755: def _new_qwp(
01756: init_buf_size: int=65536,
01757: max_name_len: int=127):
+01758: cdef Buffer buf = Buffer.__new__(Buffer)
__pyx_t_1 = ((PyObject *)__pyx_tp_new_7questdb_7_client_Buffer(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1758, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_buf = ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_1); __pyx_t_1 = 0;
+01759: buf._init_qwp_impl(init_buf_size, max_name_len)
__pyx_t_2 = __Pyx_PyLong_As_size_t(__pyx_v_init_buf_size); if (unlikely((__pyx_t_2 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1759, __pyx_L1_error) __pyx_t_3 = __Pyx_PyLong_As_size_t(__pyx_v_max_name_len); if (unlikely((__pyx_t_3 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1759, __pyx_L1_error) __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__init_qwp_impl(__pyx_v_buf, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1759, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+01760: return buf
{
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;
01761:
+01762: cdef inline _init_ilp_impl(self, line_sender_protocol_version version, size_t init_buf_size, size_t max_name_len):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__init_ilp_impl(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, enum line_sender_protocol_version __pyx_v_version, size_t __pyx_v_init_buf_size, size_t __pyx_v_max_name_len) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client.Buffer._init_ilp_impl", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01763: self._impl = line_sender_buffer_with_max_name_len(version, max_name_len)
__pyx_v_self->_impl = line_sender_buffer_with_max_name_len(__pyx_v_version, __pyx_v_max_name_len);
+01764: self._b = qdb_pystr_buf_new()
__pyx_v_self->_b = qdb_pystr_buf_new();
+01765: reserve_buffer(self._impl, init_buf_size)
__pyx_t_1 = __pyx_f_7questdb_7_client_reserve_buffer(__pyx_v_self->_impl, __pyx_v_init_buf_size); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1765, __pyx_L1_error)
+01766: self._init_buf_size = init_buf_size
__pyx_v_self->_init_buf_size = __pyx_v_init_buf_size;
+01767: self._max_name_len = max_name_len
__pyx_v_self->_max_name_len = __pyx_v_max_name_len;
+01768: self._qwp = False
__pyx_v_self->_qwp = 0;
+01769: self._row_complete_sender = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_row_complete_sender); __Pyx_DECREF_SET(__pyx_v_self->_row_complete_sender, Py_None);
01770:
+01771: cdef inline _init_qwp_impl(self, size_t init_buf_size, size_t max_name_len):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__init_qwp_impl(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, size_t __pyx_v_init_buf_size, size_t __pyx_v_max_name_len) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client.Buffer._init_qwp_impl", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01772: self._impl = line_sender_buffer_new_qwp_with_max_name_len(max_name_len)
__pyx_v_self->_impl = line_sender_buffer_new_qwp_with_max_name_len(__pyx_v_max_name_len);
+01773: self._b = qdb_pystr_buf_new()
__pyx_v_self->_b = qdb_pystr_buf_new();
+01774: reserve_buffer(self._impl, init_buf_size)
__pyx_t_1 = __pyx_f_7questdb_7_client_reserve_buffer(__pyx_v_self->_impl, __pyx_v_init_buf_size); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1774, __pyx_L1_error)
+01775: self._init_buf_size = init_buf_size
__pyx_v_self->_init_buf_size = __pyx_v_init_buf_size;
+01776: self._max_name_len = max_name_len
__pyx_v_self->_max_name_len = __pyx_v_max_name_len;
+01777: self._qwp = True
__pyx_v_self->_qwp = 1;
+01778: self._row_complete_sender = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_row_complete_sender); __Pyx_DECREF_SET(__pyx_v_self->_row_complete_sender, Py_None);
01779:
01780:
+01781: def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_7questdb_7_client_6Buffer_7__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7questdb_7_client_6Buffer_7__dealloc__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_pf_7questdb_7_client_6Buffer_6__dealloc__(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
}
static void __pyx_pf_7questdb_7_client_6Buffer_6__dealloc__(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
/* … */
/* function exit code */
__Pyx_RefNannyFinishContext();
}
+01782: self._row_complete_sender = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_row_complete_sender); __Pyx_DECREF_SET(__pyx_v_self->_row_complete_sender, Py_None);
+01783: qdb_pystr_buf_free(self._b)
qdb_pystr_buf_free(__pyx_v_self->_b);
+01784: line_sender_buffer_free(self._impl)
line_sender_buffer_free(__pyx_v_self->_impl);
01785:
+01786: cdef inline void_int _check_impl(self) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__check_impl(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client.Buffer._check_impl", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01787: """Check the buffer can be modified."""
+01788: if self._native_borrows != 0 and not self._reentered_from_frame():
__pyx_t_2 = (__pyx_v_self->_native_borrows != 0);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = ((struct __pyx_vtabstruct_7questdb_7_client_Buffer *)__pyx_v_self->__pyx_vtab)->_reentered_from_frame(__pyx_v_self); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 1788, __pyx_L1_error)
__pyx_t_3 = (!__pyx_t_2);
__pyx_t_1 = __pyx_t_3;
__pyx_L4_bool_binop_done:;
if (unlikely(__pyx_t_1)) {
/* … */
}
+01789: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1789, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
+01790: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1790, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1790, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_8, __pyx_mstate_global->__pyx_kp_u_Buffer_cannot_be_modified_while}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1789, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 1789, __pyx_L1_error)
01791: 'Buffer cannot be modified while a native call is using it.')
+01792: if self._impl == NULL:
__pyx_t_1 = (__pyx_v_self->_impl == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+01793: raise QuestDBError(
__pyx_t_6 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1793, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
+01794: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1794, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1794, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_8))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_8); assert(__pyx_t_6); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_8, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_Buffer_is_not_initialized}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1793, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 1793, __pyx_L1_error)
01795: 'Buffer is not initialized.')
01796:
+01797: cdef inline void_int _check_readable(self) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__check_readable(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client.Buffer._check_readable", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01798: """Check the buffer can be read: read-only native borrows allowed."""
+01799: if self._native_borrows < 0 and not self._reentered_from_frame():
__pyx_t_2 = (__pyx_v_self->_native_borrows < 0);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = ((struct __pyx_vtabstruct_7questdb_7_client_Buffer *)__pyx_v_self->__pyx_vtab)->_reentered_from_frame(__pyx_v_self); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 1799, __pyx_L1_error)
__pyx_t_3 = (!__pyx_t_2);
__pyx_t_1 = __pyx_t_3;
__pyx_L4_bool_binop_done:;
if (unlikely(__pyx_t_1)) {
/* … */
}
+01800: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1800, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
+01801: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1801, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1801, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_8, __pyx_mstate_global->__pyx_kp_u_Buffer_cannot_be_accessed_while}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1800, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 1800, __pyx_L1_error)
01802: 'Buffer cannot be accessed while a native call is '
01803: 'modifying it.')
+01804: if self._impl == NULL:
__pyx_t_1 = (__pyx_v_self->_impl == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+01805: raise QuestDBError(
__pyx_t_6 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1805, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
+01806: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1806, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1806, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_8))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_8); assert(__pyx_t_6); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_8, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_Buffer_is_not_initialized}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1805, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 1805, __pyx_L1_error)
01807: 'Buffer is not initialized.')
01808:
+01809: cdef inline void _begin_native_borrow(self, bint exclusive) noexcept:
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__begin_native_borrow(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, int __pyx_v_exclusive) {
/* … */
/* function exit code */
}
01810: # Callers have already passed `_check_impl` (exclusive) or
01811: # `_check_readable` (shared), so the transition is always valid.
+01812: if exclusive:
if (__pyx_v_exclusive) {
/* … */
goto __pyx_L3;
}
+01813: self._native_borrows = -1
__pyx_v_self->_native_borrows = -1;
01814: else:
+01815: self._native_borrows += 1
/*else*/ {
__pyx_v_self->_native_borrows = (__pyx_v_self->_native_borrows + 1);
}
__pyx_L3:;
01816:
+01817: cdef inline void _end_native_borrow(self, bint exclusive) noexcept:
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__end_native_borrow(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, int __pyx_v_exclusive) {
/* … */
/* function exit code */
}
+01818: if exclusive:
if (__pyx_v_exclusive) {
/* … */
goto __pyx_L3;
}
+01819: self._native_borrows = 0
__pyx_v_self->_native_borrows = 0;
01820: else:
+01821: self._native_borrows -= 1
/*else*/ {
__pyx_v_self->_native_borrows = (__pyx_v_self->_native_borrows - 1);
}
__pyx_L3:;
01822:
+01823: cdef inline void _begin_frame_borrow(self) noexcept:
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__begin_frame_borrow(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
/* … */
/* function exit code */
}
01824: """Borrow the buffer exclusively for a frame serialized into it by
01825: `_dataframe` on this thread. Callers have passed `_check_impl`."""
+01826: self._begin_native_borrow(True)
__pyx_f_7questdb_7_client_6Buffer__begin_native_borrow(__pyx_v_self, 1);
+01827: self._frame_thread = PyThread_get_thread_ident()
__pyx_v_self->_frame_thread = PyThread_get_thread_ident();
01828:
+01829: cdef inline void _end_frame_borrow(self) noexcept:
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__end_frame_borrow(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
/* … */
/* function exit code */
}
+01830: self._frame_thread = 0
__pyx_v_self->_frame_thread = 0;
+01831: self._end_native_borrow(True)
__pyx_f_7questdb_7_client_6Buffer__end_native_borrow(__pyx_v_self, 1);
01832:
+01833: cdef bint _reentered_from_frame(self) except -1:
static int __pyx_f_7questdb_7_client_6Buffer__reentered_from_frame(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client.Buffer._reentered_from_frame", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
return __pyx_r;
}
01834: """Whether this call comes back, from Python code the frame runs, into
01835: the `dataframe()` serializing into this buffer on this same thread.
01836:
01837: The frame borrow refuses every other thread: the serializer can
01838: release the GIL while it writes. On the serializing thread itself,
01839: Python runs only where the serializer has stopped to run it -- a
01840: cell's conversion, an `attrs` read, a `questdb` log record -- so
01841: while a row is being written (`_row_depth`) such a call meets the
01842: same rules as one re-entering `row()`: reads are answered and
01843: `_check_not_in_row` refuses what would change the buffer. An OIDC or
01844: token-provider callback on this thread is the exception: it runs
01845: inside a native call -- the frame's own auto-flush, say -- that may
01846: be using the sender and the buffer, so it stays refused.
01847: """
+01848: if (self._frame_thread == 0
__pyx_t_2 = (__pyx_v_self->_frame_thread == 0);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
/* … */
if (__pyx_t_1) {
/* … */
}
+01849: or self._row_depth == 0
__pyx_t_2 = (__pyx_v_self->_row_depth == 0);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
+01850: or self._frame_thread != PyThread_get_thread_ident()):
__pyx_t_2 = (__pyx_v_self->_frame_thread != PyThread_get_thread_ident()); __pyx_t_1 = __pyx_t_2; __pyx_L4_bool_binop_done:;
+01851: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+01852: return not (_oidc_callback_on_this_thread()
__pyx_t_2 = __pyx_f_7questdb_7_client__oidc_callback_on_this_thread(); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 1852, __pyx_L1_error)
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L7_bool_binop_done;
}
/* … */
{
__pyx_r = (!__pyx_t_1);
}
goto __pyx_L0;
+01853: or _token_callback_on_this_thread())
__pyx_t_2 = __pyx_f_7questdb_7_client__token_callback_on_this_thread(); __pyx_t_1 = __pyx_t_2; __pyx_L7_bool_binop_done:;
01854:
+01855: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_13init_buf_size_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_13init_buf_size_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_6Buffer_13init_buf_size___get__(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Buffer_13init_buf_size___get__(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.Buffer.init_buf_size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01856: def init_buf_size(self) -> int:
01857: """
01858: The initial capacity of the buffer when first created.
01859:
01860: This may grow over time, see ``capacity()``.
01861: """
+01862: return self._init_buf_size
__pyx_t_1 = __Pyx_PyLong_FromSize_t(__pyx_v_self->_init_buf_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1862, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
01863:
+01864: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_12max_name_len_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_12max_name_len_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_6Buffer_12max_name_len___get__(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Buffer_12max_name_len___get__(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.Buffer.max_name_len.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01865: def max_name_len(self) -> int:
01866: """Maximum length of a table or column name."""
+01867: return self._max_name_len
__pyx_t_1 = __Pyx_PyLong_FromSize_t(__pyx_v_self->_max_name_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1867, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
01868:
+01869: def reserve(self, additional):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Buffer_9reserve(PyObject *__pyx_v_self, #if CYTHON_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, 1869, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1869, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "reserve", 0) < (0)) __PYX_ERR(0, 1869, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("reserve", 1, 1, 1, i); __PYX_ERR(0, 1869, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1869, __pyx_L3_error) } __pyx_v_additional = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("reserve", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1869, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Buffer.reserve", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_6Buffer_8reserve(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self), __pyx_v_additional); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Buffer_8reserve(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_additional) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_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_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Buffer_9reserve, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer_reserve, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[186])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1869, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, __pyx_mstate_global->__pyx_n_u_reserve, __pyx_t_25) < (0)) __PYX_ERR(0, 1869, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
01870: """
01871: Ensure the buffer has at least `additional` bytes of future capacity.
01872:
01873: :param int additional: Additional bytes to reserve.
01874: """
+01875: if additional < 0:
__pyx_t_1 = __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, 1875, __pyx_L1_error) if (unlikely(__pyx_t_1)) { /* … */ }
+01876: raise ValueError('additional must be non-negative.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_additional_must_be_non_negative};
__pyx_t_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, 1876, __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, 1876, __pyx_L1_error)
+01877: self._check_impl()
__pyx_t_5 = __pyx_f_7questdb_7_client_6Buffer__check_impl(__pyx_v_self); if (unlikely(__pyx_t_5 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1877, __pyx_L1_error)
+01878: reserve_buffer(self._impl, additional)
__pyx_t_4 = __Pyx_PyLong_As_size_t(__pyx_v_additional); if (unlikely((__pyx_t_4 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1878, __pyx_L1_error) __pyx_t_5 = __pyx_f_7questdb_7_client_reserve_buffer(__pyx_v_self->_impl, __pyx_t_4); if (unlikely(__pyx_t_5 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1878, __pyx_L1_error)
01879:
+01880: def capacity(self) -> int:
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Buffer_11capacity(PyObject *__pyx_v_self, #if CYTHON_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_25 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1880, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 1880, __pyx_L1_error) __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Buffer_11capacity, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer_capacity, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[187])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1880, __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_capacity, __pyx_t_17) < (0)) __PYX_ERR(0, 1880, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
01881: """The current buffer capacity."""
+01882: self._check_readable()
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_readable(__pyx_v_self); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1882, __pyx_L1_error)
+01883: return line_sender_buffer_capacity(self._impl)
__pyx_t_2 = __Pyx_PyLong_FromSize_t(line_sender_buffer_capacity(__pyx_v_self->_impl)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1883, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (__Pyx_PyInt_FromNumber(&__pyx_t_2, NULL, 0) < (0)) __PYX_ERR(0, 1883, __pyx_L1_error) { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = ((PyObject*)__pyx_t_2); } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
01884:
+01885: def clear(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Buffer_13clear(PyObject *__pyx_v_self, #if CYTHON_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_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Buffer_13clear, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer_clear, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[188])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1885, __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_clear, __pyx_t_17) < (0)) __PYX_ERR(0, 1885, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
01886: """
01887: Reset the buffer.
01888:
01889: Note that flushing a buffer will (unless otherwise specified)
01890: also automatically clear it.
01891:
01892: This method is designed to be called only in conjunction with
01893: ``sender.flush(buffer, clear=False)``.
01894:
01895: Raises :class:`QuestDBError <questdb.QuestDBError>`
01896: (``InvalidApiCall``) if a
01897: :func:`Buffer.row <questdb.ingress.Buffer.row>` or
01898: :func:`Buffer.dataframe <questdb.ingress.Buffer.dataframe>` call
01899: on this buffer is still in progress.
01900: """
+01901: self._check_impl()
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_impl(__pyx_v_self); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1901, __pyx_L1_error)
+01902: self._check_not_in_row('clear')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_clear, NULL); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1902, __pyx_L1_error)
+01903: self._clear_now()
__pyx_f_7questdb_7_client_6Buffer__clear_now(__pyx_v_self);
01904:
+01905: cdef inline void _clear_now(self) noexcept:
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__clear_now(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
/* … */
/* function exit code */
}
+01906: line_sender_buffer_clear(self._impl)
line_sender_buffer_clear(__pyx_v_self->_impl);
+01907: qdb_pystr_buf_clear(self._b)
qdb_pystr_buf_clear(__pyx_v_self->_b);
01908:
+01909: cdef inline void _leave_row(self) noexcept:
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__leave_row(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
/* … */
/* function exit code */
}
+01910: self._row_depth -= 1
__pyx_v_self->_row_depth = (__pyx_v_self->_row_depth - 1);
01911:
+01912: def __len__(self) -> int:
/* Python wrapper */ static Py_ssize_t __pyx_pw_7questdb_7_client_6Buffer_15__len__(PyObject *__pyx_v_self); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Buffer_14__len__, "\n The current number of bytes currently in the buffer, read mid-row\n on the same terms as :func:`Buffer.__bytes__`.\n\n For ILP buffers this is exact, and equivalent (but cheaper) to\n ``len(bytes(buffer))``. For QWP buffers it is an estimate of the\n encoded size. Over QWP/WebSocket it is never below the size of the\n frame a flush encodes, unless store-and-forward has fallen back to\n sending full symbol dictionaries.\n "); #if CYTHON_UPDATE_DESCRIPTOR_DOC struct wrapperbase __pyx_wrapperbase_7questdb_7_client_6Buffer_14__len__; #endif static Py_ssize_t __pyx_pw_7questdb_7_client_6Buffer_15__len__(PyObject *__pyx_v_self) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; Py_ssize_t __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_7questdb_7_client_6Buffer_14__len__(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static Py_ssize_t __pyx_pf_7questdb_7_client_6Buffer_14__len__(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) { Py_ssize_t __pyx_r; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_AddTraceback("questdb._client.Buffer.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; return __pyx_r; }
01913: """
01914: The current number of bytes currently in the buffer, read mid-row
01915: on the same terms as :func:`Buffer.__bytes__`.
01916:
01917: For ILP buffers this is exact, and equivalent (but cheaper) to
01918: ``len(bytes(buffer))``. For QWP buffers it is an estimate of the
01919: encoded size. Over QWP/WebSocket it is never below the size of the
01920: frame a flush encodes, unless store-and-forward has fallen back to
01921: sending full symbol dictionaries.
01922: """
+01923: self._check_readable()
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_readable(__pyx_v_self); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1923, __pyx_L1_error)
+01924: return line_sender_buffer_size(self._impl)
{
__pyx_r = line_sender_buffer_size(__pyx_v_self->_impl);
}
goto __pyx_L0;
01925:
+01926: def __bytes__(self) -> bytes:
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Buffer_17__bytes__(PyObject *__pyx_v_self, #if CYTHON_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_17 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1926, __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, 1926, __pyx_L1_error) __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Buffer_17__bytes__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer___bytes, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[189])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1926, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25); #endif __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_25, __pyx_t_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_bytes_2, __pyx_t_25) < (0)) __PYX_ERR(0, 1926, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
01927: """Return the constructed buffer as bytes. Use for debugging.
01928:
01929: Read from inside a part-written row -- from a column value whose
01930: conversion runs Python -- this returns the buffer as it stands,
01931: so the last line has no terminator yet. That is deliberate: a
01932: read changes nothing, and a snapshot of a buffer mid-row is an
01933: honest answer to what the buffer holds at that moment. Every
01934: call that would *act* on the buffer is refused there instead.
01935: """
+01936: return self._to_bytes()
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__to_bytes(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1936, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_1))) __PYX_ERR(0, 1936, __pyx_L1_error) { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = ((PyObject*)__pyx_t_1); } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
01937:
+01938: cdef inline object _to_bytes(self):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__to_bytes(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
struct line_sender_buffer_view __pyx_v_view;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Buffer._to_bytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01939: self._check_readable()
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_readable(__pyx_v_self); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1939, __pyx_L1_error)
+01940: cdef line_sender_buffer_view view = line_sender_buffer_peek(self._impl)
__pyx_v_view = line_sender_buffer_peek(__pyx_v_self->_impl);
+01941: return PyBytes_FromStringAndSize(<const char *> view.buf, <Py_ssize_t> view.len)
__pyx_t_2 = PyBytes_FromStringAndSize(((char const *)__pyx_v_view.buf), ((Py_ssize_t)__pyx_v_view.len)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1941, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
01942:
+01943: cdef inline void_int _check_not_in_row(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_method, struct __pyx_opt_args_7questdb_7_client_6Buffer__check_not_in_row *__pyx_optional_args) {
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client.Buffer._check_not_in_row", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
struct __pyx_opt_args_7questdb_7_client_6Buffer__check_not_in_row {
int __pyx_n;
PyObject *hint;
};
+01944: self, str method, str hint=None) except -1:
PyObject *__pyx_v_hint = ((PyObject*)Py_None);
__pyx_t_7questdb_7_client_void_int __pyx_r;
if (__pyx_optional_args) {
if (__pyx_optional_args->__pyx_n > 0) {
__pyx_v_hint = __pyx_optional_args->hint;
}
}
01945: """
01946: Refuse a call that arrives while a row is part-way through
01947: being written into this buffer.
01948:
01949: `row()` and the row-serializing `dataframe()` both hold a
01950: rewind point across values whose conversion runs Python code,
01951: and that code re-enters on the same thread, so nothing else
01952: stands between it and the buffer. The native buffer refuses a
01953: half-written row anyway; what it cannot do is stop the caller's
01954: own error handling from acting on the refusal.
01955:
01956: `hint` is a further sentence for the message, for a refused call
01957: with a remedy of its own.
01958: """
+01959: if self._row_depth != 0:
__pyx_t_1 = (__pyx_v_self->_row_depth != 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+01960: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1960, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+01961: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1961, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1961, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+01962: f"{method}() can't be called while a row is being "
__pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1962, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_while_a_row_is); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1962, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
01963: "written into this buffer. `row()` or `dataframe()` is "
01964: "part-way through and something it called has come "
01965: "back here, most likely a column value whose "
+01966: "conversion runs Python code." +
__pyx_t_8 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_t_7, __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1966, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_8}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1960, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 1960, __pyx_L1_error)
+01967: ("" if hint is None else " " + hint))
__pyx_t_1 = (__pyx_v_hint == ((PyObject*)Py_None));
if (__pyx_t_1) {
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u__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, 1967, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_5 = __pyx_t_8;
__pyx_t_8 = 0;
}
01968:
+01969: cdef inline void_int _set_marker(self) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__set_marker(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
struct line_sender_error *__pyx_v_err;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Buffer._set_marker", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01970: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+01971: if not line_sender_buffer_set_marker(self._impl, &err):
__pyx_t_1 = (!line_sender_buffer_set_marker(__pyx_v_self->_impl, (&__pyx_v_err)));
if (unlikely(__pyx_t_1)) {
/* … */
}
+01972: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1972, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 1972, __pyx_L1_error)
+01973: self._marker_set = True
__pyx_v_self->_marker_set = 1;
01974:
+01975: cdef inline void_int _rewind_to_marker(self) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__rewind_to_marker(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
struct line_sender_error *__pyx_v_err;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Buffer._rewind_to_marker", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01976: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
01977: # The rewind point is spent either way: a successful rewind
01978: # consumes it, and a failed one leaves nothing worth keeping.
+01979: self._marker_set = False
__pyx_v_self->_marker_set = 0;
+01980: if not line_sender_buffer_rewind_to_marker(self._impl, &err):
__pyx_t_1 = (!line_sender_buffer_rewind_to_marker(__pyx_v_self->_impl, (&__pyx_v_err)));
if (unlikely(__pyx_t_1)) {
/* … */
}
+01981: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1981, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 1981, __pyx_L1_error)
01982:
+01983: cdef inline _clear_marker(self):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__clear_marker(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01984: line_sender_buffer_clear_marker(self._impl)
line_sender_buffer_clear_marker(__pyx_v_self->_impl);
+01985: self._marker_set = False
__pyx_v_self->_marker_set = 0;
01986:
+01987: cdef inline _rewind_after_failure(self):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__rewind_after_failure(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
struct line_sender_error *__pyx_v_err;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01988: """
01989: Drop the part-written row while an error is already on its way
01990: out to the caller.
01991:
01992: A flush the row itself triggered takes the rewind point with it,
01993: and so does anything that re-enters the buffer while the row is
01994: being assembled. Either way there is no rewind point left, the
01995: part-written row is gone with it, and the error already being
01996: raised is the one the caller needs to see.
01997: """
+01998: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+01999: if not self._marker_set:
__pyx_t_1 = (!__pyx_v_self->_marker_set);
if (__pyx_t_1) {
/* … */
}
+02000: return
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+02001: self._marker_set = False
__pyx_v_self->_marker_set = 0;
+02002: if not line_sender_buffer_rewind_to_marker(self._impl, &err):
__pyx_t_1 = (!line_sender_buffer_rewind_to_marker(__pyx_v_self->_impl, (&__pyx_v_err)));
if (__pyx_t_1) {
/* … */
}
+02003: line_sender_error_free(err)
line_sender_error_free(__pyx_v_err);
02004:
+02005: cdef inline void_int _table(self, str table_name) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__table(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_table_name) {
struct line_sender_error *__pyx_v_err;
struct line_sender_table_name __pyx_v_c_table_name;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Buffer._table", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+02006: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
02007: cdef line_sender_table_name c_table_name
+02008: str_to_table_name(
__pyx_t_2 = __pyx_f_7questdb_7_client_str_to_table_name(__pyx_t_1, ((PyObject *)__pyx_v_table_name), (&__pyx_v_c_table_name)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2008, __pyx_L1_error)
+02009: self._cleared_b(), <PyObject*>table_name, &c_table_name)
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2009, __pyx_L1_error)
+02010: if not line_sender_buffer_table(self._impl, c_table_name, &err):
__pyx_t_3 = (!line_sender_buffer_table(__pyx_v_self->_impl, __pyx_v_c_table_name, (&__pyx_v_err)));
if (unlikely(__pyx_t_3)) {
/* … */
}
+02011: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2011, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 2011, __pyx_L1_error)
02012:
+02013: cdef inline qdb_pystr_buf* _cleared_b(self):
static CYTHON_INLINE struct qdb_pystr_buf *__pyx_f_7questdb_7_client_6Buffer__cleared_b(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
struct qdb_pystr_buf *__pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
+02014: qdb_pystr_buf_clear(self._b)
qdb_pystr_buf_clear(__pyx_v_self->_b);
+02015: return self._b
{
__pyx_r = __pyx_v_self->_b;
}
goto __pyx_L0;
02016:
+02017: cdef inline void_int _symbol(self, str name, str value) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__symbol(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
struct line_sender_utf8 __pyx_v_c_value;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Buffer._symbol", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+02018: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
02019: cdef line_sender_column_name c_name
02020: cdef line_sender_utf8 c_value
+02021: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2021, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_1, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2021, __pyx_L1_error)
+02022: str_to_utf8(self._b, <PyObject*>value, &c_value)
__pyx_t_2 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_self->_b, ((PyObject *)__pyx_v_value), (&__pyx_v_c_value)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2022, __pyx_L1_error)
+02023: if not line_sender_buffer_symbol(self._impl, c_name, c_value, &err):
__pyx_t_3 = (!line_sender_buffer_symbol(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_c_value, (&__pyx_v_err)));
if (unlikely(__pyx_t_3)) {
/* … */
}
+02024: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2024, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 2024, __pyx_L1_error)
02025:
+02026: cdef inline void_int _column_bool(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_bool(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, int __pyx_v_value) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Buffer._column_bool", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
02027: self, str name, bint value) except -1:
+02028: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
02029: cdef line_sender_column_name c_name
+02030: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2030, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_1, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2030, __pyx_L1_error)
+02031: if not line_sender_buffer_column_bool(self._impl, c_name, value, &err):
__pyx_t_3 = (!line_sender_buffer_column_bool(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_value, (&__pyx_v_err)));
if (unlikely(__pyx_t_3)) {
/* … */
}
+02032: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2032, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 2032, __pyx_L1_error)
02033:
+02034: cdef inline void_int _column_decimal(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_decimal(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
struct line_sender_column_name __pyx_v_c_name;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client.Buffer._column_decimal", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
return __pyx_r;
}
02035: self, str name, object value) except -1:
02036: cdef line_sender_column_name c_name
+02037: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2037, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_1, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2037, __pyx_L1_error)
+02038: return serialize_decimal_py_obj(self._impl, c_name, <PyObject*>value)
__pyx_t_2 = __pyx_f_7questdb_7_client_serialize_decimal_py_obj(__pyx_v_self->_impl, __pyx_v_c_name, ((PyObject *)__pyx_v_value)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2038, __pyx_L1_error)
{
__pyx_r = __pyx_t_2;
}
goto __pyx_L0;
02039:
+02040: cdef inline void_int _require_qwp_column(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__require_qwp_column(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_type_name) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.Buffer._require_qwp_column", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
02041: self, str type_name) except -1:
+02042: if not self._qwp:
__pyx_t_1 = (!__pyx_v_self->_qwp);
if (unlikely(__pyx_t_1)) {
/* … */
}
+02043: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2043, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+02044: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2044, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2044, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+02045: f"{type_name} columns require a QWP sender "
__pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_type_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2045, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_columns_require_a_QWP_sender_pr); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2045, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_7}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2043, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 2043, __pyx_L1_error)
02046: "(protocol 'udp', 'ws' or 'wss'); this buffer uses "
02047: "the ILP protocol (tcp/tcps/http/https).")
02048:
+02049: cdef inline void_int _column_binary(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_binary(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
uint8_t const *__pyx_v_data;
size_t __pyx_v_data_len;
Py_buffer __pyx_v_view;
int __pyx_v_release_view;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.Buffer._column_binary", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
02050: self, str name, object value) except -1:
+02051: self._require_qwp_column('BINARY')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__require_qwp_column(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_BINARY); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2051, __pyx_L1_error)
+02052: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
02053: cdef line_sender_column_name c_name
02054: cdef const uint8_t* data
02055: cdef size_t data_len
02056: cdef Py_buffer view
+02057: cdef bint release_view = False
__pyx_v_release_view = 0;
+02058: if isinstance(value, bytes):
__pyx_t_2 = PyBytes_Check(__pyx_v_value);
if (__pyx_t_2) {
/* … */
goto __pyx_L3;
}
+02059: data = <const uint8_t*>PyBytes_AsString(value)
__pyx_t_3 = PyBytes_AsString(__pyx_v_value); if (unlikely(__pyx_t_3 == ((void *)NULL))) __PYX_ERR(0, 2059, __pyx_L1_error) __pyx_v_data = ((uint8_t const *)__pyx_t_3);
+02060: data_len = <size_t>PyBytes_GET_SIZE(value)
__pyx_v_data_len = ((size_t)PyBytes_GET_SIZE(__pyx_v_value));
+02061: elif isinstance(value, bytearray):
__pyx_t_2 = PyByteArray_Check(__pyx_v_value);
if (__pyx_t_2) {
/* … */
goto __pyx_L3;
}
+02062: data = <const uint8_t*>PyByteArray_AsString(value)
__pyx_v_data = ((uint8_t const *)PyByteArray_AsString(__pyx_v_value));
+02063: data_len = <size_t>PyByteArray_Size(value)
__pyx_v_data_len = ((size_t)PyByteArray_Size(__pyx_v_value));
02064: else:
+02065: if value.itemsize != 1 or not value.c_contiguous:
/*else*/ {
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_mstate_global->__pyx_n_u_itemsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2065, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = (__Pyx_PyLong_BoolNeObjC(__pyx_t_4, __pyx_mstate_global->__pyx_int_1, 1, 0)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 2065, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (!__pyx_t_5) {
} else {
__pyx_t_2 = __pyx_t_5;
goto __pyx_L5_bool_binop_done;
}
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_mstate_global->__pyx_n_u_c_contiguous); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2065, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 2065, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_6 = (!__pyx_t_5);
__pyx_t_2 = __pyx_t_6;
__pyx_L5_bool_binop_done:;
if (unlikely(__pyx_t_2)) {
/* … */
}
+02066: raise ValueError(
__pyx_t_7 = NULL;
__pyx_t_8 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_memoryview_BINARY_values_must_be};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2066, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 2066, __pyx_L1_error)
02067: 'memoryview BINARY values must be C-contiguous with '
02068: 'one-byte items.')
+02069: PyObject_GetBuffer(value, &view, PyBUF_SIMPLE)
__pyx_t_9 = PyObject_GetBuffer(__pyx_v_value, (&__pyx_v_view), PyBUF_SIMPLE); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 2069, __pyx_L1_error)
+02070: release_view = True
__pyx_v_release_view = 1;
+02071: data = <const uint8_t*>view.buf
__pyx_v_data = ((uint8_t const *)__pyx_v_view.buf);
+02072: data_len = <size_t>view.len
__pyx_v_data_len = ((size_t)__pyx_v_view.len); } __pyx_L3:;
+02073: try:
/*try:*/ {
+02074: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_10 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2074, __pyx_L8_error) __pyx_t_1 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_10, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2074, __pyx_L8_error)
+02075: if not line_sender_buffer_column_binary(
__pyx_t_2 = (!line_sender_buffer_column_binary(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_data, __pyx_v_data_len, (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
}
02076: self._impl, c_name, data, data_len, &err):
+02077: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2077, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 2077, __pyx_L8_error)
02078: finally:
+02079: if release_view:
/*finally:*/ {
/*normal exit:*/{
if (__pyx_v_release_view) {
/* … */
}
goto __pyx_L9;
}
__pyx_L8_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18);
if ( unlikely(__Pyx_GetException(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15) < 0)) __Pyx_ErrFetch(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__pyx_t_9 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_12 = __pyx_filename;
{
if (__pyx_v_release_view) {
/* … */
}
}
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ErrRestore(__pyx_t_13, __pyx_t_14, __pyx_t_15);
__pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
__pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_12;
goto __pyx_L1_error;
}
__pyx_L9:;
}
+02080: PyBuffer_Release(&view)
PyBuffer_Release((&__pyx_v_view)); /* … */ PyBuffer_Release((&__pyx_v_view));
02081:
+02082: cdef inline void_int _column_uuid(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_uuid(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
PyObject *__pyx_v_be_bytes = 0;
char *__pyx_v_be;
uint64_t __pyx_v_hi_raw;
uint64_t __pyx_v_lo_raw;
uint64_t __pyx_v_hi;
uint64_t __pyx_v_lo;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client.Buffer._column_uuid", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_be_bytes);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
02083: self, str name, object value) except -1:
+02084: self._require_qwp_column('UUID')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__require_qwp_column(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_UUID); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2084, __pyx_L1_error)
+02085: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
02086: cdef line_sender_column_name c_name
02087: # Reading `value.int` runs Python code: `UUID` accepts subclasses and
02088: # a subclass may define `int` as a property. That code can recycle
02089: # the string arena an encoded column name borrows from, so the value
02090: # is reduced to C scalars first and the name is encoded after.
02091: #
02092: # `int.to_bytes` is called unbound, so a replaced `UUID.int`
02093: # cannot narrow the result: it is always the 16 bytes
02094: # `UUID.bytes` would give, in one C-implemented call rather than
02095: # the two Python integers a mask and a shift would allocate.
+02096: cdef bytes be_bytes = _INT_TO_BYTES(value.int, 16, 'big')
__pyx_t_3 = NULL; __Pyx_INCREF(__pyx_v_7questdb_7_client__INT_TO_BYTES); __pyx_t_4 = __pyx_v_7questdb_7_client__INT_TO_BYTES; __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_mstate_global->__pyx_n_u_int); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2096, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[4] = {__pyx_t_3, __pyx_t_5, __pyx_mstate_global->__pyx_int_16, __pyx_mstate_global->__pyx_n_u_big}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_6, (4-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2096, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } if (!(likely(PyBytes_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_2))) __PYX_ERR(0, 2096, __pyx_L1_error) __pyx_v_be_bytes = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0;
+02097: cdef char* be = PyBytes_AsString(be_bytes)
__pyx_t_7 = PyBytes_AsString(__pyx_v_be_bytes); if (unlikely(__pyx_t_7 == ((void *)NULL))) __PYX_ERR(0, 2097, __pyx_L1_error) __pyx_v_be = __pyx_t_7;
02098: cdef uint64_t hi_raw
02099: cdef uint64_t lo_raw
+02100: memcpy(&hi_raw, be, 8)
(void)(memcpy((&__pyx_v_hi_raw), __pyx_v_be, 8));
+02101: memcpy(&lo_raw, be + 8, 8)
(void)(memcpy((&__pyx_v_lo_raw), (__pyx_v_be + 8), 8));
+02102: cdef uint64_t hi = bswap64(hi_raw)
__pyx_v_hi = __pyx_f_7questdb_7_client_bswap64(__pyx_v_hi_raw);
+02103: cdef uint64_t lo = bswap64(lo_raw)
__pyx_v_lo = __pyx_f_7questdb_7_client_bswap64(__pyx_v_lo_raw);
+02104: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2104, __pyx_L1_error) __pyx_t_1 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_8, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2104, __pyx_L1_error)
+02105: if not line_sender_buffer_column_uuid(
__pyx_t_9 = (!line_sender_buffer_column_uuid(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_lo, __pyx_v_hi, (&__pyx_v_err)));
if (unlikely(__pyx_t_9)) {
/* … */
}
02106: self._impl, c_name, lo, hi, &err):
+02107: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2107, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 2107, __pyx_L1_error)
02108:
+02109: cdef inline void_int _column_ipv4(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_ipv4(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
uint32_t __pyx_v_bits;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Buffer._column_ipv4", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
02110: self, str name, object value) except -1:
+02111: self._require_qwp_column('IPV4')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__require_qwp_column(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_IPV4); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2111, __pyx_L1_error)
+02112: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
02113: cdef line_sender_column_name c_name
02114: # `IPv4Address.__int__` is pure Python and can recycle the string
02115: # arena an encoded column name borrows from, so the value is reduced
02116: # to a C scalar first and the name is encoded after.
+02117: cdef uint32_t bits = <uint32_t>int(value)
__pyx_t_2 = __Pyx_PyNumber_Int(__pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2117, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyLong_As_uint32_t(__pyx_t_2); if (unlikely((__pyx_t_3 == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2117, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_bits = ((uint32_t)__pyx_t_3);
+02118: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_4 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2118, __pyx_L1_error) __pyx_t_1 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_4, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2118, __pyx_L1_error)
+02119: if not line_sender_buffer_column_ipv4(
__pyx_t_5 = (!line_sender_buffer_column_ipv4(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_bits, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
02120: self._impl, c_name, bits, &err):
+02121: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2121, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 2121, __pyx_L1_error)
02122:
+02123: cdef inline void_int _column_char(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_char(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, struct __pyx_obj_7questdb_7_client_Char *__pyx_v_value) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Buffer._column_char", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
02124: self, str name, Char value) except -1:
+02125: self._require_qwp_column('CHAR')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__require_qwp_column(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_CHAR); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2125, __pyx_L1_error)
+02126: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
02127: cdef line_sender_column_name c_name
+02128: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2128, __pyx_L1_error) __pyx_t_1 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_2, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2128, __pyx_L1_error)
+02129: if not line_sender_buffer_column_char(
__pyx_t_3 = (!line_sender_buffer_column_char(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_value->_value, (&__pyx_v_err)));
if (unlikely(__pyx_t_3)) {
/* … */
}
02130: self._impl, c_name, value._value, &err):
+02131: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2131, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 2131, __pyx_L1_error)
02132:
+02133: cdef inline void_int _column_date_millis(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_date_millis(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, struct __pyx_obj_7questdb_7_client_DateMillis *__pyx_v_value) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Buffer._column_date_millis", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
02134: self, str name, DateMillis value) except -1:
+02135: self._require_qwp_column('DATE')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__require_qwp_column(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_DATE); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2135, __pyx_L1_error)
+02136: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
02137: cdef line_sender_column_name c_name
+02138: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2138, __pyx_L1_error) __pyx_t_1 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_2, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2138, __pyx_L1_error)
+02139: if not line_sender_buffer_column_date(
__pyx_t_3 = (!line_sender_buffer_column_date(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_value->_value, (&__pyx_v_err)));
if (unlikely(__pyx_t_3)) {
/* … */
}
02140: self._impl, c_name, value._value, &err):
+02141: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2141, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 2141, __pyx_L1_error)
02142:
+02143: cdef inline void_int _column_long256(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_long256(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, struct __pyx_obj_7questdb_7_client_Long256 *__pyx_v_value) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client.Buffer._column_long256", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
02144: self, str name, Long256 value) except -1:
+02145: self._require_qwp_column('LONG256')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__require_qwp_column(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_LONG256); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2145, __pyx_L1_error)
+02146: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
02147: cdef line_sender_column_name c_name
+02148: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2148, __pyx_L1_error) __pyx_t_1 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_2, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2148, __pyx_L1_error)
+02149: if not line_sender_buffer_column_long256(
__pyx_t_5 = (!line_sender_buffer_column_long256(__pyx_v_self->_impl, __pyx_v_c_name, ((uint8_t const *)__pyx_t_4), (&__pyx_v_err)));
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(__pyx_t_5)) {
/* … */
}
02150: self._impl, c_name,
+02151: <const uint8_t*>PyBytes_AsString(value._bytes), &err):
__pyx_t_3 = __pyx_v_value->_bytes; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = PyBytes_AsString(__pyx_t_3); if (unlikely(__pyx_t_4 == ((void *)NULL))) __PYX_ERR(0, 2151, __pyx_L1_error)
+02152: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2152, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 2152, __pyx_L1_error)
02153:
+02154: cdef inline void_int _column_geohash(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_geohash(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, struct __pyx_obj_7questdb_7_client_Geohash *__pyx_v_value) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Buffer._column_geohash", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
02155: self, str name, Geohash value) except -1:
+02156: self._require_qwp_column('GEOHASH')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__require_qwp_column(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_GEOHASH); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2156, __pyx_L1_error)
+02157: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
02158: cdef line_sender_column_name c_name
+02159: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2159, __pyx_L1_error) __pyx_t_1 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_2, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2159, __pyx_L1_error)
+02160: if not line_sender_buffer_column_geohash(
__pyx_t_3 = (!line_sender_buffer_column_geohash(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_value->_bits, __pyx_v_value->_precision, (&__pyx_v_err)));
if (unlikely(__pyx_t_3)) {
/* … */
}
02161: self._impl, c_name, value._bits, value._precision, &err):
+02162: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2162, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 2162, __pyx_L1_error)
02163:
+02164: cdef inline void_int _column_int(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_int(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
int __pyx_v_overflow;
int64_t __pyx_v_as_i64;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_AddTraceback("questdb._client.Buffer._column_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
02165: self, str name, object value) except -1:
02166: # A plain `int` goes to a LONG column, which holds 64 bits. A
02167: # wider value fits only in a LONG256 column, and the `Long256`
02168: # wrapper is what puts it there, so the error names the wrapper.
02169: # `PyLong_AsLongLongAndOverflow` sets a flag instead of raising,
02170: # which is what lets the message be written here.
02171: #
02172: # Only QWP senders have a LONG256 column. On an ILP buffer there
02173: # is nothing to point the user at, so the value goes straight to
02174: # `_column_i64` and the coercion to `int64_t` raises.
+02175: cdef int overflow = 0
__pyx_v_overflow = 0;
02176: cdef int64_t as_i64
+02177: if not self._qwp:
__pyx_t_1 = (!__pyx_v_self->_qwp);
if (__pyx_t_1) {
/* … */
}
+02178: return self._column_i64(name, value)
__pyx_t_2 = __Pyx_PyLong_As_int64_t(__pyx_v_value); if (unlikely((__pyx_t_2 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2178, __pyx_L1_error) __pyx_t_3 = __pyx_f_7questdb_7_client_6Buffer__column_i64(__pyx_v_self, __pyx_v_name, __pyx_t_2); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2178, __pyx_L1_error) { __pyx_r = __pyx_t_3; } goto __pyx_L0;
+02179: as_i64 = <int64_t>PyLong_AsLongLongAndOverflow(value, &overflow)
__pyx_t_4 = PyLong_AsLongLongAndOverflow(__pyx_v_value, (&__pyx_v_overflow)); if (unlikely(__pyx_t_4 == ((PY_LONG_LONG)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 2179, __pyx_L1_error) __pyx_v_as_i64 = ((int64_t)__pyx_t_4);
+02180: if overflow < 0:
__pyx_t_1 = (__pyx_v_overflow < 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+02181: raise OverflowError(
__pyx_t_6 = NULL;
+02182: f'Bad column {name!r}: integer is below the minimum for a '
__pyx_t_7 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2182, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_8[1] = __pyx_t_7; __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u_integer_is_below_the_minimum_fo; __pyx_t_9 = 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, 2182, __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, 2181, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __PYX_ERR(0, 2181, __pyx_L1_error)
02183: f'LONG column (-2**63). LONG256 is unsigned and cannot '
02184: f'store negative values.')
+02185: if overflow > 0:
__pyx_t_1 = (__pyx_v_overflow > 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+02186: raise OverflowError(
__pyx_t_11 = NULL;
+02187: f'Bad column {name!r}: integer out of range for a LONG '
__pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2187, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_8[1] = __pyx_t_6; __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u_integer_out_of_range_for_a_LONG; __pyx_t_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, 2187, __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, 2186, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __PYX_ERR(0, 2186, __pyx_L1_error)
02188: f'column (-2**63 .. 2**63-1). Wrap it in `Long256(...)` '
02189: f'to store it in a LONG256 column.')
+02190: return self._column_i64(name, as_i64)
__pyx_t_3 = __pyx_f_7questdb_7_client_6Buffer__column_i64(__pyx_v_self, __pyx_v_name, __pyx_v_as_i64); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2190, __pyx_L1_error)
{
__pyx_r = __pyx_t_3;
}
goto __pyx_L0;
02191:
+02192: cdef inline void_int _column_i64(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_i64(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, int64_t __pyx_v_value) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Buffer._column_i64", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
02193: self, str name, int64_t value) except -1:
+02194: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
02195: cdef line_sender_column_name c_name
+02196: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2196, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_1, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2196, __pyx_L1_error)
+02197: if not line_sender_buffer_column_i64(self._impl, c_name, value, &err):
__pyx_t_3 = (!line_sender_buffer_column_i64(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_value, (&__pyx_v_err)));
if (unlikely(__pyx_t_3)) {
/* … */
}
+02198: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2198, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 2198, __pyx_L1_error)
+02199: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
02200:
+02201: cdef inline void_int _column_f64(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_f64(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, double __pyx_v_value) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Buffer._column_f64", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
02202: self, str name, double value) except -1:
+02203: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
02204: cdef line_sender_column_name c_name
+02205: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2205, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_1, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2205, __pyx_L1_error)
+02206: if not line_sender_buffer_column_f64(self._impl, c_name, value, &err):
__pyx_t_3 = (!line_sender_buffer_column_f64(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_value, (&__pyx_v_err)));
if (unlikely(__pyx_t_3)) {
/* … */
}
+02207: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2207, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 2207, __pyx_L1_error)
02208:
+02209: cdef inline void_int _column_str(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_str(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
struct line_sender_utf8 __pyx_v_c_value;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Buffer._column_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
02210: self, str name, str value) except -1:
+02211: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
02212: cdef line_sender_column_name c_name
02213: cdef line_sender_utf8 c_value
02214: # The name is encoded first because `_cleared_b()` recycles the
02215: # arena; the value is appended after it, and an append leaves
02216: # every pointer already handed out where it is.
+02217: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2217, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_1, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2217, __pyx_L1_error)
+02218: str_to_utf8(self._b, <PyObject*>value, &c_value)
__pyx_t_2 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_self->_b, ((PyObject *)__pyx_v_value), (&__pyx_v_c_value)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2218, __pyx_L1_error)
+02219: if not line_sender_buffer_column_str(self._impl, c_name, c_value, &err):
__pyx_t_3 = (!line_sender_buffer_column_str(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_c_value, (&__pyx_v_err)));
if (unlikely(__pyx_t_3)) {
/* … */
}
+02220: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2220, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 2220, __pyx_L1_error)
02221:
+02222: cdef inline void_int _column_ts_micros(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_ts_micros(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, struct __pyx_obj_7questdb_7_client_TimestampMicros *__pyx_v_ts) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Buffer._column_ts_micros", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
02223: self, str name, TimestampMicros ts) except -1:
+02224: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
02225: cdef line_sender_column_name c_name
+02226: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2226, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_1, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2226, __pyx_L1_error)
+02227: if not line_sender_buffer_column_ts_micros(self._impl, c_name, ts._value, &err):
__pyx_t_3 = (!line_sender_buffer_column_ts_micros(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_ts->_value, (&__pyx_v_err)));
if (unlikely(__pyx_t_3)) {
/* … */
}
+02228: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2228, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 2228, __pyx_L1_error)
02229:
+02230: cdef inline void_int _column_ts_nanos(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_ts_nanos(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, struct __pyx_obj_7questdb_7_client_TimestampNanos *__pyx_v_ts) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Buffer._column_ts_nanos", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
02231: self, str name, TimestampNanos ts) except -1:
+02232: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
02233: cdef line_sender_column_name c_name
+02234: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2234, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_1, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2234, __pyx_L1_error)
+02235: if not line_sender_buffer_column_ts_nanos(self._impl, c_name, ts._value, &err):
__pyx_t_3 = (!line_sender_buffer_column_ts_nanos(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_ts->_value, (&__pyx_v_err)));
if (unlikely(__pyx_t_3)) {
/* … */
}
+02236: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2236, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 2236, __pyx_L1_error)
02237:
+02238: cdef inline void_int _column_numpy(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_numpy(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyArrayObject *__pyx_v_arr) {
size_t __pyx_v_rank;
double const *__pyx_v_data_ptr;
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.Buffer._column_numpy", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
02239: self, str name, cnp.ndarray arr) except -1:
+02240: if cnp.PyArray_TYPE(arr) != cnp.NPY_FLOAT64:
__pyx_t_1 = (PyArray_TYPE(__pyx_v_arr) != NPY_FLOAT64);
if (unlikely(__pyx_t_1)) {
/* … */
}
+02241: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2241, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+02242: QuestDBErrorCode.ArrayError,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2242, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ArrayError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2242, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+02243: f'Only float64 numpy arrays are supported, got dtype: {arr.dtype}')
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_arr), __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2243, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2243, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_Only_float64_numpy_arrays_are_su, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2243, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_5}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2241, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 2241, __pyx_L1_error)
02244: cdef:
+02245: size_t rank = cnp.PyArray_NDIM(arr)
__pyx_v_rank = PyArray_NDIM(__pyx_v_arr);
+02246: const double * data_ptr = <const double*> cnp.PyArray_DATA(arr)
__pyx_v_data_ptr = ((double const *)PyArray_DATA(__pyx_v_arr));
+02247: line_sender_error * err = NULL
__pyx_v_err = NULL;
02248: line_sender_column_name c_name
02249:
+02250: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_9 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2250, __pyx_L1_error) __pyx_t_10 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_9, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2250, __pyx_L1_error)
02251:
+02252: if cnp.PyArray_FLAGS(arr) & cnp.NPY_ARRAY_C_CONTIGUOUS != 0:
__pyx_t_1 = ((PyArray_FLAGS(__pyx_v_arr) & NPY_ARRAY_C_CONTIGUOUS) != 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L4;
}
+02253: if not line_sender_buffer_column_f64_arr_c_major(
__pyx_t_1 = (!line_sender_buffer_column_f64_arr_c_major(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_rank, ((size_t const *)PyArray_DIMS(__pyx_v_arr)), __pyx_v_data_ptr, PyArray_SIZE(__pyx_v_arr), (&__pyx_v_err))); if (unlikely(__pyx_t_1)) { /* … */ }
02254: self._impl,
02255: c_name,
02256: rank,
02257: <const size_t*> cnp.PyArray_DIMS(arr),
02258: data_ptr,
02259: cnp.PyArray_SIZE(arr),
02260: &err):
+02261: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2261, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 2261, __pyx_L1_error)
02262: else:
+02263: if not line_sender_buffer_column_f64_arr_byte_strides(
/*else*/ {
/* … */
__pyx_t_1 = (!line_sender_buffer_column_f64_arr_byte_strides(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_rank, ((size_t const *)PyArray_DIMS(__pyx_v_arr)), ((Py_ssize_t const *)PyArray_STRIDES(__pyx_v_arr)), __pyx_v_data_ptr, PyArray_SIZE(__pyx_v_arr), (&__pyx_v_err)));
/* … */
if (unlikely(__pyx_t_1)) {
/* … */
}
}
__pyx_L4:;
02264: self._impl,
02265: c_name,
02266: rank,
02267: <const size_t*> cnp.PyArray_DIMS(arr),
02268: <const ssize_t*> cnp.PyArray_STRIDES(arr), # N.B.: Strides expressed as byte jumps
02269: data_ptr,
02270: cnp.PyArray_SIZE(arr),
02271: &err):
+02272: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2272, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 2272, __pyx_L1_error)
02273:
+02274: cdef inline void_int _column_dt(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_dt(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyDateTime_DateTime *__pyx_v_dt) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
int64_t __pyx_v_micros;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client.Buffer._column_dt", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
02275: self, str name, cp_datetime dt) except -1:
+02276: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
02277: cdef line_sender_column_name c_name
02278: # We limit ourselves to micros, since this is the maxium precision
02279: # exposed by the datetime library in Python.
02280: #
02281: # `datetime_to_micros` runs Python: subtracting two aware datetimes
02282: # calls the caller's `tzinfo.utcoffset()`, and a naive one reaches
02283: # `warnings.warn`. That code can recycle the string arena an encoded
02284: # column name borrows from, so the value is reduced to a C scalar
02285: # first and the name is encoded after.
+02286: cdef int64_t micros = datetime_to_micros(dt)
__pyx_t_1 = __pyx_f_7questdb_7_client_datetime_to_micros(__pyx_v_dt); if (unlikely(__pyx_t_1 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 2286, __pyx_L1_error) __pyx_v_micros = __pyx_t_1;
+02287: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2287, __pyx_L1_error) __pyx_t_3 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_2, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2287, __pyx_L1_error)
+02288: if not line_sender_buffer_column_ts_micros(
__pyx_t_4 = (!line_sender_buffer_column_ts_micros(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_micros, (&__pyx_v_err)));
if (unlikely(__pyx_t_4)) {
/* … */
}
02289: self._impl, c_name, micros, &err):
+02290: raise c_err_to_py(err)
__pyx_t_5 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2290, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __PYX_ERR(0, 2290, __pyx_L1_error)
02291:
+02292: cdef inline void_int _column(self, str name, object value) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Buffer._column", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
02293: # An encoded column name borrows storage that `Buffer.clear()`
02294: # recycles, so it stays valid only while no Python code runs. Every
02295: # branch therefore takes the name as a `str` and encodes it itself,
02296: # immediately before its own native call and after any conversion
02297: # that runs the caller's Python. The property that keeps this true
02298: # is visible in the signatures: no `_column_*` helper accepts a
02299: # `line_sender_column_name`, and
02300: # `test_no_column_helper_takes_a_pre_encoded_name` holds it there.
+02301: if PyBool_Check(<PyObject*>value):
__pyx_t_1 = PyBool_Check(((PyObject *)__pyx_v_value));
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+02302: self._column_bool(name, value)
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2302, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__column_bool(__pyx_v_self, __pyx_v_name, __pyx_t_1); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2302, __pyx_L1_error)
+02303: elif PyLong_CheckExact(<PyObject*>value):
__pyx_t_1 = PyLong_CheckExact(((PyObject *)__pyx_v_value));
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+02304: self._column_int(name, value)
__pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__column_int(__pyx_v_self, __pyx_v_name, __pyx_v_value); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2304, __pyx_L1_error)
+02305: elif PyFloat_CheckExact(<PyObject*>value):
__pyx_t_1 = PyFloat_CheckExact(((PyObject *)__pyx_v_value));
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+02306: self._column_f64(name, value)
__pyx_t_3 = __Pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_3 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2306, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__column_f64(__pyx_v_self, __pyx_v_name, __pyx_t_3); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2306, __pyx_L1_error)
+02307: elif PyUnicode_CheckExact(<PyObject*>value):
__pyx_t_1 = PyUnicode_CheckExact(((PyObject *)__pyx_v_value));
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+02308: self._column_str(name, value)
__pyx_t_4 = __pyx_v_value;
__Pyx_INCREF(__pyx_t_4);
if (!(likely(PyUnicode_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_4))) __PYX_ERR(0, 2308, __pyx_L1_error)
__pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__column_str(__pyx_v_self, __pyx_v_name, ((PyObject*)__pyx_t_4)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2308, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+02309: elif isinstance(value, TimestampMicros):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+02310: self._column_ts_micros(name, value)
if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros))))) __PYX_ERR(0, 2310, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__column_ts_micros(__pyx_v_self, __pyx_v_name, ((struct __pyx_obj_7questdb_7_client_TimestampMicros *)__pyx_v_value)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2310, __pyx_L1_error)
+02311: elif isinstance(value, TimestampNanos):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+02312: self._column_ts_nanos(name, value)
if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos))))) __PYX_ERR(0, 2312, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__column_ts_nanos(__pyx_v_self, __pyx_v_name, ((struct __pyx_obj_7questdb_7_client_TimestampNanos *)__pyx_v_value)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2312, __pyx_L1_error)
+02313: elif PyArray_CheckExact(<PyObject *> value):
__pyx_t_1 = PyArray_CheckExact(((PyObject *)__pyx_v_value));
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+02314: self._column_numpy(name, value)
if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 2314, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__column_numpy(__pyx_v_self, __pyx_v_name, ((PyArrayObject *)__pyx_v_value)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2314, __pyx_L1_error)
+02315: elif isinstance(value, cp_datetime):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+02316: self._column_dt(name, value)
if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(0, 2316, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__column_dt(__pyx_v_self, __pyx_v_name, ((PyDateTime_DateTime *)__pyx_v_value)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2316, __pyx_L1_error)
+02317: elif _is_decimal(value):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_decimal(__pyx_v_value);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+02318: self._column_decimal(name, value)
__pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__column_decimal(__pyx_v_self, __pyx_v_name, __pyx_v_value); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2318, __pyx_L1_error)
02319: else:
+02320: self._column_qwp_only(name, value)
/*else*/ {
__pyx_t_2 = ((struct __pyx_vtabstruct_7questdb_7_client_Buffer *)__pyx_v_self->__pyx_vtab)->_column_qwp_only(__pyx_v_self, __pyx_v_name, __pyx_v_value); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2320, __pyx_L1_error)
}
__pyx_L3:;
02321:
+02322: cdef void_int _column_qwp_only(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_qwp_only(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
PyObject *__pyx_v_valid = NULL;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_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;
}
02323: self, str name, object value) except -1:
02324: # The QWP-only cell types and the unsupported-type error live
02325: # out of line, and deliberately not `inline`. `_column` dispatches
02326: # every cell of every row, and with these branches out of it the
02327: # common bool / int / float / str / datetime cells run through a
02328: # short function.
02329: #
02330: # Within this function the four wrapper classes come before
02331: # `uuid.UUID` and the IPV4 test. They are the cheapest checks in
02332: # the chain -- an exact type test against a cdef class -- and
02333: # none of them can be a UUID or an address, so nothing becomes
02334: # reachable only through the more expensive pair.
+02335: if isinstance(value, (bytes, bytearray, memoryview)):
__pyx_t_2 = PyBytes_Check(__pyx_v_value);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = PyByteArray_Check(__pyx_v_value);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = PyMemoryView_Check(__pyx_v_value);
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+02336: self._column_binary(name, value)
__pyx_t_3 = __pyx_f_7questdb_7_client_6Buffer__column_binary(__pyx_v_self, __pyx_v_name, __pyx_v_value); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2336, __pyx_L1_error)
+02337: elif isinstance(value, Char):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Char);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+02338: self._column_char(name, value)
if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Char))))) __PYX_ERR(0, 2338, __pyx_L1_error) __pyx_t_3 = __pyx_f_7questdb_7_client_6Buffer__column_char(__pyx_v_self, __pyx_v_name, ((struct __pyx_obj_7questdb_7_client_Char *)__pyx_v_value)); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2338, __pyx_L1_error)
+02339: elif isinstance(value, DateMillis):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+02340: self._column_date_millis(name, value)
if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis))))) __PYX_ERR(0, 2340, __pyx_L1_error) __pyx_t_3 = __pyx_f_7questdb_7_client_6Buffer__column_date_millis(__pyx_v_self, __pyx_v_name, ((struct __pyx_obj_7questdb_7_client_DateMillis *)__pyx_v_value)); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2340, __pyx_L1_error)
+02341: elif isinstance(value, Long256):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Long256);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+02342: self._column_long256(name, value)
if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Long256))))) __PYX_ERR(0, 2342, __pyx_L1_error) __pyx_t_3 = __pyx_f_7questdb_7_client_6Buffer__column_long256(__pyx_v_self, __pyx_v_name, ((struct __pyx_obj_7questdb_7_client_Long256 *)__pyx_v_value)); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2342, __pyx_L1_error)
+02343: elif isinstance(value, Geohash):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Geohash);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+02344: self._column_geohash(name, value)
if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Geohash))))) __PYX_ERR(0, 2344, __pyx_L1_error) __pyx_t_3 = __pyx_f_7questdb_7_client_6Buffer__column_geohash(__pyx_v_self, __pyx_v_name, ((struct __pyx_obj_7questdb_7_client_Geohash *)__pyx_v_value)); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2344, __pyx_L1_error)
+02345: elif type(value) is _UUID or isinstance(value, _UUID):
__pyx_t_2 = (((PyObject *)Py_TYPE(__pyx_v_value)) == __pyx_v_7questdb_7_client__UUID);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L7_bool_binop_done;
}
__pyx_t_4 = __pyx_v_7questdb_7_client__UUID;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_2 = PyObject_IsInstance(__pyx_v_value, __pyx_t_4); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2345, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_1 = __pyx_t_2;
__pyx_L7_bool_binop_done:;
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+02346: self._column_uuid(name, value)
__pyx_t_3 = __pyx_f_7questdb_7_client_6Buffer__column_uuid(__pyx_v_self, __pyx_v_name, __pyx_v_value); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2346, __pyx_L1_error)
+02347: elif _is_ipv4_address(value):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_ipv4_address(__pyx_v_value); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2347, __pyx_L1_error) if (__pyx_t_1) { /* … */ goto __pyx_L3; }
+02348: self._column_ipv4(name, value)
__pyx_t_3 = __pyx_f_7questdb_7_client_6Buffer__column_ipv4(__pyx_v_self, __pyx_v_name, __pyx_v_value); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2348, __pyx_L1_error)
02349: else:
+02350: if isinstance(value, _IPV6_ADDRESS):
/*else*/ {
__pyx_t_4 = __pyx_v_7questdb_7_client__IPV6_ADDRESS;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_1 = PyObject_IsInstance(__pyx_v_value, __pyx_t_4); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2350, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(__pyx_t_1)) {
/* … */
}
+02351: raise TypeError(
__pyx_t_5 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_IPv6_is_not_supported_QuestDB_ha};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2351, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 2351, __pyx_L1_error)
02352: 'IPv6 is not supported; QuestDB has no IPv6 column type.')
+02353: if isinstance(value, _IPV4_INTERFACE):
__pyx_t_4 = __pyx_v_7questdb_7_client__IPV4_INTERFACE;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_1 = PyObject_IsInstance(__pyx_v_value, __pyx_t_4); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2353, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(__pyx_t_1)) {
/* … */
}
02354: # It subclasses IPv4Address, so the list below would
02355: # otherwise appear to contain the thing just rejected.
+02356: raise TypeError(
__pyx_t_5 = NULL;
02357: _IPV4_INTERFACE_REASON
+02358: + ' Pass its address instead, as `value.ip`.')
__pyx_t_7 = __Pyx_PyUnicode_ConcatSafe(__pyx_v_7questdb_7_client__IPV4_INTERFACE_REASON, __pyx_mstate_global->__pyx_kp_u_Pass_its_address_instead_as_val); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2358, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_7}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2356, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 2356, __pyx_L1_error)
+02359: valid = ', '.join((
__pyx_t_4 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__28, __pyx_mstate_global->__pyx_tuple[39]); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2359, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_valid = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0;
+02360: 'bool',
{
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[39] = __Pyx_PyTuple_FromArray(__pyx_temp, 18); if (unlikely(!__pyx_mstate_global->__pyx_tuple[39])) __PYX_ERR(0, 2360, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[39]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[39]);
02361: 'int',
02362: 'float',
02363: 'str',
02364: 'TimestampMicros',
02365: 'TimestampNanos',
02366: 'datetime.datetime',
02367: 'numpy.ndarray',
02368: 'decimal.Decimal',
02369: 'bytes',
02370: 'bytearray',
02371: 'memoryview',
02372: 'uuid.UUID',
02373: 'ipaddress.IPv4Address',
02374: 'Char',
02375: 'DateMillis',
02376: 'Long256',
02377: 'Geohash'))
+02378: raise TypeError(
__pyx_t_7 = NULL;
+02379: f'Unsupported type: {_fqn(type(value))}. Must be one of: {valid}')
__pyx_t_5 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_value)))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2379, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2379, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_valid); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2379, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_9[0] = __pyx_mstate_global->__pyx_kp_u_Unsupported_type; __pyx_t_9[1] = __pyx_t_8; __pyx_t_9[2] = __pyx_mstate_global->__pyx_kp_u_Must_be_one_of; __pyx_t_9[3] = __pyx_t_5; __pyx_t_10 = 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, 2379, __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, 2378, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 2378, __pyx_L1_error) } __pyx_L3:;
02380:
+02381: cdef inline void_int _may_trigger_row_complete(self) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__may_trigger_row_complete(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
PyObject *__pyx_v_sender;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_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;
}
+02382: cdef PyObject* sender = NULL
__pyx_v_sender = NULL;
+02383: 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, 2383, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+02384: 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) {
/* … */
}
+02385: try:
/*try:*/ {
+02386: may_flush_on_row_complete(
__pyx_t_3 = __pyx_f_7questdb_7_client_may_flush_on_row_complete(__pyx_v_self, ((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_sender)); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2386, __pyx_L6_error)
}
02387: self, <Sender><object>sender)
02388: finally:
+02389: Py_XDECREF(sender)
/*finally:*/ {
/*normal exit:*/{
Py_XDECREF(__pyx_v_sender);
goto __pyx_L7;
}
__pyx_L6_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_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:;
}
02390:
+02391: cdef inline void_int _at_ts_us(self, TimestampMicros ts) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at_ts_us(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, struct __pyx_obj_7questdb_7_client_TimestampMicros *__pyx_v_ts) {
struct line_sender_error *__pyx_v_err;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Buffer._at_ts_us", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+02392: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+02393: if not line_sender_buffer_at_micros(self._impl, ts._value, &err):
__pyx_t_1 = (!line_sender_buffer_at_micros(__pyx_v_self->_impl, __pyx_v_ts->_value, (&__pyx_v_err)));
if (unlikely(__pyx_t_1)) {
/* … */
}
+02394: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2394, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 2394, __pyx_L1_error)
02395:
+02396: cdef inline void_int _at_ts_ns(self, TimestampNanos ts) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at_ts_ns(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, struct __pyx_obj_7questdb_7_client_TimestampNanos *__pyx_v_ts) {
struct line_sender_error *__pyx_v_err;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Buffer._at_ts_ns", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+02397: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+02398: if not line_sender_buffer_at_nanos(self._impl, ts._value, &err):
__pyx_t_1 = (!line_sender_buffer_at_nanos(__pyx_v_self->_impl, __pyx_v_ts->_value, (&__pyx_v_err)));
if (unlikely(__pyx_t_1)) {
/* … */
}
+02399: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2399, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 2399, __pyx_L1_error)
02400:
+02401: cdef inline void_int _at_dt(self, cp_datetime dt) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at_dt(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyDateTime_DateTime *__pyx_v_dt) {
int64_t __pyx_v_value;
struct line_sender_error *__pyx_v_err;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client.Buffer._at_dt", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+02402: cdef int64_t value = datetime_to_micros(dt)
__pyx_t_1 = __pyx_f_7questdb_7_client_datetime_to_micros(__pyx_v_dt); if (unlikely(__pyx_t_1 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 2402, __pyx_L1_error) __pyx_v_value = __pyx_t_1;
+02403: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+02404: if not line_sender_buffer_at_micros(self._impl, value, &err):
__pyx_t_2 = (!line_sender_buffer_at_micros(__pyx_v_self->_impl, __pyx_v_value, (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
+02405: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2405, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 2405, __pyx_L1_error)
02406:
+02407: cdef inline void_int _at_now(self) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at_now(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
struct line_sender_error *__pyx_v_err;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Buffer._at_now", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+02408: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+02409: if not line_sender_buffer_at_now(self._impl, &err):
__pyx_t_1 = (!line_sender_buffer_at_now(__pyx_v_self->_impl, (&__pyx_v_err)));
if (unlikely(__pyx_t_1)) {
/* … */
}
+02410: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2410, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 2410, __pyx_L1_error)
02411:
+02412: cdef inline void_int _at(self, object ts) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_ts) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_AddTraceback("questdb._client.Buffer._at", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+02413: if ts is None:
__pyx_t_1 = (__pyx_v_ts == Py_None);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+02414: self._at_now()
__pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__at_now(__pyx_v_self); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2414, __pyx_L1_error)
+02415: elif isinstance(ts, TimestampMicros):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_ts, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+02416: self._at_ts_us(ts)
if (!(likely(((__pyx_v_ts) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_ts, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros))))) __PYX_ERR(0, 2416, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__at_ts_us(__pyx_v_self, ((struct __pyx_obj_7questdb_7_client_TimestampMicros *)__pyx_v_ts)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2416, __pyx_L1_error)
+02417: elif isinstance(ts, TimestampNanos):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_ts, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+02418: self._at_ts_ns(ts)
if (!(likely(((__pyx_v_ts) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_ts, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos))))) __PYX_ERR(0, 2418, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__at_ts_ns(__pyx_v_self, ((struct __pyx_obj_7questdb_7_client_TimestampNanos *)__pyx_v_ts)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2418, __pyx_L1_error)
+02419: elif isinstance(ts, cp_datetime):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_ts, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime);
if (likely(__pyx_t_1)) {
/* … */
goto __pyx_L3;
}
+02420: self._at_dt(ts)
if (!(likely(((__pyx_v_ts) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_ts, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(0, 2420, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__at_dt(__pyx_v_self, ((PyDateTime_DateTime *)__pyx_v_ts)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2420, __pyx_L1_error)
02421: else:
+02422: raise TypeError(
/*else*/ {
__pyx_t_4 = NULL;
+02423: f'Unsupported type: {_fqn(type(ts))}. Must be one of: ' +
__pyx_t_5 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_ts)))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2423, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyUnicode_Unicode(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2423, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7[0] = __pyx_mstate_global->__pyx_kp_u_Unsupported_type; __pyx_t_7[1] = __pyx_t_6; __pyx_t_7[2] = __pyx_mstate_global->__pyx_kp_u_Must_be_one_of_TimestampNanos_d; __pyx_t_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, 2423, __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, 2422, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 2422, __pyx_L1_error) } __pyx_L3:;
02424: 'TimestampNanos, datetime, None')
02425:
+02426: cdef void_int _row(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__row(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, int __pyx_v_allow_auto_flush, PyObject *__pyx_v_table_name, struct __pyx_opt_args_7questdb_7_client_6Buffer__row *__pyx_optional_args) {
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_AddTraceback("questdb._client.Buffer._row", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_name);
__Pyx_XDECREF(__pyx_v_value);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
struct __pyx_opt_args_7questdb_7_client_6Buffer__row {
int __pyx_n;
PyObject *symbols;
PyObject *columns;
PyObject *at;
int keep_marker;
};
02427: self,
02428: bint allow_auto_flush,
02429: str table_name,
+02430: dict symbols=None,
PyObject *__pyx_v_symbols = ((PyObject*)Py_None);
+02431: dict columns=None,
PyObject *__pyx_v_columns = ((PyObject*)Py_None);
+02432: object at=None,
PyObject *__pyx_v_at = ((PyObject *)Py_None);
+02433: bint keep_marker=False) except -1:
int __pyx_v_keep_marker = ((int)0);
int __pyx_v_wrote_fields;
PyObject *__pyx_v_name = NULL;
PyObject *__pyx_v_value = NULL;
__pyx_t_7questdb_7_client_void_int __pyx_r;
if (__pyx_optional_args) {
if (__pyx_optional_args->__pyx_n > 0) {
__pyx_v_symbols = __pyx_optional_args->symbols;
if (__pyx_optional_args->__pyx_n > 1) {
__pyx_v_columns = __pyx_optional_args->columns;
if (__pyx_optional_args->__pyx_n > 2) {
__pyx_v_at = __pyx_optional_args->at;
if (__pyx_optional_args->__pyx_n > 3) {
__pyx_v_keep_marker = __pyx_optional_args->keep_marker;
}
}
}
}
}
02434: """
02435: Add a row to the buffer.
02436: """
+02437: cdef bint wrote_fields = False
__pyx_v_wrote_fields = 0;
+02438: self._check_impl()
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_impl(__pyx_v_self); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2438, __pyx_L1_error)
+02439: self._set_marker()
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__set_marker(__pyx_v_self); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2439, __pyx_L1_error)
02440: # A column value whose conversion runs Python code can call back
02441: # into whatever owns this buffer. `_row_depth` is how those owners
02442: # tell "a row is part-way through" from "a rewind point is held":
02443: # `PooledSender.row` deliberately keeps the marker set across its
02444: # own flush, so `_marker_set` cannot answer that question.
+02445: self._row_depth += 1
__pyx_v_self->_row_depth = (__pyx_v_self->_row_depth + 1);
+02446: try:
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L11_try_end;
__pyx_L6_error:;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
__pyx_L8_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L4_error;
__pyx_L11_try_end:;
}
}
+02447: self._table(table_name)
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__table(__pyx_v_self, __pyx_v_table_name); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2447, __pyx_L6_error)
+02448: if symbols is not None:
__pyx_t_5 = (__pyx_v_symbols != ((PyObject*)Py_None));
if (__pyx_t_5) {
/* … */
}
+02449: for name, value in symbols.items():
__pyx_t_7 = 0;
if (unlikely(__pyx_v_symbols == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
__PYX_ERR(0, 2449, __pyx_L6_error)
}
__pyx_t_10 = __Pyx_dict_iterator(__pyx_v_symbols, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_8), (&__pyx_t_9)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2449, __pyx_L6_error)
__Pyx_GOTREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_6);
__pyx_t_6 = __pyx_t_10;
__pyx_t_10 = 0;
while (1) {
__pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_8, &__pyx_t_7, &__pyx_t_10, &__pyx_t_11, NULL, __pyx_t_9);
if (unlikely(__pyx_t_12 == 0)) break;
if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 2449, __pyx_L6_error)
__Pyx_GOTREF(__pyx_t_10);
__Pyx_GOTREF(__pyx_t_11);
__Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_10);
__pyx_t_10 = 0;
__Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_11);
__pyx_t_11 = 0;
+02450: if value is not None:
__pyx_t_5 = (__pyx_v_value != Py_None);
if (__pyx_t_5) {
/* … */
}
}
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+02451: self._symbol(name, value)
__pyx_t_11 = __pyx_v_name;
__Pyx_INCREF(__pyx_t_11);
if (!(likely(PyUnicode_CheckExact(__pyx_t_11))||((__pyx_t_11) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_11))) __PYX_ERR(0, 2451, __pyx_L6_error)
__pyx_t_10 = __pyx_v_value;
__Pyx_INCREF(__pyx_t_10);
if (!(likely(PyUnicode_CheckExact(__pyx_t_10))||((__pyx_t_10) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_10))) __PYX_ERR(0, 2451, __pyx_L6_error)
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__symbol(__pyx_v_self, ((PyObject*)__pyx_t_11), ((PyObject*)__pyx_t_10)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2451, __pyx_L6_error)
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+02452: wrote_fields = True
__pyx_v_wrote_fields = 1;
+02453: if columns is not None:
__pyx_t_5 = (__pyx_v_columns != ((PyObject*)Py_None));
if (__pyx_t_5) {
/* … */
}
+02454: for name, value in columns.items():
__pyx_t_8 = 0;
if (unlikely(__pyx_v_columns == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
__PYX_ERR(0, 2454, __pyx_L6_error)
}
__pyx_t_10 = __Pyx_dict_iterator(__pyx_v_columns, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_7), (&__pyx_t_9)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2454, __pyx_L6_error)
__Pyx_GOTREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_6);
__pyx_t_6 = __pyx_t_10;
__pyx_t_10 = 0;
while (1) {
__pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_7, &__pyx_t_8, &__pyx_t_10, &__pyx_t_11, NULL, __pyx_t_9);
if (unlikely(__pyx_t_12 == 0)) break;
if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 2454, __pyx_L6_error)
__Pyx_GOTREF(__pyx_t_10);
__Pyx_GOTREF(__pyx_t_11);
__Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_10);
__pyx_t_10 = 0;
__Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_11);
__pyx_t_11 = 0;
+02455: if value is not None:
__pyx_t_5 = (__pyx_v_value != Py_None);
if (__pyx_t_5) {
/* … */
}
}
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+02456: self._column(name, value)
__pyx_t_11 = __pyx_v_name;
__Pyx_INCREF(__pyx_t_11);
if (!(likely(PyUnicode_CheckExact(__pyx_t_11))||((__pyx_t_11) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_11))) __PYX_ERR(0, 2456, __pyx_L6_error)
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__column(__pyx_v_self, ((PyObject*)__pyx_t_11), __pyx_v_value); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2456, __pyx_L6_error)
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+02457: wrote_fields = True
__pyx_v_wrote_fields = 1;
+02458: if wrote_fields:
if (__pyx_v_wrote_fields) {
/* … */
goto __pyx_L20;
}
+02459: self._at(at if not isinstance(at, ServerTimestampType) else None)
__Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_ServerTimestampType); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2459, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_5 = PyObject_IsInstance(__pyx_v_at, __pyx_t_11); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 2459, __pyx_L6_error) __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_13 = (!__pyx_t_5); if (__pyx_t_13) { __Pyx_INCREF(__pyx_v_at); __pyx_t_6 = __pyx_v_at; } else { __Pyx_INCREF(Py_None); __pyx_t_6 = Py_None; } __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__at(__pyx_v_self, __pyx_t_6); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2459, __pyx_L6_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+02460: if not keep_marker:
__pyx_t_13 = (!__pyx_v_keep_marker);
if (__pyx_t_13) {
/* … */
}
+02461: self._clear_marker()
__pyx_t_6 = __pyx_f_7questdb_7_client_6Buffer__clear_marker(__pyx_v_self); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2461, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
02462: else:
+02463: self._rewind_to_marker()
/*else*/ {
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__rewind_to_marker(__pyx_v_self); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2463, __pyx_L6_error)
}
__pyx_L20:;
+02464: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client.Buffer._row", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_11, &__pyx_t_10) < 0) __PYX_ERR(0, 2464, __pyx_L8_except_error)
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_10);
+02465: self._rewind_after_failure()
__pyx_t_14 = __pyx_f_7questdb_7_client_6Buffer__rewind_after_failure(__pyx_v_self); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2465, __pyx_L8_except_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+02466: raise
__Pyx_GIVEREF(__pyx_t_6); __Pyx_GIVEREF(__pyx_t_11); __Pyx_XGIVEREF(__pyx_t_10); __Pyx_ErrRestoreWithState(__pyx_t_6, __pyx_t_11, __pyx_t_10); __pyx_t_6 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __PYX_ERR(0, 2466, __pyx_L8_except_error) }
02467: finally:
+02468: self._leave_row()
/*finally:*/ {
/*normal exit:*/{
__pyx_f_7questdb_7_client_6Buffer__leave_row(__pyx_v_self);
goto __pyx_L5;
}
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18);
if ( unlikely(__Pyx_GetException(&__pyx_t_4, &__pyx_t_3, &__pyx_t_2) < 0)) __Pyx_ErrFetch(&__pyx_t_4, &__pyx_t_3, &__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__pyx_t_9 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_15 = __pyx_filename;
{
__pyx_f_7questdb_7_client_6Buffer__leave_row(__pyx_v_self);
}
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_ErrRestore(__pyx_t_4, __pyx_t_3, __pyx_t_2);
__pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
__pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_15;
goto __pyx_L1_error;
}
__pyx_L5:;
}
02469: # Only a `Sender`'s own buffer has an auto-flush to trigger, and
02470: # `Sender.row` refuses a row there while another call is part-way
02471: # through the buffer, so this flush never cuts into an outer
02472: # call's work.
+02473: if wrote_fields and allow_auto_flush:
if (__pyx_v_wrote_fields) {
} else {
__pyx_t_13 = __pyx_v_wrote_fields;
goto __pyx_L27_bool_binop_done;
}
__pyx_t_13 = __pyx_v_allow_auto_flush;
__pyx_L27_bool_binop_done:;
if (__pyx_t_13) {
/* … */
}
+02474: self._may_trigger_row_complete()
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__may_trigger_row_complete(__pyx_v_self); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2474, __pyx_L1_error)
02475:
+02476: def row(
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Buffer_19row(PyObject *__pyx_v_self, #if CYTHON_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, 2476, __pyx_L3_error) if (likely(__pyx_kwds_len > 0)) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 2476, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "row", 0) < (0)) __PYX_ERR(0, 2476, __pyx_L3_error) /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Buffer_18row(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_table_name, PyObject *__pyx_v_symbols, PyObject *__pyx_v_columns, PyObject *__pyx_v_at) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("questdb._client.Buffer.row", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_25 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 2476, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); /* … */ __pyx_t_17 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2476, __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_n_u_str_2) < (0)) __PYX_ERR(0, 2476, __pyx_L1_error) 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, 2476, __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_2) < (0)) __PYX_ERR(0, 2476, __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, 2476, __pyx_L1_error) __pyx_t_16 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Buffer_19row, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer_row, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[190])); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2476, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_16); #endif __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_16, __pyx_t_25); __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_16, __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_Buffer, __pyx_mstate_global->__pyx_n_u_row_2, __pyx_t_16) < (0)) __PYX_ERR(0, 2476, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
02477: self,
02478: table_name: str,
02479: *,
+02480: symbols: Optional[Dict[str, Optional[str]]]=None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_symbols, Py_None) < (0)) __PYX_ERR(0, 2476, __pyx_L1_error)
02481: columns: Optional[Dict[
02482: str,
02483: Union[None, bool, int, float, str, TimestampMicros,
02484: TimestampNanos, datetime.datetime, numpy.ndarray,
02485: Decimal, uuid.UUID, ipaddress.IPv4Address, bytes,
02486: bytearray, memoryview, Char, DateMillis, Long256,
02487: Geohash]]
+02488: ]=None,
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("row", 1, 1, 1, i); __PYX_ERR(0, 2476, __pyx_L3_error) } } for (Py_ssize_t i = 1; i < 2; i++) { if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("row", *(__pyx_pyargnames[i - 0])); __PYX_ERR(0, 2476, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { __Pyx_RaiseKeywordRequired("row", __pyx_mstate_global->__pyx_n_u_at); __PYX_ERR(0, 2476, __pyx_L3_error) } __pyx_v_table_name = ((PyObject*)values[0]); __pyx_v_at = values[1]; __pyx_v_symbols = ((PyObject*)values[2]); __pyx_v_columns = ((PyObject*)values[3]); } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("row", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2476, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Buffer.row", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 0, "table_name", 2))) __PYX_ERR(0, 2478, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_symbols), (&PyDict_Type), 1, "symbols", 2))) __PYX_ERR(0, 2480, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_columns), (&PyDict_Type), 1, "columns", 2))) __PYX_ERR(0, 2481, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_6Buffer_18row(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self), __pyx_v_table_name, __pyx_v_symbols, __pyx_v_columns, __pyx_v_at); /* … */ if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_columns, Py_None) < (0)) __PYX_ERR(0, 2476, __pyx_L1_error)
02489: at: Union[ServerTimestampType, TimestampNanos, datetime.datetime]):
02490: """
02491: Add a single row (line) to the buffer.
02492:
02493: .. code-block:: python
02494:
02495: # All fields specified.
02496: buffer.row(
02497: 'table_name',
02498: symbols={'sym1': 'abc', 'sym2': 'def', 'sym3': None},
02499: columns={
02500: 'col1': True,
02501: 'col2': 123,
02502: 'col3': 3.14,
02503: 'col4': 'xyz',
02504: 'col5': TimestampMicros(123456789),
02505: 'col6': datetime(2019, 1, 1, 12, 0, 0),
02506: 'col7': numpy.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]),
02507: 'col8': None},
02508: at=TimestampNanos(123456789))
02509:
02510: # Only symbols specified. Designated timestamp assigned by the db.
02511: buffer.row(
02512: 'table_name',
02513: symbols={'sym1': 'abc', 'sym2': 'def'}, at=Server.Timestamp)
02514:
02515: # Float columns and timestamp specified as `datetime.datetime`.
02516: # Pay special attention to the timezone, which if unspecified is
02517: # interpreted as UTC.
02518: buffer.row(
02519: 'sensor data',
02520: columns={
02521: 'temperature': 24.5,
02522: 'humidity': 0.5},
02523: at=datetime.datetime.now(tz=datetime.timezone.utc))
02524:
02525:
02526: Python strings passed as values to ``symbols`` are going to be encoded
02527: as the ``SYMBOL`` type in QuestDB, whilst Python strings passed as
02528: values to ``columns`` are going to be encoded as the ``STRING`` type.
02529:
02530: Refer to the
02531: `QuestDB documentation <https://questdb.com/docs/concept/symbol/>`_ to
02532: understand the difference between the ``SYMBOL`` and ``STRING`` types
02533: (TL;DR: symbols are interned strings).
02534:
02535: Column values can be specified with Python types directly and map as so:
02536:
02537: .. list-table::
02538: :header-rows: 1
02539:
02540: * - Python type
02541: - Serialized as ILP type
02542: * - ``bool``
02543: - `BOOLEAN <https://questdb.com/docs/reference/api/ilp/columnset-types#boolean>`_
02544: * - ``decimal``
02545: - `DECIMAL <https://questdb.com/docs/reference/api/ilp/columnset-types#decimal>`_
02546: * - ``int``
02547: - `INTEGER <https://questdb.com/docs/reference/api/ilp/columnset-types#integer>`_
02548: * - ``float``
02549: - `FLOAT <https://questdb.com/docs/reference/api/ilp/columnset-types#float>`_
02550: * - ``str``
02551: - `STRING <https://questdb.com/docs/reference/api/ilp/columnset-types#string>`_
02552: * - ``numpy.ndarray``
02553: - `ARRAY <https://questdb.com/docs/reference/api/ilp/columnset-types#array>`_
02554: * - ``datetime.datetime`` and ``TimestampMicros``
02555: - `TIMESTAMP <https://questdb.com/docs/reference/api/ilp/columnset-types#timestamp>`_
02556: * - ``uuid.UUID``
02557: - UUID (QWP-only)
02558: * - ``ipaddress.IPv4Address``
02559: - IPV4 (QWP-only)
02560: * - ``bytes``, ``bytearray``, or ``memoryview``
02561: - BINARY (QWP-only)
02562: * - ``Char``
02563: - CHAR (QWP-only)
02564: * - ``DateMillis``
02565: - DATE (QWP-only)
02566: * - ``Long256``
02567: - LONG256 (QWP-only)
02568: * - ``Geohash``
02569: - GEOHASH (QWP-only)
02570: * - ``None``
02571: - *Column is skipped and not serialized.*
02572:
02573: **Note**: Support for NumPy arrays (``numpy.array``) requires QuestDB server version 9.0.0 or higher.
02574:
02575: The seven QWP-only types require protocol ``udp``, ``ws``, or ``wss``
02576: and are rejected by ILP buffers used by ``tcp``, ``tcps``, ``http``,
02577: and ``https``. They require QuestDB 10 or newer, the first
02578: production QWP implementation.
02579:
02580: QuestDB reserves these values as ``NULL`` sentinels, but the client
02581: deliberately accepts them: IPV4 ``0.0.0.0``, DATE ``INT64_MIN``, UUID
02582: ``80000000-0000-0000-8000-000000000000``, and a LONG256 whose four
02583: 64-bit limbs are all ``0x8000000000000000``. CHAR has no physical
02584: ``NULL`` sentinel: ``'\\x00'`` is stored as code unit 0, although some
02585: SQL operations treat it as CHAR's null/absent marker. GEOHASH has no
02586: sentinel collision. Empty BINARY ``b''`` is a real empty value and is
02587: distinct from ``NULL``.
02588:
02589: A bare ``int`` is a 64-bit LONG, so a value outside
02590: ``-2**63 .. 2**63-1`` raises ``OverflowError``. On a QWP buffer the
02591: message names :class:`Long256 <questdb.Long256>`, the wrapper that
02592: sends it as a 256-bit LONG256 instead; an ILP buffer, which has no
02593: LONG256 to offer, reports the bare conversion failure.
02594:
02595: If the destination table was already created, then the columns types
02596: will be cast to the types of the existing columns whenever possible
02597: (Refer to the QuestDB documentation pages linked above).
02598:
02599: Adding a row can trigger auto-flushing behaviour.
02600:
02601: :param table_name: The name of the table to which the row belongs.
02602: :param symbols: A dictionary of symbol column names to ``str`` values.
02603: As a convenience, you can also pass a ``None`` value which will
02604: have the same effect as skipping the key: If the column already
02605: existed, it will be recorded as ``NULL``, otherwise it will not be
02606: created.
02607: :param columns: A dictionary mapping column names to the supported
02608: column values listed above.
02609: As a convenience, you can also pass a ``None`` value which will
02610: have the same effect as skipping the key: If the column already
02611: existed, it will be recorded as ``NULL``, otherwise it will not be
02612: created.
02613: :param at: The timestamp of the row. This is required!
02614: If ``ServerTimestamp``, timestamp is assigned by QuestDB.
02615: If ``datetime``, the timestamp is converted to nanoseconds.
02616: A nanosecond unix epoch timestamp can be passed
02617: explicitly as a ``TimestampNanos`` object.
02618: """
+02619: if at is None:
__pyx_t_1 = (__pyx_v_at == Py_None);
if (unlikely(__pyx_t_1)) {
/* … */
}
+02620: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2620, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+02621: QuestDBErrorCode.InvalidTimestamp,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2621, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2621, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_at_must_be_of_type_TimestampNan}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2620, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 2620, __pyx_L1_error)
02622: "`at` must be of type TimestampNanos, datetime, or ServerTimestamp"
02623: )
+02624: self._row(
__pyx_t_9.__pyx_n = 3;
__pyx_t_9.symbols = ((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, 2624, __pyx_L1_error)
02625: True, # allow_auto_flush
02626: table_name,
02627: symbols,
02628: columns,
02629: at)
+02630: 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;
02631:
+02632: 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, 2632, __pyx_L3_error) if (likely(__pyx_kwds_len > 0)) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 2632, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "dataframe", 0) < (0)) __PYX_ERR(0, 2632, __pyx_L3_error) /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Buffer_20dataframe(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_df, PyObject *__pyx_v_table_name, PyObject *__pyx_v_table_name_col, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("questdb._client.Buffer.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_16 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2632, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); /* … */ __pyx_t_17 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2632, __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, 2632, __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, 2632, __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, 2632, __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, 2632, __pyx_L1_error) __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Buffer_21dataframe, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer_dataframe, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[191])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 2632, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25); #endif __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_25, __pyx_t_16); __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_25, __pyx_t_17); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __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_dataframe, __pyx_t_25) < (0)) __PYX_ERR(0, 2632, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
02633: self,
02634: df, # : pd.DataFrame
02635: *,
+02636: table_name: Optional[str] = None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_table_name, Py_None) < (0)) __PYX_ERR(0, 2632, __pyx_L1_error)
+02637: table_name_col: Union[None, int, str] = None,
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_n_u_auto)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, i); __PYX_ERR(0, 2632, __pyx_L3_error) } } for (Py_ssize_t i = 1; i < 2; i++) { if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("dataframe", *(__pyx_pyargnames[i - 0])); __PYX_ERR(0, 2632, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { __Pyx_RaiseKeywordRequired("dataframe", __pyx_mstate_global->__pyx_n_u_at); __PYX_ERR(0, 2632, __pyx_L3_error) } __pyx_v_df = values[0]; __pyx_v_at = values[1]; __pyx_v_table_name = ((PyObject*)values[2]); __pyx_v_table_name_col = values[3]; __pyx_v_symbols = values[4]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2632, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Buffer.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 1, "table_name", 2))) __PYX_ERR(0, 2636, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_6Buffer_20dataframe(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self), __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at); /* … */ if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_table_name_col, Py_None) < (0)) __PYX_ERR(0, 2632, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_n_u_auto) < (0)) __PYX_ERR(0, 2632, __pyx_L1_error)
02638: symbols: Union[str, bool, List[int], List[str]] = 'auto',
02639: at: Union[ServerTimestampType, int, str, TimestampNanos, datetime.datetime]):
02640: """
02641: Add a pandas DataFrame to the buffer.
02642:
02643: Also see :func:`Sender.dataframe <questdb.Sender.dataframe>` if you
02644: are not using the buffer explicitly. Over ILP and QWP/UDP it accepts
02645: the arguments shown here and adds auto-flushing. Over QWP/WebSocket
02646: it instead uses the direct columnar path, additionally accepting
02647: ``max_rows_per_batch`` and ``schema_overrides``; see
02648: :meth:`QuestDB.dataframe <questdb.QuestDB.dataframe>` for that path's
02649: supported column types and arguments.
02650:
02651: Requires ``pandas`` and ``numpy``. ``pyarrow`` is only needed
02652: when the frame contains ``pd.ArrowDtype`` / ``pd.Categorical`` /
02653: ``string`` dtype columns — purely NumPy / object dtypes work
02654: without it.
02655:
02656: Adding a dataframe can trigger auto-flushing behaviour,
02657: even between rows of the same dataframe. To avoid this, you can
02658: use HTTP and transactions (see :func:`Sender.transaction <questdb.Sender.transaction>`).
02659:
02660: :param df: The pandas DataFrame to serialize to the buffer.
02661: :type df: pandas.DataFrame
02662:
02663: :param table_name: The name of the table to which the rows belong.
02664:
02665: If ``None``, the table name is taken from the ``table_name_col``
02666: parameter. If both ``table_name`` and ``table_name_col`` are
02667: ``None``, the table name is taken from the DataFrame's index
02668: name (``df.index.name`` attribute).
02669: :type table_name: str or None
02670:
02671: :param table_name_col: The name or index of the column in the DataFrame
02672: that contains the table name.
02673:
02674: If ``None``, the table name is taken
02675: from the ``table_name`` parameter. If both ``table_name`` and
02676: ``table_name_col`` are ``None``, the table name is taken from the
02677: DataFrame's index name (``df.index.name`` attribute).
02678:
02679: If ``table_name_col`` is an integer, it is interpreted as the index
02680: of the column starting from ``0``. The index of the column can be
02681: negative, in which case it is interpreted as an offset from the end
02682: of the DataFrame. E.g. ``-1`` is the last column.
02683: :type table_name_col: str or int or None
02684:
02685: :param symbols: The columns to be serialized as symbols.
02686:
02687: If ``'auto'`` (default), all columns of dtype ``'categorical'`` are
02688: serialized as symbols. If ``True``, all ``str`` columns are
02689: serialized as symbols. If ``False``, no columns are serialized as
02690: symbols.
02691:
02692: The list of symbols can also be specified explicitly as a ``list``
02693: of column names (``str``) or indices (``int``). Integer indices
02694: start at ``0`` and can be negative, offset from the end of the
02695: DataFrame. E.g. ``-1`` is the last column.
02696:
02697: Only columns containing strings can be serialized as symbols.
02698:
02699: :type symbols: str or bool or list[str] or list[int]
02700:
02701: :param at: The designated timestamp of the rows.
02702:
02703: You can specify a single value for all rows or column name or index.
02704: If ``ServerTimestamp``, timestamp is assigned by the server for all rows.
02705: To pass in a timestamp explicitly as an integer use the
02706: ``TimestampNanos`` wrapper type. To get the current timestamp,
02707: use ``TimestampNanos.now()``.
02708: When passing a ``datetime.datetime`` object, the timestamp is
02709: converted to nanoseconds.
02710: A naive ``datetime`` object is interpreted as UTC — never
02711: your machine's local timezone — and a ``UserWarning`` is
02712: emitted once per process
02713: (call ``datetime.datetime.now(tz=datetime.timezone.utc)``
02714: for the current timestamp to
02715: avoid bugs).
02716:
02717: To specify a different timestamp for each row, pass in a column name
02718: (``str``) or index (``int``, 0-based index, negative index
02719: supported): In this case, the column needs to be of dtype
02720: ``datetime64[ns]`` (assumed to be in the **UTC timezone** and not
02721: local, due to differences in Pandas and Python datetime handling) or
02722: ``datetime64[ns, tz]``. When a timezone is specified in the column,
02723: it is converted to UTC automatically.
02724:
02725: A timestamp column can also contain ``None`` values. The server will
02726: assign the current timestamp to those rows.
02727:
02728: **Note**: All timestamps are always converted to nanoseconds and in
02729: the UTC timezone. Timezone information is dropped before sending and
02730: QuestDB will not store any timezone information.
02731: :type at: TimestampNanos, datetime.datetime, int or str or None
02732:
02733: **Note**: It is an error to specify both ``table_name`` and
02734: ``table_name_col``.
02735:
02736: **Note**: The "index" column of the DataFrame is never serialized,
02737: even if it is named.
02738:
02739: Example:
02740:
02741: .. code-block:: python
02742:
02743: import pandas as pd
02744: import questdb as qi
02745:
02746: buf = qi.ingress.Buffer(protocol_version=2)
02747: # ...
02748:
02749: df = pd.DataFrame({
02750: 'location': ['London', 'Managua', 'London'],
02751: 'temperature': [24.5, 35.0, 25.5],
02752: 'humidity': [0.5, 0.6, 0.45],
02753: 'ts': pd.date_range('2021-07-01', periods=3)})
02754: buf.dataframe(
02755: df, table_name='weather', at='ts', symbols=['location'])
02756:
02757: # ...
02758: sender.flush(buf)
02759:
02760: **Pandas to ILP datatype mappings**
02761:
02762: .. seealso:: https://questdb.com/docs/reference/api/ilp/columnset-types/
02763:
02764: .. list-table:: Pandas Mappings
02765: :header-rows: 1
02766:
02767: * - Pandas ``dtype``
02768: - Nulls
02769: - ILP Datatype
02770: * - ``'bool'``
02771: - N
02772: - ``BOOLEAN``
02773: * - ``'boolean'``
02774: - N **α**
02775: - ``BOOLEAN``
02776: * - ``'object'`` (``bool`` objects)
02777: - N **α**
02778: - ``BOOLEAN``
02779: * - ``'uint8'``
02780: - N
02781: - ``INTEGER``
02782: * - ``'int8'``
02783: - N
02784: - ``INTEGER``
02785: * - ``'uint16'``
02786: - N
02787: - ``INTEGER``
02788: * - ``'int16'``
02789: - N
02790: - ``INTEGER``
02791: * - ``'uint32'``
02792: - N
02793: - ``INTEGER``
02794: * - ``'int32'``
02795: - N
02796: - ``INTEGER``
02797: * - ``'uint64'``
02798: - N
02799: - ``INTEGER`` **β**
02800: * - ``'int64'``
02801: - N
02802: - ``INTEGER``
02803: * - ``'UInt8'``
02804: - Y
02805: - ``INTEGER``
02806: * - ``'Int8'``
02807: - Y
02808: - ``INTEGER``
02809: * - ``'UInt16'``
02810: - Y
02811: - ``INTEGER``
02812: * - ``'Int16'``
02813: - Y
02814: - ``INTEGER``
02815: * - ``'UInt32'``
02816: - Y
02817: - ``INTEGER``
02818: * - ``'Int32'``
02819: - Y
02820: - ``INTEGER``
02821: * - ``'UInt64'``
02822: - Y
02823: - ``INTEGER`` **β**
02824: * - ``'Int64'``
02825: - Y
02826: - ``INTEGER``
02827: * - ``'object'`` (``int`` objects)
02828: - Y
02829: - ``INTEGER`` **β**
02830: * - ``'float32'`` **γ**
02831: - Y (``NaN``)
02832: - ``FLOAT``
02833: * - ``'float64'``
02834: - Y (``NaN``)
02835: - ``FLOAT``
02836: * - ``'object'`` (``float`` objects)
02837: - Y (``NaN``)
02838: - ``FLOAT``
02839: * - ``'string'`` (``str`` objects)
02840: - Y
02841: - ``STRING`` (default), ``SYMBOL`` via ``symbols`` arg. **δ**
02842: * - ``'string[pyarrow]'``
02843: - Y
02844: - ``STRING`` (default), ``SYMBOL`` via ``symbols`` arg. **δ**
02845: * - ``'category'`` (``str`` objects) **ε**
02846: - Y
02847: - ``SYMBOL`` (default), ``STRING`` via ``symbols`` arg. **δ**
02848: * - ``'object'`` (``str`` objects)
02849: - Y
02850: - ``STRING`` (default), ``SYMBOL`` via ``symbols`` arg. **δ**
02851: * - ``'datetime64[ns]'``
02852: - Y
02853: - ``TIMESTAMP`` **ζ**
02854: * - ``'datetime64[ns, tz]'``
02855: - Y
02856: - ``TIMESTAMP`` **ζ**
02857: * - ``'object'`` (``Decimal`` objects)
02858: - Y (``NaN``)
02859: - ``DECIMAL``
02860:
02861: .. note::
02862:
02863: * **α**: Note some pandas dtypes allow nulls (e.g. ``'boolean'``),
02864: where the QuestDB database does not.
02865:
02866: * **β**: The valid range for integer values is -2^63 to 2^63-1.
02867: Any ``'uint64'``, ``'UInt64'`` or python ``int`` object values
02868: outside this range will raise an error during serialization.
02869:
02870: * **γ**: Upcast to 64-bit float during serialization.
02871:
02872: * **δ**: Columns containing strings can also be used to specify the
02873: table name. See ``table_name_col``.
02874:
02875: * **ε**: We only support categories containing strings. If the
02876: category contains non-string values, an error will be raised.
02877:
02878: * **ζ**: The '.dataframe()' method only supports datetimes with
02879: nanosecond precision. The designated timestamp column (see ``at``
02880: parameter) maintains the nanosecond precision, whilst values
02881: stored as columns have their precision truncated to microseconds.
02882: All dates are sent as UTC and any additional timezone information
02883: is dropped. If no timezone is specified, we follow
02884: the pandas convention of assuming the timezone is UTC.
02885: Datetimes before 1970-01-01 00:00:00 UTC are not supported.
02886: If a datetime value is specified as ``None`` (``NaT``), it is
02887: interpreted as the current QuestDB server time set on receipt of
02888: message.
02889:
02890: **Error Handling and Recovery**
02891:
02892: In case an exception is raised during dataframe serialization, the
02893: buffer is left in its previous state.
02894: The buffer remains in a valid state and can be used for further calls
02895: even after an error.
02896:
02897: For clarification, as an example, if an invalid ``None``
02898: value appears at the 3rd row for a ``bool`` column, neither the 3rd nor
02899: the preceding rows are added to the buffer.
02900:
02901: **Note**: This differs from the :func:`Sender.dataframe <questdb.Sender.dataframe>` method, which
02902: modifies this guarantee due to its ``auto_flush`` logic.
02903:
02904: **Performance Considerations**
02905:
02906: The Python GIL is released during serialization if it is not needed.
02907: If any column requires the GIL, the entire serialization is done whilst
02908: holding the GIL.
02909:
02910: Column types that require the GIL are:
02911:
02912: * Columns of ``str``, ``float`` or ``int`` or ``float`` Python objects.
02913: * The ``'string[python]'`` dtype.
02914: """
+02915: if at is None:
__pyx_t_1 = (__pyx_v_at == Py_None);
if (unlikely(__pyx_t_1)) {
/* … */
}
+02916: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2916, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+02917: QuestDBErrorCode.InvalidTimestamp,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2917, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2917, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_at_must_be_of_type_TimestampNan}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2916, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 2916, __pyx_L1_error)
02918: "`at` must be of type TimestampNanos, datetime, or ServerTimestamp"
02919: )
+02920: self._check_impl()
__pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_impl(__pyx_v_self); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2920, __pyx_L1_error)
02921: # Refused before the borrow below, as `_dataframe` would refuse it
02922: # after: a frame this call came back into from its own Python keeps
02923: # the borrow it holds.
+02924: self._check_not_in_row('dataframe')
__pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_dataframe, NULL); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2924, __pyx_L1_error)
+02925: self._begin_frame_borrow()
__pyx_f_7questdb_7_client_6Buffer__begin_frame_borrow(__pyx_v_self);
+02926: try:
/*try:*/ {
+02927: _dataframe(
__pyx_t_8 = __pyx_f_7questdb_7_client__dataframe(__pyx_v_self, __pyx_f_7questdb_7_client_auto_flush_blank(), __pyx_v_self->_impl, __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2927, __pyx_L5_error)
}
02928: self,
02929: auto_flush_blank(),
02930: self._impl,
02931: df,
02932: table_name,
02933: table_name_col,
02934: symbols,
02935: at)
02936: finally:
+02937: self._end_frame_borrow()
/*finally:*/ {
/*normal exit:*/{
__pyx_f_7questdb_7_client_6Buffer__end_frame_borrow(__pyx_v_self);
/* … */
__pyx_f_7questdb_7_client_6Buffer__end_frame_borrow(__pyx_v_self);
+02938: _oidc_raise_unscheduled_main()
__pyx_t_8 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2938, __pyx_L1_error) goto __pyx_L6; } __pyx_L5_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); if ( unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14); __Pyx_XGOTREF(__pyx_t_12); __Pyx_XGOTREF(__pyx_t_13); __Pyx_XGOTREF(__pyx_t_14); __Pyx_XGOTREF(__pyx_t_15); __Pyx_XGOTREF(__pyx_t_16); __Pyx_XGOTREF(__pyx_t_17); __pyx_t_9 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_11 = __pyx_filename; { /* … */ __pyx_t_8 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2938, __pyx_L8_error) } __Pyx_XGIVEREF(__pyx_t_15); __Pyx_XGIVEREF(__pyx_t_16); __Pyx_XGIVEREF(__pyx_t_17); __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17); __Pyx_XGIVEREF(__pyx_t_12); __Pyx_XGIVEREF(__pyx_t_13); __Pyx_XGIVEREF(__pyx_t_14); __Pyx_ErrRestore(__pyx_t_12, __pyx_t_13, __pyx_t_14); __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_11; goto __pyx_L1_error; __pyx_L8_error:; __Pyx_XGIVEREF(__pyx_t_15); __Pyx_XGIVEREF(__pyx_t_16); __Pyx_XGIVEREF(__pyx_t_17); __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17); __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; goto __pyx_L1_error; } __pyx_L6:; }
+02939: return self
{
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;
02940:
02941:
02942: _FLUSH_FMT = ('{} - See https://py-questdb-client.readthedocs.io/en/'
+02943: 'v' + VERSION +
__Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_VERSION); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 2943, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); __pyx_t_17 = PyNumber_Add(__pyx_mstate_global->__pyx_kp_u_See_https_py_questdb_client_rea, __pyx_t_25); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2943, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __pyx_t_25 = PyNumber_Add(__pyx_t_17, __pyx_mstate_global->__pyx_kp_u_troubleshooting_html_inspecting); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 2943, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_FLUSH_FMT, __pyx_t_25) < (0)) __PYX_ERR(0, 2942, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
02944: '/troubleshooting.html#inspecting-and-debugging-errors#flush-failed')
02945:
02946:
+02947: cdef uint64_t _timedelta_to_millis(cp_timedelta timedelta):
static uint64_t __pyx_f_7questdb_7_client__timedelta_to_millis(PyDateTime_Delta *__pyx_v_timedelta) {
int64_t __pyx_v_millis;
uint64_t __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_AddTraceback("questdb._client._timedelta_to_millis", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1LL;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
02948: """
02949: Convert a timedelta to milliseconds.
02950: """
02951: cdef int64_t millis = (
+02952: <int64_t>timedelta.days * 86_400_000 +
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_timedelta), __pyx_mstate_global->__pyx_n_u_days); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2952, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyLong_As_int64_t(__pyx_t_1); if (unlikely((__pyx_t_2 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2952, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* … */ __pyx_t_1 = __Pyx_PyLong_From_int64_t(((((int64_t)__pyx_t_2) * 0x5265C00) + (((int64_t)__pyx_t_3) * 0x3E8))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2952, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1);
+02953: <int64_t>timedelta.seconds * 1000 +
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_timedelta), __pyx_mstate_global->__pyx_n_u_seconds); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2953, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyLong_As_int64_t(__pyx_t_1); if (unlikely((__pyx_t_3 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2953, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* … */ __pyx_t_4 = __Pyx_PyNumber_Add_int_object(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2953, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_3 = __Pyx_PyLong_As_int64_t(__pyx_t_4); if (unlikely((__pyx_t_3 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2953, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_millis = __pyx_t_3;
+02954: timedelta.microseconds // 1000)
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_timedelta), __pyx_mstate_global->__pyx_n_u_microseconds); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2954, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyLong_FloorDivideObjC(__pyx_t_4, __pyx_mstate_global->__pyx_int_1000, 0x3E8, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2954, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+02955: if millis < 0:
__pyx_t_6 = (__pyx_v_millis < 0);
if (unlikely(__pyx_t_6)) {
/* … */
}
+02956: raise ValueError(
__pyx_t_5 = NULL;
+02957: f'Negative timedelta not allowed: {timedelta!r}.')
__pyx_t_1 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(((PyObject *)__pyx_v_timedelta)), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2957, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7[0] = __pyx_mstate_global->__pyx_kp_u_Negative_timedelta_not_allowed; __pyx_t_7[1] = __pyx_t_1; __pyx_t_7[2] = __pyx_mstate_global->__pyx_kp_u__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, 2957, __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, 2956, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 2956, __pyx_L1_error)
+02958: if millis == 0 and timedelta:
__pyx_t_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, 2958, __pyx_L1_error)
__pyx_t_6 = __pyx_t_12;
__pyx_L5_bool_binop_done:;
if (__pyx_t_6) {
/* … */
}
02959: # Never silently turn a positive finite duration into 0ms, which
02960: # several options interpret as "no deadline".
+02961: return 1
{
__pyx_r = 1;
}
goto __pyx_L0;
+02962: return millis
{
__pyx_r = __pyx_v_millis;
}
goto __pyx_L0;
02963:
02964:
+02965: cdef bint _is_int_not_bool(object value):
static int __pyx_f_7questdb_7_client__is_int_not_bool(PyObject *__pyx_v_value) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
02966: """A Python ``int`` that is not a boolean.
02967:
02968: For the connection options, whose values come from a conf string or
02969: a literal in the caller's code. The claim vocabulary reads its
02970: numbers out of arrays and pandas cells too, so it uses
02971: `_is_integral_not_bool` instead.
02972: """
+02973: return isinstance(value, int) and not isinstance(value, bool)
__pyx_t_2 = PyLong_Check(__pyx_v_value); if (__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L3_bool_binop_done; } __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); __pyx_t_3 = (!__pyx_t_2); __pyx_t_1 = __pyx_t_3; __pyx_L3_bool_binop_done:; { __pyx_r = __pyx_t_1; } goto __pyx_L0;
02974:
02975:
+02976: cdef bint _is_integral_not_bool(object value):
static int __pyx_f_7questdb_7_client__is_integral_not_bool(PyObject *__pyx_v_value) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client._is_integral_not_bool", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
02977: """A whole number that is not a boolean.
02978:
02979: The one predicate for every number in the round-trip claim
02980: vocabulary: the claim version, a geohash precision wherever it is
02981: read, the ``schema_overrides`` geohash bits, and the arguments the
02982: QWP-only wrapper classes take. Those numbers arrive from array
02983: metadata and from pandas cells as often as from a literal, and
02984: `numpy.int64` is what a claim rebuilt from array metadata carries,
02985: so holding a field to `int` alone drops it over its type.
02986:
02987: ``True == 1``, so a boolean would otherwise read as a version, a
02988: one-bit precision, or a geohash of zero bits. Identity settles it:
02989: `bool` cannot be subclassed, and `numpy.bool_` is not registered as
02990: `numbers.Integral`.
02991:
02992: A caller of this holds the value to a range next, and hands it on
02993: to C. Both want a plain `int`, so each site coerces with `int()`
02994: once the predicate has passed.
02995: """
+02996: return (value is not True and value is not False
__pyx_t_2 = (__pyx_v_value != Py_True);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L3_bool_binop_done;
}
/* … */
__pyx_t_2 = (__pyx_v_value != Py_False);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L3_bool_binop_done;
}
+02997: and isinstance(value, _numbers.Integral))
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_numbers); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2997, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Integral); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2997, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_2 = PyObject_IsInstance(__pyx_v_value, __pyx_t_4); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2997, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_1 = __pyx_t_2; __pyx_L3_bool_binop_done:; { __pyx_r = __pyx_t_1; } goto __pyx_L0;
02998:
02999:
+03000: cdef int64_t auto_flush_rows_default(line_sender_protocol protocol):
static int64_t __pyx_f_7questdb_7_client_auto_flush_rows_default(enum line_sender_protocol __pyx_v_protocol) {
int64_t __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client.auto_flush_rows_default", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1L;
__pyx_L0:;
return __pyx_r;
}
+03001: if _is_http_protocol(protocol):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_http_protocol(__pyx_v_protocol); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3001, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+03002: return 75000
{
__pyx_r = 0x124F8;
}
goto __pyx_L0;
03003: else:
+03004: return 600
/*else*/ {
{
__pyx_r = 0x258;
}
goto __pyx_L0;
}
03005:
03006:
+03007: cdef void_int _parse_auto_flush(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__parse_auto_flush(enum line_sender_protocol __pyx_v_protocol, PyObject *__pyx_v_auto_flush, PyObject *__pyx_v_auto_flush_rows, PyObject *__pyx_v_auto_flush_bytes, PyObject *__pyx_v_auto_flush_interval, struct __pyx_t_7questdb_7_client_auto_flush_mode_t *__pyx_v_c_auto_flush, size_t __pyx_v_max_datagram_size) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
__Pyx_INCREF(__pyx_v_auto_flush);
__Pyx_INCREF(__pyx_v_auto_flush_rows);
__Pyx_INCREF(__pyx_v_auto_flush_bytes);
__Pyx_INCREF(__pyx_v_auto_flush_interval);
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client._parse_auto_flush", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_auto_flush);
__Pyx_XDECREF(__pyx_v_auto_flush_rows);
__Pyx_XDECREF(__pyx_v_auto_flush_bytes);
__Pyx_XDECREF(__pyx_v_auto_flush_interval);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
03008: line_sender_protocol protocol,
03009: object auto_flush,
03010: object auto_flush_rows,
03011: object auto_flush_bytes,
03012: object auto_flush_interval,
03013: auto_flush_mode_t* c_auto_flush,
03014: size_t max_datagram_size
03015: ) except -1:
03016: # Set defaults.
+03017: if auto_flush_rows is None:
__pyx_t_1 = (__pyx_v_auto_flush_rows == Py_None);
if (__pyx_t_1) {
/* … */
}
+03018: auto_flush_rows = auto_flush_rows_default(protocol)
__pyx_t_2 = __pyx_f_7questdb_7_client_auto_flush_rows_default(__pyx_v_protocol); if (unlikely(__pyx_t_2 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 3018, __pyx_L1_error) __pyx_t_3 = __Pyx_PyLong_From_int64_t(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3018, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF_SET(__pyx_v_auto_flush_rows, __pyx_t_3); __pyx_t_3 = 0;
03019:
+03020: if auto_flush_bytes is None:
__pyx_t_1 = (__pyx_v_auto_flush_bytes == Py_None);
if (__pyx_t_1) {
/* … */
}
+03021: if _is_qwp_udp_protocol(protocol):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_qwp_udp_protocol(__pyx_v_protocol); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3021, __pyx_L1_error) if (__pyx_t_1) { /* … */ goto __pyx_L5; }
+03022: auto_flush_bytes = max_datagram_size if max_datagram_size else 1400
__pyx_t_1 = (__pyx_v_max_datagram_size != 0);
if (__pyx_t_1) {
__pyx_t_4 = __Pyx_PyLong_FromSize_t(__pyx_v_max_datagram_size); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3022, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_3 = __pyx_t_4;
__pyx_t_4 = 0;
} else {
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_1400);
__pyx_t_3 = __pyx_mstate_global->__pyx_int_1400;
}
__Pyx_DECREF_SET(__pyx_v_auto_flush_bytes, __pyx_t_3);
__pyx_t_3 = 0;
03023: else:
+03024: auto_flush_bytes = False
/*else*/ {
__Pyx_INCREF(Py_False);
__Pyx_DECREF_SET(__pyx_v_auto_flush_bytes, Py_False);
}
__pyx_L5:;
03025:
+03026: if auto_flush_interval is None:
__pyx_t_1 = (__pyx_v_auto_flush_interval == Py_None);
if (__pyx_t_1) {
/* … */
}
+03027: auto_flush_interval = 1000
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_1000); __Pyx_DECREF_SET(__pyx_v_auto_flush_interval, __pyx_mstate_global->__pyx_int_1000);
03028:
+03029: if isinstance(auto_flush, str):
__pyx_t_1 = PyUnicode_Check(__pyx_v_auto_flush);
if (__pyx_t_1) {
/* … */
}
+03030: if auto_flush == 'off':
__pyx_t_1 = __Pyx_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, 3030, __pyx_L1_error) if (__pyx_t_1) { /* … */ goto __pyx_L8; }
+03031: auto_flush = False
__Pyx_INCREF(Py_False); __Pyx_DECREF_SET(__pyx_v_auto_flush, Py_False);
+03032: elif auto_flush == 'on':
__pyx_t_1 = __Pyx_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, 3032, __pyx_L1_error) if (likely(__pyx_t_1)) { /* … */ goto __pyx_L8; }
+03033: auto_flush = True
__Pyx_INCREF(Py_True); __Pyx_DECREF_SET(__pyx_v_auto_flush, Py_True);
03034: else:
+03035: raise QuestDBError(
/*else*/ {
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3035, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+03036: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3036, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3036, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+03037: '"auto_flush" must be None, bool, "on" or "off", ' +
__pyx_t_6 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auto_flush_must_be_None_bool_on, __pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3037, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_t_6}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3035, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 3035, __pyx_L1_error) } __pyx_L8:;
+03038: f'not {auto_flush!r}')
__pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_auto_flush), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3038, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_8 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_not, __pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3038, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
03039:
03040: # Normalise auto_flush parameters to ints or False.
+03041: if isinstance(auto_flush_rows, str):
__pyx_t_1 = PyUnicode_Check(__pyx_v_auto_flush_rows);
if (__pyx_t_1) {
/* … */
goto __pyx_L9;
}
+03042: if auto_flush_rows == 'on':
__pyx_t_1 = __Pyx_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, 3042, __pyx_L1_error) if (unlikely(__pyx_t_1)) { /* … */ }
+03043: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3043, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
+03044: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3044, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3044, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_4, __pyx_mstate_global->__pyx_kp_u_auto_flush_rows_cannot_be_on}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3043, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 3043, __pyx_L1_error)
03045: '"auto_flush_rows" cannot be "on"')
+03046: elif auto_flush_rows == 'off':
__pyx_t_1 = __Pyx_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, 3046, __pyx_L1_error) if (__pyx_t_1) { /* … */ goto __pyx_L10; }
+03047: auto_flush_rows = False
__Pyx_INCREF(Py_False); __Pyx_DECREF_SET(__pyx_v_auto_flush_rows, Py_False);
03048: else:
+03049: auto_flush_rows = int(auto_flush_rows)
/*else*/ {
__pyx_t_3 = __Pyx_PyNumber_Int(__pyx_v_auto_flush_rows); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3049, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF_SET(__pyx_v_auto_flush_rows, __pyx_t_3);
__pyx_t_3 = 0;
}
__pyx_L10:;
+03050: elif auto_flush_rows is False or _is_int_not_bool(auto_flush_rows):
__pyx_t_10 = (__pyx_v_auto_flush_rows == Py_False);
if (!__pyx_t_10) {
} else {
__pyx_t_1 = __pyx_t_10;
goto __pyx_L11_bool_binop_done;
}
__pyx_t_10 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_auto_flush_rows); if (unlikely(__pyx_t_10 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3050, __pyx_L1_error)
__pyx_t_1 = __pyx_t_10;
__pyx_L11_bool_binop_done:;
if (likely(__pyx_t_1)) {
goto __pyx_L9;
}
03051: pass
03052: else:
+03053: raise TypeError(
/*else*/ {
__pyx_t_6 = NULL;
+03054: '"auto_flush_rows" must be an int, False or "off", ' +
__pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auto_flush_rows_must_be_an_int, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3054, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_9 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_4}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3053, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 3053, __pyx_L1_error) } __pyx_L9:;
+03055: f'not {auto_flush_rows!r}')
__pyx_t_4 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_auto_flush_rows), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3055, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_not, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3055, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
03056:
+03057: if isinstance(auto_flush_bytes, str):
__pyx_t_1 = PyUnicode_Check(__pyx_v_auto_flush_bytes);
if (__pyx_t_1) {
/* … */
goto __pyx_L13;
}
+03058: if auto_flush_bytes == 'on':
__pyx_t_1 = __Pyx_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, 3058, __pyx_L1_error) if (unlikely(__pyx_t_1)) { /* … */ }
+03059: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3059, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
+03060: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3060, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3060, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_auto_flush_bytes_cannot_be_on}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3059, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 3059, __pyx_L1_error)
03061: '"auto_flush_bytes" cannot be "on"')
+03062: elif auto_flush_bytes == 'off':
__pyx_t_1 = __Pyx_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, 3062, __pyx_L1_error) if (__pyx_t_1) { /* … */ goto __pyx_L14; }
+03063: auto_flush_bytes = False
__Pyx_INCREF(Py_False); __Pyx_DECREF_SET(__pyx_v_auto_flush_bytes, Py_False);
03064: else:
+03065: auto_flush_bytes = int(auto_flush_bytes)
/*else*/ {
__pyx_t_3 = __Pyx_PyNumber_Int(__pyx_v_auto_flush_bytes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3065, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF_SET(__pyx_v_auto_flush_bytes, __pyx_t_3);
__pyx_t_3 = 0;
}
__pyx_L14:;
+03066: elif auto_flush_bytes is False or _is_int_not_bool(auto_flush_bytes):
__pyx_t_10 = (__pyx_v_auto_flush_bytes == Py_False);
if (!__pyx_t_10) {
} else {
__pyx_t_1 = __pyx_t_10;
goto __pyx_L15_bool_binop_done;
}
__pyx_t_10 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_auto_flush_bytes); if (unlikely(__pyx_t_10 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3066, __pyx_L1_error)
__pyx_t_1 = __pyx_t_10;
__pyx_L15_bool_binop_done:;
if (likely(__pyx_t_1)) {
goto __pyx_L13;
}
03067: pass
03068: else:
+03069: raise TypeError(
/*else*/ {
__pyx_t_6 = NULL;
+03070: '"auto_flush_bytes" must be an int, False or "off", ' +
__pyx_t_7 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auto_flush_bytes_must_be_an_int, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3070, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_9 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_7}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3069, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 3069, __pyx_L1_error) } __pyx_L13:;
+03071: f'not {auto_flush_bytes!r}')
__pyx_t_7 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_auto_flush_bytes), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3071, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_not, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3071, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
03072:
+03073: if isinstance(auto_flush_interval, str):
__pyx_t_1 = PyUnicode_Check(__pyx_v_auto_flush_interval);
if (__pyx_t_1) {
/* … */
goto __pyx_L17;
}
+03074: if auto_flush_interval == 'on':
__pyx_t_1 = __Pyx_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, 3074, __pyx_L1_error) if (unlikely(__pyx_t_1)) { /* … */ }
+03075: raise QuestDBError(
__pyx_t_7 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3075, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
+03076: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3076, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3076, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_5, __pyx_mstate_global->__pyx_kp_u_auto_flush_interval_cannot_be_o}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3075, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 3075, __pyx_L1_error)
03077: '"auto_flush_interval" cannot be "on"')
+03078: elif auto_flush_interval == 'off':
__pyx_t_1 = __Pyx_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, 3078, __pyx_L1_error) if (__pyx_t_1) { /* … */ goto __pyx_L18; }
+03079: auto_flush_interval = False
__Pyx_INCREF(Py_False); __Pyx_DECREF_SET(__pyx_v_auto_flush_interval, Py_False);
03080: else:
+03081: auto_flush_interval = int(auto_flush_interval)
/*else*/ {
__pyx_t_3 = __Pyx_PyNumber_Int(__pyx_v_auto_flush_interval); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3081, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF_SET(__pyx_v_auto_flush_interval, __pyx_t_3);
__pyx_t_3 = 0;
}
__pyx_L18:;
+03082: elif auto_flush_interval is False or _is_int_not_bool(auto_flush_interval):
__pyx_t_10 = (__pyx_v_auto_flush_interval == Py_False);
if (!__pyx_t_10) {
} else {
__pyx_t_1 = __pyx_t_10;
goto __pyx_L19_bool_binop_done;
}
__pyx_t_10 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_auto_flush_interval); if (unlikely(__pyx_t_10 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3082, __pyx_L1_error)
__pyx_t_1 = __pyx_t_10;
__pyx_L19_bool_binop_done:;
if (__pyx_t_1) {
goto __pyx_L17;
}
03083: pass
+03084: elif isinstance(auto_flush_interval, cp_timedelta):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_auto_flush_interval, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta);
if (likely(__pyx_t_1)) {
/* … */
goto __pyx_L17;
}
+03085: auto_flush_interval = _timedelta_to_millis(auto_flush_interval)
if (!(likely(((__pyx_v_auto_flush_interval) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_auto_flush_interval, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta))))) __PYX_ERR(0, 3085, __pyx_L1_error) __pyx_t_11 = __pyx_f_7questdb_7_client__timedelta_to_millis(((PyDateTime_Delta *)__pyx_v_auto_flush_interval)); if (unlikely(__pyx_t_11 == ((uint64_t)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 3085, __pyx_L1_error) __pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3085, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF_SET(__pyx_v_auto_flush_interval, __pyx_t_3); __pyx_t_3 = 0;
03086: else:
+03087: raise TypeError(
/*else*/ {
__pyx_t_6 = NULL;
+03088: '"auto_flush_interval" must be an int, timedelta, False or "off", ' +
__pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auto_flush_interval_must_be_an, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3088, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_9 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_5}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3087, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 3087, __pyx_L1_error) } __pyx_L17:;
+03089: f'not {auto_flush_interval!r}')
__pyx_t_5 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_auto_flush_interval), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3089, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_not, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3089, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
03090:
03091: # Coerce auto_flush to bool if None.
+03092: if auto_flush is None:
__pyx_t_1 = (__pyx_v_auto_flush == Py_None);
if (__pyx_t_1) {
/* … */
goto __pyx_L21;
}
03093: auto_flush = (
+03094: (auto_flush_rows is not False) or
__pyx_t_1 = (__pyx_v_auto_flush_rows != Py_False);
if (!__pyx_t_1) {
} else {
__pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3094, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_3 = __pyx_t_5;
__pyx_t_5 = 0;
goto __pyx_L22_bool_binop_done;
}
+03095: (auto_flush_bytes is not False) or
__pyx_t_1 = (__pyx_v_auto_flush_bytes != Py_False);
if (!__pyx_t_1) {
} else {
__pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3095, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_3 = __pyx_t_5;
__pyx_t_5 = 0;
goto __pyx_L22_bool_binop_done;
}
+03096: (auto_flush_interval is not False))
__pyx_t_1 = (__pyx_v_auto_flush_interval != Py_False);
__pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3096, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_3 = __pyx_t_5;
__pyx_t_5 = 0;
__pyx_L22_bool_binop_done:;
__Pyx_DECREF_SET(__pyx_v_auto_flush, __pyx_t_3);
__pyx_t_3 = 0;
+03097: elif not isinstance(auto_flush, bool):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_auto_flush, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool);
__pyx_t_10 = (!__pyx_t_1);
if (unlikely(__pyx_t_10)) {
/* … */
}
__pyx_L21:;
+03098: raise ValueError(
__pyx_t_5 = NULL;
+03099: '"auto_flush" must be None, bool, "on" or "off", ' +
__pyx_t_6 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auto_flush_must_be_None_bool_on, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3099, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_9 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3098, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 3098, __pyx_L1_error)
+03100: f'not {auto_flush!r}')
__pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_auto_flush), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3100, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_not, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3100, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
03101:
03102: # Validate auto_flush parameters.
+03103: if auto_flush and \
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_auto_flush); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3103, __pyx_L1_error) if (__pyx_t_1) { } else { __pyx_t_10 = __pyx_t_1; goto __pyx_L26_bool_binop_done; } /* … */ if (unlikely(__pyx_t_10)) { /* … */ }
+03104: (auto_flush_rows is False) and \
__pyx_t_1 = (__pyx_v_auto_flush_rows == Py_False);
if (__pyx_t_1) {
} else {
__pyx_t_10 = __pyx_t_1;
goto __pyx_L26_bool_binop_done;
}
+03105: (auto_flush_bytes is False) and \
__pyx_t_1 = (__pyx_v_auto_flush_bytes == Py_False);
if (__pyx_t_1) {
} else {
__pyx_t_10 = __pyx_t_1;
goto __pyx_L26_bool_binop_done;
}
+03106: (auto_flush_interval is False):
__pyx_t_1 = (__pyx_v_auto_flush_interval == Py_False); __pyx_t_10 = __pyx_t_1; __pyx_L26_bool_binop_done:;
+03107: raise ValueError(
__pyx_t_6 = NULL;
__pyx_t_9 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_auto_flush_is_enabled_but_no_ot};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3107, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 3107, __pyx_L1_error)
03108: '"auto_flush" is enabled but no other auto-flush '
03109: 'parameters are enabled. Please set at least one of '
03110: '"auto_flush_rows", "auto_flush_bytes" or '
03111: '"auto_flush_interval".')
03112:
+03113: if auto_flush_rows is not False and auto_flush_rows < 1:
__pyx_t_1 = (__pyx_v_auto_flush_rows != Py_False);
if (__pyx_t_1) {
} else {
__pyx_t_10 = __pyx_t_1;
goto __pyx_L31_bool_binop_done;
}
__pyx_t_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, 3113, __pyx_L1_error)
__pyx_t_10 = __pyx_t_1;
__pyx_L31_bool_binop_done:;
if (unlikely(__pyx_t_10)) {
/* … */
}
+03114: raise ValueError(
__pyx_t_6 = NULL;
+03115: '"auto_flush_rows" must be >= 1, '
__pyx_t_7 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auto_flush_rows_must_be_1_not, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3115, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_9 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_7}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3114, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 3114, __pyx_L1_error)
+03116: f'not {auto_flush_rows}')
__pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_v_auto_flush_rows, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3116, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5);
03117:
+03118: if auto_flush_bytes is not False and auto_flush_bytes < 1:
__pyx_t_1 = (__pyx_v_auto_flush_bytes != Py_False);
if (__pyx_t_1) {
} else {
__pyx_t_10 = __pyx_t_1;
goto __pyx_L34_bool_binop_done;
}
__pyx_t_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, 3118, __pyx_L1_error)
__pyx_t_10 = __pyx_t_1;
__pyx_L34_bool_binop_done:;
if (unlikely(__pyx_t_10)) {
/* … */
}
+03119: raise ValueError(
__pyx_t_7 = NULL;
+03120: '"auto_flush_bytes" must be >= 1, '
__pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auto_flush_bytes_must_be_1_not, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3120, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_9 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_5}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3119, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 3119, __pyx_L1_error)
+03121: f'not {auto_flush_bytes}')
__pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_v_auto_flush_bytes, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3121, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6);
03122:
+03123: if auto_flush_interval is not False and auto_flush_interval < 1:
__pyx_t_1 = (__pyx_v_auto_flush_interval != Py_False);
if (__pyx_t_1) {
} else {
__pyx_t_10 = __pyx_t_1;
goto __pyx_L37_bool_binop_done;
}
__pyx_t_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, 3123, __pyx_L1_error)
__pyx_t_10 = __pyx_t_1;
__pyx_L37_bool_binop_done:;
if (unlikely(__pyx_t_10)) {
/* … */
}
+03124: raise ValueError(
__pyx_t_5 = NULL;
+03125: '"auto_flush_interval" must be >= 1, '
__pyx_t_6 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auto_flush_interval_must_be_1_n, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3125, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_9 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3124, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 3124, __pyx_L1_error)
+03126: f'not {auto_flush_interval}')
__pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_v_auto_flush_interval, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3126, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7);
03127:
03128: # Parse individual auto_flush parameters to C struct.
+03129: c_auto_flush.enabled = auto_flush
__pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_auto_flush); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3129, __pyx_L1_error) __pyx_v_c_auto_flush->enabled = __pyx_t_10;
03130:
+03131: if auto_flush_rows is False:
__pyx_t_10 = (__pyx_v_auto_flush_rows == Py_False);
if (__pyx_t_10) {
/* … */
goto __pyx_L39;
}
+03132: c_auto_flush.row_count = -1
__pyx_v_c_auto_flush->row_count = -1L;
03133: else:
+03134: c_auto_flush.row_count = auto_flush_rows
/*else*/ {
__pyx_t_2 = __Pyx_PyLong_As_int64_t(__pyx_v_auto_flush_rows); if (unlikely((__pyx_t_2 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3134, __pyx_L1_error)
__pyx_v_c_auto_flush->row_count = __pyx_t_2;
}
__pyx_L39:;
03135:
+03136: if auto_flush_bytes is False:
__pyx_t_10 = (__pyx_v_auto_flush_bytes == Py_False);
if (__pyx_t_10) {
/* … */
goto __pyx_L40;
}
+03137: c_auto_flush.byte_count = -1
__pyx_v_c_auto_flush->byte_count = -1L;
03138: else:
+03139: c_auto_flush.byte_count = auto_flush_bytes
/*else*/ {
__pyx_t_2 = __Pyx_PyLong_As_int64_t(__pyx_v_auto_flush_bytes); if (unlikely((__pyx_t_2 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3139, __pyx_L1_error)
__pyx_v_c_auto_flush->byte_count = __pyx_t_2;
}
__pyx_L40:;
03140:
+03141: if auto_flush_interval is False:
__pyx_t_10 = (__pyx_v_auto_flush_interval == Py_False);
if (__pyx_t_10) {
/* … */
goto __pyx_L41;
}
+03142: c_auto_flush.interval = -1
__pyx_v_c_auto_flush->interval = -1L;
03143: else:
+03144: c_auto_flush.interval = auto_flush_interval
/*else*/ {
__pyx_t_2 = __Pyx_PyLong_As_int64_t(__pyx_v_auto_flush_interval); if (unlikely((__pyx_t_2 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3144, __pyx_L1_error)
__pyx_v_c_auto_flush->interval = __pyx_t_2;
}
__pyx_L41:;
03145:
03146:
+03147: cdef void_int _parse_pooled_auto_flush(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__parse_pooled_auto_flush(enum line_sender_protocol __pyx_v_protocol, PyObject *__pyx_v_auto_flush, PyObject *__pyx_v_auto_flush_rows, PyObject *__pyx_v_auto_flush_bytes, PyObject *__pyx_v_auto_flush_interval, struct __pyx_t_7questdb_7_client_auto_flush_mode_t *__pyx_v_c_auto_flush, int *__pyx_v_c_auto_flush_bytes_dynamic) {
int __pyx_v_default_auto_flush_bytes;
__pyx_t_7questdb_7_client_void_int __pyx_r;
__Pyx_INCREF(__pyx_v_auto_flush_rows);
__Pyx_INCREF(__pyx_v_auto_flush_bytes);
__Pyx_INCREF(__pyx_v_auto_flush_interval);
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client._parse_pooled_auto_flush", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_auto_flush_rows);
__Pyx_XDECREF(__pyx_v_auto_flush_bytes);
__Pyx_XDECREF(__pyx_v_auto_flush_interval);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
03148: line_sender_protocol protocol,
03149: object auto_flush,
03150: object auto_flush_rows,
03151: object auto_flush_bytes,
03152: object auto_flush_interval,
03153: auto_flush_mode_t* c_auto_flush,
03154: bint* c_auto_flush_bytes_dynamic,
03155: ) except -1:
03156: """Parse the QWP pool's Java-builder-compatible auto-flush policy."""
+03157: cdef bint default_auto_flush_bytes = auto_flush_bytes is None
__pyx_t_1 = (__pyx_v_auto_flush_bytes == Py_None); __pyx_v_default_auto_flush_bytes = __pyx_t_1;
+03158: if auto_flush_rows is None:
__pyx_t_1 = (__pyx_v_auto_flush_rows == Py_None);
if (__pyx_t_1) {
/* … */
}
+03159: auto_flush_rows = 1000
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_1000); __Pyx_DECREF_SET(__pyx_v_auto_flush_rows, __pyx_mstate_global->__pyx_int_1000);
+03160: if auto_flush_bytes is None:
__pyx_t_1 = (__pyx_v_auto_flush_bytes == Py_None);
if (__pyx_t_1) {
/* … */
}
03161: # The pooled path derives its byte threshold from the negotiated frame
03162: # cap. Give the generic parser an enabled placeholder so the byte
03163: # trigger alone still turns auto-flush on; the separate flag records
03164: # that this placeholder is dynamic rather than a literal threshold.
+03165: auto_flush_bytes = 1
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_1); __Pyx_DECREF_SET(__pyx_v_auto_flush_bytes, __pyx_mstate_global->__pyx_int_1);
+03166: if auto_flush_interval is None:
__pyx_t_1 = (__pyx_v_auto_flush_interval == Py_None);
if (__pyx_t_1) {
/* … */
}
+03167: auto_flush_interval = 100
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_100); __Pyx_DECREF_SET(__pyx_v_auto_flush_interval, __pyx_mstate_global->__pyx_int_100);
+03168: _parse_auto_flush(
__pyx_t_2 = __pyx_f_7questdb_7_client__parse_auto_flush(__pyx_v_protocol, __pyx_v_auto_flush, __pyx_v_auto_flush_rows, __pyx_v_auto_flush_bytes, __pyx_v_auto_flush_interval, __pyx_v_c_auto_flush, 0); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 3168, __pyx_L1_error)
03169: protocol,
03170: auto_flush,
03171: auto_flush_rows,
03172: auto_flush_bytes,
03173: auto_flush_interval,
03174: c_auto_flush,
03175: 0)
+03176: c_auto_flush_bytes_dynamic[0] = default_auto_flush_bytes
(__pyx_v_c_auto_flush_bytes_dynamic[0]) = __pyx_v_default_auto_flush_bytes;
03177:
03178:
03179: # The frame cap a QuestDB server advertises with its default settings:
03180: # 2 MiB less 14 bytes.
+03181: cdef size_t _QWP_DEFAULT_SERVER_FRAME_CAP = 2 * 1024 * 1024 - 14
__pyx_v_7questdb_7_client__QWP_DEFAULT_SERVER_FRAME_CAP = 0x1ffff2;
03182:
03183:
+03184: cdef inline size_t _qwp_row_planning_cap(
static CYTHON_INLINE size_t __pyx_f_7questdb_7_client__qwp_row_planning_cap(size_t __pyx_v_hard_cap, int __pyx_v_server_cap_known) {
size_t __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
03185: size_t hard_cap, bint server_cap_known) noexcept:
03186: """
03187: The frame cap a QWP/WebSocket row buffer plans its frames for.
03188:
03189: Until the server advertises its cap, `hard_cap` is only the local
03190: limit, and rows buffered up to it would not fit a server running the
03191: default cap once that cap is known. So the buffer plans for the default
03192: cap until then, or for the local limit if that is lower. Only planning
03193: uses it: a publish refuses a frame by the local limit alone.
03194: """
+03195: if not server_cap_known and hard_cap > _QWP_DEFAULT_SERVER_FRAME_CAP:
__pyx_t_2 = (!__pyx_v_server_cap_known);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_hard_cap > __pyx_v_7questdb_7_client__QWP_DEFAULT_SERVER_FRAME_CAP);
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+03196: return _QWP_DEFAULT_SERVER_FRAME_CAP
{
__pyx_r = __pyx_v_7questdb_7_client__QWP_DEFAULT_SERVER_FRAME_CAP;
}
goto __pyx_L0;
+03197: return hard_cap
{
__pyx_r = __pyx_v_hard_cap;
}
goto __pyx_L0;
03198:
03199:
+03200: cdef size_t _qwp_row_byte_limit(
static size_t __pyx_f_7questdb_7_client__qwp_row_byte_limit(struct __pyx_t_7questdb_7_client_auto_flush_mode_t const *__pyx_v_mode, int __pyx_v_bytes_dynamic, size_t __pyx_v_hard_cap) {
size_t __pyx_v_soft_cap;
size_t __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
03201: const auto_flush_mode_t* mode,
03202: bint bytes_dynamic,
03203: size_t hard_cap) noexcept:
03204: """
03205: The `auto_flush_bytes` threshold of a QWP/WebSocket row buffer whose
03206: byte trigger is on, for the frame cap `hard_cap` it plans for.
03207:
03208: A threshold derived from the frame cap is 90% of it. An explicit
03209: threshold above 90% of the cap is lowered to it.
03210: """
03211: # floor(hard_cap * 0.9) without overflowing size_t.
03212: cdef size_t soft_cap = ((hard_cap // 10) * 9
+03213: + ((hard_cap % 10) * 9) // 10)
__pyx_v_soft_cap = (((__pyx_v_hard_cap / 10) * 9) + (((__pyx_v_hard_cap % 10) * 9) / 10));
+03214: if bytes_dynamic:
if (__pyx_v_bytes_dynamic) {
/* … */
}
+03215: return soft_cap
{
__pyx_r = __pyx_v_soft_cap;
}
goto __pyx_L0;
+03216: if soft_cap < <size_t>mode.byte_count:
__pyx_t_1 = (__pyx_v_soft_cap < ((size_t)__pyx_v_mode->byte_count));
if (__pyx_t_1) {
/* … */
}
+03217: return soft_cap
{
__pyx_r = __pyx_v_soft_cap;
}
goto __pyx_L0;
+03218: return <size_t>mode.byte_count
{
__pyx_r = ((size_t)__pyx_v_mode->byte_count);
}
goto __pyx_L0;
03219:
03220:
+03221: cdef bint _qwp_row_should_auto_flush(
static int __pyx_f_7questdb_7_client__qwp_row_should_auto_flush(struct __pyx_t_7questdb_7_client_auto_flush_mode_t const *__pyx_v_mode, int __pyx_v_bytes_dynamic, struct line_sender_buffer *__pyx_v_buf, size_t __pyx_v_hard_cap, int64_t __pyx_v_interval_start_ms) {
size_t __pyx_v_buffer_size;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
03222: const auto_flush_mode_t* mode,
03223: bint bytes_dynamic,
03224: line_sender_buffer* buf,
03225: size_t hard_cap,
03226: int64_t interval_start_ms) noexcept:
03227: """
03228: Whether a QWP/WebSocket row buffer is due for auto-flush.
03229:
03230: Besides the configured row, byte and interval triggers, a buffer whose
03231: size estimate reaches the full frame cap is always due: it may not fit
03232: in one frame, and publishing now lets the rows before the newest one go
03233: out on their own. `auto_flush_bytes=off` therefore turns off only the
03234: configured byte trigger.
03235: """
03236: cdef size_t buffer_size
+03237: if not mode.enabled:
__pyx_t_1 = (!(__pyx_v_mode->enabled != 0));
if (__pyx_t_1) {
/* … */
}
+03238: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+03239: if (mode.row_count != -1 and
__pyx_t_2 = (__pyx_v_mode->row_count != -1L);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L5_bool_binop_done;
}
/* … */
if (__pyx_t_1) {
/* … */
}
+03240: line_sender_buffer_row_count(buf) >= <size_t>mode.row_count):
__pyx_t_2 = (line_sender_buffer_row_count(__pyx_v_buf) >= ((size_t)__pyx_v_mode->row_count)); __pyx_t_1 = __pyx_t_2; __pyx_L5_bool_binop_done:;
+03241: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+03242: buffer_size = line_sender_buffer_size(buf)
__pyx_v_buffer_size = line_sender_buffer_size(__pyx_v_buf);
+03243: if buffer_size >= hard_cap:
__pyx_t_1 = (__pyx_v_buffer_size >= __pyx_v_hard_cap);
if (__pyx_t_1) {
/* … */
}
+03244: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+03245: if (mode.byte_count != -1 and
__pyx_t_2 = (__pyx_v_mode->byte_count != -1L);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L9_bool_binop_done;
}
/* … */
if (__pyx_t_1) {
/* … */
}
+03246: buffer_size >= _qwp_row_byte_limit(
__pyx_t_2 = (__pyx_v_buffer_size >= __pyx_f_7questdb_7_client__qwp_row_byte_limit(__pyx_v_mode, __pyx_v_bytes_dynamic, __pyx_v_hard_cap)); __pyx_t_1 = __pyx_t_2; __pyx_L9_bool_binop_done:;
03247: mode, bytes_dynamic, hard_cap)):
+03248: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+03249: if (mode.interval != -1 and
__pyx_t_2 = (__pyx_v_mode->interval != -1L);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L12_bool_binop_done;
}
/* … */
if (__pyx_t_1) {
/* … */
}
03250: ((line_sender_now_micros() // 1000) - interval_start_ms)
+03251: >= mode.interval):
__pyx_t_2 = ((__Pyx_div_int64_t(line_sender_now_micros(), 0x3E8, 1) - __pyx_v_interval_start_ms) >= __pyx_v_mode->interval); __pyx_t_1 = __pyx_t_2; __pyx_L12_bool_binop_done:;
+03252: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+03253: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
03254:
03255:
+03256: class TaggedEnum(Enum):
__Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_Enum); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3256, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); { PyObject* __pyx_temp[1] = {__pyx_t_25}; __pyx_t_17 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3256, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); } __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __pyx_t_25 = __pyx_t_17; __Pyx_INCREF(__pyx_t_25); __pyx_t_16 = __Pyx_PEP560_update_bases(__pyx_t_25); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3256, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __pyx_t_25 = __Pyx_CalculateMetaclass(NULL, __pyx_t_16); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3256, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); __pyx_t_5 = __Pyx_Py3MetaclassPrepare(__pyx_t_25, __pyx_t_16, __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_5)) __PYX_ERR(0, 3256, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (__pyx_t_16 != __pyx_t_17) { if (unlikely((PyDict_SetItemString(__pyx_t_5, "__orig_bases__", __pyx_t_17) < 0))) __PYX_ERR(0, 3256, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; /* … */ __pyx_t_18 = __Pyx_Py3ClassCreate(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_TaggedEnum, __pyx_t_16, __pyx_t_5, NULL, 0, 0); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3256, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_TaggedEnum, __pyx_t_18) < (0)) __PYX_ERR(0, 3256, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
03257: """
03258: Base class for tagged enums.
03259: """
03260:
+03261: @property
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_10TaggedEnum_1tag(PyObject *__pyx_self, #if CYTHON_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, 3261, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3261, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "tag", 0) < (0)) __PYX_ERR(0, 3261, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("tag", 1, 1, 1, i); __PYX_ERR(0, 3261, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3261, __pyx_L3_error) } __pyx_v_self = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("tag", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3261, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.TaggedEnum.tag", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_10TaggedEnum_tag(__pyx_self, __pyx_v_self); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_10TaggedEnum_tag(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("questdb._client.TaggedEnum.tag", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = NULL; __pyx_t_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[194])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3261, __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_18, __pyx_t_20}; __pyx_t_17 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_property, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3261, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); } if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_tag, __pyx_t_17) < (0)) __PYX_ERR(0, 3261, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
03262: def tag(self):
03263: """
03264: Short name.
03265: """
+03266: 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, 3266, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3266, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
03267:
+03268: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_10TaggedEnum_3c_value(PyObject *__pyx_self,
#if CYTHON_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, 3268, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3268, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "c_value", 0) < (0)) __PYX_ERR(0, 3268, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("c_value", 1, 1, 1, i); __PYX_ERR(0, 3268, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 1)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3268, __pyx_L3_error)
}
__pyx_v_self = values[0];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("c_value", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3268, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.TaggedEnum.c_value", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_10TaggedEnum_2c_value(__pyx_self, __pyx_v_self);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_10TaggedEnum_2c_value(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.TaggedEnum.c_value", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_20 = NULL;
__pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_10TaggedEnum_3c_value, 0, __pyx_mstate_global->__pyx_n_u_TaggedEnum_c_value, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[195])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3268, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
#endif
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_20, __pyx_t_18};
__pyx_t_17 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_property, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3268, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
}
if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_c_value, __pyx_t_17) < (0)) __PYX_ERR(0, 3268, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
03269: def c_value(self):
+03270: 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, 3270, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 1, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3270, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
03271:
+03272: @classmethod
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_10TaggedEnum_5parse(PyObject *__pyx_self, #if CYTHON_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, 3272, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 3272, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3272, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "parse", 0) < (0)) __PYX_ERR(0, 3272, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 2; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("parse", 1, 2, 2, i); __PYX_ERR(0, 3272, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3272, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 3272, __pyx_L3_error) } __pyx_v_cls = values[0]; __pyx_v_tag = values[1]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("parse", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 3272, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.TaggedEnum.parse", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_10TaggedEnum_4parse(__pyx_self, __pyx_v_cls, __pyx_v_tag); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_10TaggedEnum_4parse(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_cls, PyObject *__pyx_v_tag) { PyObject *__pyx_v_entry = NULL; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_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_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_10TaggedEnum_5parse, __Pyx_CYFUNCTION_CLASSMETHOD, __pyx_mstate_global->__pyx_n_u_TaggedEnum_parse, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[196])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3272, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif __pyx_t_18 = __Pyx_Method_ClassMethod(__pyx_t_17); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3272, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_parse, __pyx_t_18) < (0)) __PYX_ERR(0, 3272, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
03273: def parse(cls, tag):
03274: """
03275: Parse from the tag name.
03276: """
+03277: if tag is None:
__pyx_t_1 = (__pyx_v_tag == Py_None);
if (__pyx_t_1) {
/* … */
}
+03278: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+03279: elif isinstance(tag, cls):
__pyx_t_1 = PyObject_IsInstance(__pyx_v_tag, __pyx_v_cls); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 3279, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+03280: return tag
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_tag);
__pyx_r = __pyx_v_tag;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+03281: elif isinstance(tag, str):
__pyx_t_1 = PyUnicode_Check(__pyx_v_tag);
if (likely(__pyx_t_1)) {
/* … */
}
+03282: for entry in cls:
if (likely(PyList_CheckExact(__pyx_v_cls)) || PyTuple_CheckExact(__pyx_v_cls)) { __pyx_t_2 = __pyx_v_cls; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; __pyx_t_4 = NULL; } else { __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_cls); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3282, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3282, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_4)) { if (likely(PyList_CheckExact(__pyx_t_2))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_2); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 3282, __pyx_L1_error) #endif if (__pyx_t_3 >= __pyx_temp) break; } __pyx_t_5 = __Pyx_PyList_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, 3282, __pyx_L1_error) #endif if (__pyx_t_3 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_5 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3)); #else __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_3); #endif ++__pyx_t_3; } if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3282, __pyx_L1_error) } else { __pyx_t_5 = __pyx_t_4(__pyx_t_2); if (unlikely(!__pyx_t_5)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 3282, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_5); __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_5); __pyx_t_5 = 0; /* … */ } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+03283: if entry.tag == tag:
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_entry, __pyx_mstate_global->__pyx_n_u_tag); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3283, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_5, __pyx_v_tag, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3283, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_1) { /* … */ }
+03284: 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;
+03285: 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, 3285, __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, 3285, __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, 3285, __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, 3285, __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, 3285, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 3285, __pyx_L1_error)
03286: else:
+03287: raise ValueError(f'Invalid value for {cls.__name__}: {tag!r}')
/*else*/ {
__pyx_t_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, 3287, __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, 3287, __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, 3287, __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, 3287, __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, 3287, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 3287, __pyx_L1_error)
}
03288:
03289:
+03290: class Protocol(TaggedEnum):
__Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3290, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); { PyObject* __pyx_temp[1] = {__pyx_t_16}; __pyx_t_25 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3290, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); } __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = __pyx_t_25; __Pyx_INCREF(__pyx_t_16); __pyx_t_5 = __Pyx_PEP560_update_bases(__pyx_t_16); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3290, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = __Pyx_CalculateMetaclass(NULL, __pyx_t_5); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3290, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_18 = __Pyx_Py3MetaclassPrepare(__pyx_t_16, __pyx_t_5, __pyx_mstate_global->__pyx_n_u_Protocol, __pyx_mstate_global->__pyx_n_u_Protocol, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_Protocol_to_use_for_sending_dat); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3290, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__pyx_t_5 != __pyx_t_25) { if (unlikely((PyDict_SetItemString(__pyx_t_18, "__orig_bases__", __pyx_t_25) < 0))) __PYX_ERR(0, 3290, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; /* … */ __pyx_t_25 = __Pyx_Py3ClassCreate(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Protocol, __pyx_t_5, __pyx_t_18, NULL, 0, 0); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3290, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_Protocol, __pyx_t_25) < (0)) __PYX_ERR(0, 3290, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
03291: """
03292: Protocol to use for sending data to QuestDB.
03293:
03294: See :ref:`sender_which_protocol` for more information.
03295: """
+03296: Tcp = ('tcp', 0)
if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_Tcp, __pyx_mstate_global->__pyx_tuple[74]) < (0)) __PYX_ERR(0, 3296, __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[74] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[74])) __PYX_ERR(0, 3296, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[74]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[74]);
+03297: Tcps = ('tcps', 1)
if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_Tcps, __pyx_mstate_global->__pyx_tuple[75]) < (0)) __PYX_ERR(0, 3297, __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[75] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[75])) __PYX_ERR(0, 3297, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[75]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[75]);
+03298: Http = ('http', 2)
if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_Http, __pyx_mstate_global->__pyx_tuple[76]) < (0)) __PYX_ERR(0, 3298, __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[76] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[76])) __PYX_ERR(0, 3298, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[76]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[76]);
+03299: Https = ('https', 3)
if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_Https, __pyx_mstate_global->__pyx_tuple[77]) < (0)) __PYX_ERR(0, 3299, __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[77] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[77])) __PYX_ERR(0, 3299, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[77]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[77]);
+03300: Udp = ('udp', 4)
if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_Udp, __pyx_mstate_global->__pyx_tuple[78]) < (0)) __PYX_ERR(0, 3300, __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[78] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[78])) __PYX_ERR(0, 3300, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[78]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[78]);
+03301: Ws = ('ws', 5)
if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_Ws, __pyx_mstate_global->__pyx_tuple[79]) < (0)) __PYX_ERR(0, 3301, __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[79] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[79])) __PYX_ERR(0, 3301, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[79]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[79]);
+03302: Wss = ('wss', 6)
if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_Wss, __pyx_mstate_global->__pyx_tuple[80]) < (0)) __PYX_ERR(0, 3302, __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[80] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[80])) __PYX_ERR(0, 3302, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[80]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[80]);
03303:
+03304: @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, 3304, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3304, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "tls_enabled", 0) < (0)) __PYX_ERR(0, 3304, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("tls_enabled", 1, 1, 1, i); __PYX_ERR(0, 3304, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 1)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3304, __pyx_L3_error)
}
__pyx_v_self = values[0];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("tls_enabled", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3304, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.Protocol.tls_enabled", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_8Protocol_tls_enabled(__pyx_self, __pyx_v_self);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_8Protocol_tls_enabled(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Protocol.tls_enabled", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_17 = 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[197])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3304, __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_17, __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_17); __pyx_t_17 = 0;
__Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3304, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_25);
}
if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_tls_enabled, __pyx_t_25) < (0)) __PYX_ERR(0, 3304, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
03305: def tls_enabled(self):
+03306: 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, 3306, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Tcps); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3306, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_1, __pyx_t_4, Py_EQ); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 3306, __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, 3306, __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, 3306, __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, 3306, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (!__pyx_t_5) { } else { __pyx_t_2 = __pyx_t_5; goto __pyx_L3_bool_binop_done; } __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Protocol); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3306, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Wss); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3306, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_1, __pyx_t_4, Py_EQ); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 3306, __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, 3306, __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;
03307:
03308:
+03309: class QwpWsProgress(TaggedEnum):
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3309, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); { PyObject* __pyx_temp[1] = {__pyx_t_5}; __pyx_t_16 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3309, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __pyx_t_16; __Pyx_INCREF(__pyx_t_5); __pyx_t_18 = __Pyx_PEP560_update_bases(__pyx_t_5); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3309, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_CalculateMetaclass(NULL, __pyx_t_18); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3309, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_25 = __Pyx_Py3MetaclassPrepare(__pyx_t_5, __pyx_t_18, __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_25)) __PYX_ERR(0, 3309, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); if (__pyx_t_18 != __pyx_t_16) { if (unlikely((PyDict_SetItemString(__pyx_t_25, "__orig_bases__", __pyx_t_16) < 0))) __PYX_ERR(0, 3309, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; /* … */ __pyx_t_16 = __Pyx_Py3ClassCreate(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QwpWsProgress, __pyx_t_18, __pyx_t_25, NULL, 0, 0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3309, __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_QwpWsProgress, __pyx_t_16) < (0)) __PYX_ERR(0, 3309, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
03310: """
03311: Progress mode for QWP/WebSocket senders.
03312: """
+03313: Background = ('background', LINE_SENDER_QWPWS_PROGRESS_BACKGROUND)
__pyx_t_16 = __Pyx_PyLong_From_enum__line_sender_qwpws_progress(LINE_SENDER_QWPWS_PROGRESS_BACKGROUND); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3313, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_background, __pyx_t_16}; __pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3313, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); } __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; if (__Pyx_SetNameInClass(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_Background, __pyx_t_20) < (0)) __PYX_ERR(0, 3313, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+03314: 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, 3314, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_manual, __pyx_t_20}; __pyx_t_16 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3314, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); } __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (__Pyx_SetNameInClass(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_Manual, __pyx_t_16) < (0)) __PYX_ERR(0, 3314, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
03315:
03316:
+03317: class SenderErrorCategory(TaggedEnum):
__Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3317, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); { PyObject* __pyx_temp[1] = {__pyx_t_18}; __pyx_t_5 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3317, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __pyx_t_18 = __pyx_t_5; __Pyx_INCREF(__pyx_t_18); __pyx_t_25 = __Pyx_PEP560_update_bases(__pyx_t_18); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3317, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __pyx_t_18 = __Pyx_CalculateMetaclass(NULL, __pyx_t_25); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3317, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_16 = __Pyx_Py3MetaclassPrepare(__pyx_t_18, __pyx_t_25, __pyx_mstate_global->__pyx_n_u_SenderErrorCategory, __pyx_mstate_global->__pyx_n_u_SenderErrorCategory, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_Category_of_a_structured_QWP_We); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3317, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); if (__pyx_t_25 != __pyx_t_5) { if (unlikely((PyDict_SetItemString(__pyx_t_16, "__orig_bases__", __pyx_t_5) < 0))) __PYX_ERR(0, 3317, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; /* … */ __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_SenderErrorCategory, __pyx_t_25, __pyx_t_16, NULL, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3317, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_SenderErrorCategory, __pyx_t_5) < (0)) __PYX_ERR(0, 3317, __pyx_L1_error) __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_DECREF(__pyx_t_25); __pyx_t_25 = 0;
03318: """
03319: Category of a structured QWP/WebSocket diagnostic.
03320: """
03321: SchemaMismatch = (
+03322: 'schema_mismatch',
{
PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_schema_mismatch, __pyx_t_5};
__pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3322, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_20);
}
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_SchemaMismatch, __pyx_t_20) < (0)) __PYX_ERR(0, 3321, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+03323: LINE_SENDER_QWPWS_ERROR_SCHEMA_MISMATCH)
__pyx_t_5 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_SCHEMA_MISMATCH); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3323, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5);
+03324: 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, 3324, __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_5 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3324, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_ParseError, __pyx_t_5) < (0)) __PYX_ERR(0, 3324, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+03325: InternalError = ('internal_error', LINE_SENDER_QWPWS_ERROR_INTERNAL_ERROR)
__pyx_t_5 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_INTERNAL_ERROR); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3325, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_internal_error, __pyx_t_5}; __pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3325, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_InternalError, __pyx_t_20) < (0)) __PYX_ERR(0, 3325, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+03326: 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, 3326, __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_5 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3326, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_SecurityError, __pyx_t_5) < (0)) __PYX_ERR(0, 3326, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+03327: WriteError = ('write_error', LINE_SENDER_QWPWS_ERROR_WRITE_ERROR)
__pyx_t_5 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_WRITE_ERROR); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3327, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_write_error, __pyx_t_5}; __pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3327, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_WriteError, __pyx_t_20) < (0)) __PYX_ERR(0, 3327, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+03328: 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, 3328, __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_5 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3328, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_NotWritable, __pyx_t_5) < (0)) __PYX_ERR(0, 3328, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
03329: ProtocolViolation = (
+03330: 'protocol_violation',
{
PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_protocol_violation, __pyx_t_5};
__pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3330, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_20);
}
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_ProtocolViolation, __pyx_t_20) < (0)) __PYX_ERR(0, 3329, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+03331: LINE_SENDER_QWPWS_ERROR_PROTOCOL_VIOLATION)
__pyx_t_5 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_PROTOCOL_VIOLATION); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3331, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5);
+03332: 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, 3332, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_unknown, __pyx_t_20}; __pyx_t_5 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3332, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Unknown, __pyx_t_5) < (0)) __PYX_ERR(0, 3332, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
03333:
03334:
+03335: class SenderErrorPolicy(TaggedEnum):
__Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3335, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); { PyObject* __pyx_temp[1] = {__pyx_t_25}; __pyx_t_18 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3335, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); } __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __pyx_t_25 = __pyx_t_18; __Pyx_INCREF(__pyx_t_25); __pyx_t_16 = __Pyx_PEP560_update_bases(__pyx_t_25); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3335, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __pyx_t_25 = __Pyx_CalculateMetaclass(NULL, __pyx_t_16); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3335, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); __pyx_t_5 = __Pyx_Py3MetaclassPrepare(__pyx_t_25, __pyx_t_16, __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_5)) __PYX_ERR(0, 3335, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (__pyx_t_16 != __pyx_t_18) { if (unlikely((PyDict_SetItemString(__pyx_t_5, "__orig_bases__", __pyx_t_18) < 0))) __PYX_ERR(0, 3335, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; /* … */ __pyx_t_20 = __Pyx_Py3ClassCreate(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy, __pyx_t_16, __pyx_t_5, NULL, 0, 0); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3335, __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, 3335, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
03336: """
03337: Applied policy for a structured QWP/WebSocket diagnostic.
03338: """
+03339: Retriable = ('retriable', LINE_SENDER_QWPWS_ERROR_RETRIABLE)
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_policy(LINE_SENDER_QWPWS_ERROR_RETRIABLE); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3339, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_retriable, __pyx_t_18}; __pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3339, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); } __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_Retriable, __pyx_t_20) < (0)) __PYX_ERR(0, 3339, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
03340: RetriableOther = (
+03341: 'retriable_other',
{
PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_retriable_other, __pyx_t_20};
__pyx_t_18 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3341, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
}
__Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_RetriableOther, __pyx_t_18) < (0)) __PYX_ERR(0, 3340, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+03342: 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, 3342, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20);
+03343: Terminal = ('terminal', LINE_SENDER_QWPWS_ERROR_TERMINAL)
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_policy(LINE_SENDER_QWPWS_ERROR_TERMINAL); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3343, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_terminal, __pyx_t_18}; __pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3343, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); } __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_Terminal, __pyx_t_20) < (0)) __PYX_ERR(0, 3343, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
03344:
03345:
+03346: @dataclass(frozen=True)
__pyx_t_20 = NULL; __pyx_t_17 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_dataclass); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3346, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); #if CYTHON_VECTORCALL #endif __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_17, Py_True}; #if CYTHON_VECTORCALL __pyx_t_21 = __pyx_mstate_global->__pyx_tuple[81]; if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 3346, __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, 3346, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_21); } #endif __pyx_t_18 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_19, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_21); __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; #if CYTHON_VECTORCALL #endif __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3346, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); } __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_20, __pyx_t_25}; __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_18, __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_18); __pyx_t_18 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3346, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_SenderError, __pyx_t_5) < (0)) __PYX_ERR(0, 3347, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; /* … */ { PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_frozen}; __pyx_mstate_global->__pyx_tuple[81] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[81])) __PYX_ERR(0, 3346, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[81]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[81]);
+03347: class SenderError:
__pyx_t_16 = __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_16)) __PYX_ERR(0, 3347, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_25 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3347, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_category, __pyx_mstate_global->__pyx_n_u_SenderErrorCategory) < (0)) __PYX_ERR(0, 3347, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_applied_policy, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy) < (0)) __PYX_ERR(0, 3347, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_status, __pyx_mstate_global->__pyx_kp_u_Optional_int) < (0)) __PYX_ERR(0, 3347, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_message, __pyx_mstate_global->__pyx_n_u_str_2) < (0)) __PYX_ERR(0, 3347, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_message_sequence, __pyx_mstate_global->__pyx_kp_u_Optional_int) < (0)) __PYX_ERR(0, 3347, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_from_fsn, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 3347, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_to_fsn, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 3347, __pyx_L1_error) if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_annotations, __pyx_t_25) < (0)) __PYX_ERR(0, 3347, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; /* … */ __pyx_t_25 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_mstate_global->__pyx_n_u_SenderError, __pyx_mstate_global->__pyx_empty_tuple, __pyx_t_16, NULL, 0, 0); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3347, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25); #endif
03348: """Structured QWP/WebSocket server diagnostic."""
03349: category: SenderErrorCategory
03350: applied_policy: SenderErrorPolicy
03351: status: Optional[int]
03352: message: str
03353: message_sequence: Optional[int]
03354: from_fsn: int
03355: to_fsn: int
03356:
03357:
+03358: class ConnectionEventKind(TaggedEnum):
__Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3358, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); { PyObject* __pyx_temp[1] = {__pyx_t_16}; __pyx_t_25 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3358, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); } __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = __pyx_t_25; __Pyx_INCREF(__pyx_t_16); __pyx_t_5 = __Pyx_PEP560_update_bases(__pyx_t_16); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3358, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = __Pyx_CalculateMetaclass(NULL, __pyx_t_5); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3358, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_18 = __Pyx_Py3MetaclassPrepare(__pyx_t_16, __pyx_t_5, __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_18)) __PYX_ERR(0, 3358, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__pyx_t_5 != __pyx_t_25) { if (unlikely((PyDict_SetItemString(__pyx_t_18, "__orig_bases__", __pyx_t_25) < 0))) __PYX_ERR(0, 3358, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; /* … */ __pyx_t_25 = __Pyx_Py3ClassCreate(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_ConnectionEventKind, __pyx_t_5, __pyx_t_18, NULL, 0, 0); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3358, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ConnectionEventKind, __pyx_t_25) < (0)) __PYX_ERR(0, 3358, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
03359: """
03360: Connection-state transitions observed by the ingress connection pool.
03361:
03362: ``Connected``
03363: First successful connect of the pool's lifetime.
03364:
03365: ``Disconnected``
03366: An active wire connection died.
03367:
03368: ``Reconnected``
03369: Reconnect succeeded against the same endpoint after a failure.
03370:
03371: ``FailedOver``
03372: Reconnect succeeded against a different endpoint.
03373:
03374: ``EndpointAttemptFailed``
03375: One endpoint connect/upgrade attempt failed; the walk moves on.
03376:
03377: ``AllEndpointsUnreachable``
03378: Every configured endpoint was attempted and none accepted.
03379:
03380: ``AuthFailed``
03381: The server rejected the credential the client presented: HTTP 401
03382: or 403 on the WebSocket upgrade, once per connect attempt.
03383: :attr:`ConnectionEvent.host` and :attr:`ConnectionEvent.port` are
03384: always set.
03385:
03386: Before a sender's first connection it is terminal, and the owning
03387: sender/pool operation raises. Once connected, a sender keeps
03388: reconnecting with capped backoff and keeps its unacknowledged rows,
03389: reporting each rejected attempt with this event: an
03390: identity-platform outage makes a server reject a valid credential
03391: for a while. To give up instead, close the sender from your own
03392: code. See :ref:`token_rejections`.
03393:
03394: A 401 followed by failure to obtain a replacement token is instead
03395: ``CredentialUnavailable``, which preserves the rejected endpoint and
03396: retains the provider error's retry/stop classification.
03397:
03398: ``CredentialUnavailable``
03399: A token provider -- ``oidc_auth=`` or ``bearer_token_provider=`` --
03400: failed while acquiring a credential.
03401:
03402: Before the first dial, :attr:`ConnectionEvent.host` and
03403: :attr:`ConnectionEvent.port` are ``None``. If the provider fails when
03404: reacquiring a token after a server 401, they identify the endpoint
03405: that rejected the previous token; :attr:`ConnectionEvent.cause_msg`
03406: includes the 401. Read :attr:`ConnectionEvent.cause_code` to tell a
03407: retry from a stop:
03408:
03409: * ``SocketError`` — the ordinary case, and retryable. The sender
03410: keeps reconnecting so queued rows survive while the identity
03411: provider recovers or a human signs in, and nothing is raised to
03412: the caller. A foreground call such as :meth:`QuestDB.dataframe`
03413: raises instead, because a credential problem there is the
03414: caller's to see. With ``oidc_auth=`` it fails fast. With
03415: ``bearer_token_provider=`` it fails fast on a failure the
03416: provider classified permanent, but first retries a retryable one
03417: -- any exception other than a
03418: :class:`~questdb.auth.TokenUnavailableError` with
03419: ``retryable=False`` -- for up to
03420: ``reconnect_max_duration_millis``.
03421: * ``AuthError`` or ``ConfigError`` — the provider cannot recover in
03422: this process, so the reconnect is **terminal** and the sender
03423: stops. Reached by a permanently closed provider
03424: (:meth:`~questdb.auth.OidcDeviceAuth.close` is one-way; cancelling
03425: one :meth:`~questdb.auth.OidcDeviceAuth.sign_in` attempt does not
03426: close it), by a scope that cannot yield the required token kind,
03427: such as ``groups_in_token=True`` against an identity provider that
03428: returns no ID token, and by a ``bearer_token_provider=`` that
03429: raised its own plain :class:`QuestDBError` -- not a
03430: :class:`~questdb.auth.TokenUnavailableError` -- with ``code``
03431: ``InvalidApiCall`` (see
03432: :class:`~questdb.auth.BearerTokenProvider`), which reports
03433: ``ConfigError``, as a closed
03434: :class:`~questdb.auth.RefreshingTokenProvider` does when it is
03435: reached through an application provider: a subclass that
03436: overrides ``token()`` or ``on_rejected()``, or a provider of your
03437: own that calls its ``token()``. Queued rows are not
03438: deleted — a disk-backed store-and-forward slot stays drainable by
03439: a later process — but this process will not send them.
03440:
03441: A listener that pages on a permanent stop must therefore qualify on
03442: ``cause_code``, not on the kind alone.
03443:
03444: Counterpart of the Java client's
03445: ``QwpCredentialUnavailableException``, which is likewise distinct
03446: from its ``QwpAuthFailedException``.
03447: """
+03448: Connected = ('connected', 0)
if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_Connected, __pyx_mstate_global->__pyx_tuple[82]) < (0)) __PYX_ERR(0, 3448, __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[82] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[82])) __PYX_ERR(0, 3448, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[82]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[82]);
+03449: Disconnected = ('disconnected', 1)
if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_Disconnected, __pyx_mstate_global->__pyx_tuple[83]) < (0)) __PYX_ERR(0, 3449, __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[83] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[83])) __PYX_ERR(0, 3449, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[83]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[83]);
+03450: Reconnected = ('reconnected', 2)
if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_Reconnected, __pyx_mstate_global->__pyx_tuple[84]) < (0)) __PYX_ERR(0, 3450, __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[84] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[84])) __PYX_ERR(0, 3450, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[84]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[84]);
+03451: FailedOver = ('failed_over', 3)
if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_FailedOver, __pyx_mstate_global->__pyx_tuple[85]) < (0)) __PYX_ERR(0, 3451, __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[85] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[85])) __PYX_ERR(0, 3451, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[85]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[85]);
+03452: EndpointAttemptFailed = ('endpoint_attempt_failed', 4)
if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_EndpointAttemptFailed, __pyx_mstate_global->__pyx_tuple[86]) < (0)) __PYX_ERR(0, 3452, __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[86] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[86])) __PYX_ERR(0, 3452, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[86]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[86]);
+03453: AllEndpointsUnreachable = ('all_endpoints_unreachable', 5)
if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_AllEndpointsUnreachable, __pyx_mstate_global->__pyx_tuple[87]) < (0)) __PYX_ERR(0, 3453, __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[87] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[87])) __PYX_ERR(0, 3453, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[87]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[87]);
+03454: AuthFailed = ('auth_failed', 6)
if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_AuthFailed, __pyx_mstate_global->__pyx_tuple[88]) < (0)) __PYX_ERR(0, 3454, __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[88] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[88])) __PYX_ERR(0, 3454, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[88]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[88]);
+03455: CredentialUnavailable = ('credential_unavailable', 7)
if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_CredentialUnavailable, __pyx_mstate_global->__pyx_tuple[89]) < (0)) __PYX_ERR(0, 3455, __pyx_L1_error) /* … */ { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_credential_unavailable, __pyx_mstate_global->__pyx_int_7}; __pyx_mstate_global->__pyx_tuple[89] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[89])) __PYX_ERR(0, 3455, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[89]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[89]);
03456:
03457:
+03458: @dataclass(frozen=True)
__pyx_t_25 = NULL; __pyx_t_19 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_dataclass); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 3458, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_21); #if CYTHON_VECTORCALL #endif __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_19, Py_True}; #if CYTHON_VECTORCALL __pyx_t_17 = __pyx_mstate_global->__pyx_tuple[81]; if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3458, __pyx_L1_error) __Pyx_INCREF(__pyx_t_17); #else { PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_frozen}; __pyx_t_17 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3458, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); } #endif __pyx_t_20 = __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_17); __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0; #if CYTHON_VECTORCALL #endif __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3458, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); } __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_25, __pyx_t_16}; __pyx_t_18 = __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_25); __pyx_t_25 = 0; __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3458, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); } if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ConnectionEvent, __pyx_t_18) < (0)) __PYX_ERR(0, 3459, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+03459: class ConnectionEvent:
__pyx_t_5 = __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_5)) __PYX_ERR(0, 3459, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_16 = __Pyx_PyDict_NewPresized(9); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3459, __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, 3459, __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, 3459, __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, 3459, __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, 3459, __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, 3459, __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, 3459, __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, 3459, __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, 3459, __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, 3459, __pyx_L1_error) if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_annotations, __pyx_t_16) < (0)) __PYX_ERR(0, 3459, __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_5, NULL, 0, 0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3459, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_16); #endif
03460: """
03461: One connection-state transition, delivered to the
03462: ``connection_listener`` registered via :meth:`QuestDB.from_conf`.
03463:
03464: Listeners run on a dedicated dispatcher thread — never on an I/O or
03465: caller thread — fed by a bounded inbox with a drop-oldest overflow
03466: policy, so a slow listener cannot stall ingest or reconnects.
03467: Successful events are queued only after negotiated connection state,
03468: including the server-advertised frame cap, is committed. They are not
03469: data-delivery or acknowledgement barriers.
03470: Exceptions raised by the listener are logged and swallowed.
03471: """
03472: kind: ConnectionEventKind
03473: host: Optional[str]
03474: port: Optional[str]
03475: #: For :attr:`ConnectionEventKind.FailedOver`, the previously-active
03476: #: endpoint.
03477: previous_host: Optional[str]
03478: previous_port: Optional[str]
03479: #: Monotonic connect-attempt counter at the time the event fired.
03480: attempt_number: Optional[int]
03481: cause_code: Optional[QuestDBErrorCode]
03482: cause_msg: Optional[str]
03483: #: Wall-clock time of the event, milliseconds since the Unix epoch.
03484: timestamp_millis: int
03485:
03486:
+03487: cdef inline object _conn_event_str(const char* buf, size_t buf_len):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client__conn_event_str(char const *__pyx_v_buf, size_t __pyx_v_buf_len) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client._conn_event_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+03488: if buf == NULL:
__pyx_t_1 = (__pyx_v_buf == NULL);
if (__pyx_t_1) {
/* … */
}
+03489: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+03490: 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, 3490, __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;
03491:
03492:
+03493: cdef class _DispatchContext:
struct __pyx_obj_7questdb_7_client__DispatchContext {
PyObject_HEAD
PyObject *owner_token;
PyObject *error_handler;
PyObject *connection_listener;
};
03494: """Python callback targets and the exact owner they dispatch for.
03495:
03496: Native callback registrations borrow a pointer to this object. Its owner
03497: field is deliberately an opaque token rather than the owning handle, so
03498: the context does not create an owner/context cycle by itself.
03499: """
03500: cdef object owner_token
03501: cdef object error_handler
03502: cdef object connection_listener
03503:
03504:
+03505: cdef _DispatchContext _new_dispatch_context(
static struct __pyx_obj_7questdb_7_client__DispatchContext *__pyx_f_7questdb_7_client__new_dispatch_context(PyObject *__pyx_v_owner_token, PyObject *__pyx_v_error_handler, PyObject *__pyx_v_listener) {
struct __pyx_obj_7questdb_7_client__DispatchContext *__pyx_v_context = 0;
struct __pyx_obj_7questdb_7_client__DispatchContext *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client._new_dispatch_context", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_context);
__Pyx_XGIVEREF((PyObject *)__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
03506: object owner_token, object error_handler, object listener):
+03507: cdef _DispatchContext context = _DispatchContext()
__pyx_t_2 = NULL;
__pyx_t_3 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client__DispatchContext, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3507, __pyx_L1_error)
__Pyx_GOTREF((PyObject *)__pyx_t_1);
}
__pyx_v_context = ((struct __pyx_obj_7questdb_7_client__DispatchContext *)__pyx_t_1);
__pyx_t_1 = 0;
+03508: context.owner_token = owner_token
__Pyx_INCREF(__pyx_v_owner_token); __Pyx_GIVEREF(__pyx_v_owner_token); __Pyx_GOTREF(__pyx_v_context->owner_token); __Pyx_DECREF_SET(__pyx_v_context->owner_token, __pyx_v_owner_token);
+03509: context.error_handler = error_handler
__Pyx_INCREF(__pyx_v_error_handler); __Pyx_GIVEREF(__pyx_v_error_handler); __Pyx_GOTREF(__pyx_v_context->error_handler); __Pyx_DECREF_SET(__pyx_v_context->error_handler, __pyx_v_error_handler);
+03510: context.connection_listener = listener
__Pyx_INCREF(__pyx_v_listener); __Pyx_GIVEREF(__pyx_v_listener); __Pyx_GOTREF(__pyx_v_context->connection_listener); __Pyx_DECREF_SET(__pyx_v_context->connection_listener, __pyx_v_listener);
+03511: 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;
03512:
03513:
03514: # Module-level strong root for callback contexts registered with the native
03515: # dispatchers. It keeps the exact object passed as native `void* user_data`
03516: # reachable from a GC root for as long as its dispatchers can still fire, so
03517: # the cycle collector never clears a live callback's internals (which would
03518: # crash the interpreter when a dispatch calls it). A handle abandoned in a
03519: # reference cycle through its own callback therefore leaks rather than
03520: # crashing; explicit close() removes the entry once the dispatchers are joined
03521: # and lets the cycle collect.
+03522: _LIVE_CALLBACK_REFS = {}
__pyx_t_5 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3522, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_LIVE_CALLBACK_REFS, __pyx_t_5) < (0)) __PYX_ERR(0, 3522, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
03523:
03524:
03525: # The registry is keyed by a value captured while the owner is alive and
03526: # released through that key alone: `tp_dealloc` must never pass the dying
03527: # owner back into Python-level calls (PyPy's cpyext aborts on reviving a
03528: # dying object mid-dealloc).
+03529: cdef size_t _retain_callback_refs(object owner, object context):
static size_t __pyx_f_7questdb_7_client__retain_callback_refs(PyObject *__pyx_v_owner, PyObject *__pyx_v_context) {
size_t __pyx_v_key;
size_t __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client._retain_callback_refs", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1L;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+03530: cdef size_t key = id(owner)
__pyx_t_2 = NULL;
__pyx_t_3 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_owner};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_id, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3530, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_t_3 = __Pyx_PyLong_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_3 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 3530, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_v_key = __pyx_t_3;
+03531: _LIVE_CALLBACK_REFS[key] = context
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_LIVE_CALLBACK_REFS); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3531, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (unlikely((__Pyx_SetItemInt(__pyx_t_1, __pyx_v_key, __pyx_v_context, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 3531, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+03532: return key
{
__pyx_r = __pyx_v_key;
}
goto __pyx_L0;
03533:
03534:
+03535: cdef _release_callback_refs(size_t key):
static PyObject *__pyx_f_7questdb_7_client__release_callback_refs(size_t __pyx_v_key) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client._release_callback_refs", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+03536: if key != 0:
__pyx_t_1 = (__pyx_v_key != 0);
if (__pyx_t_1) {
/* … */
}
+03537: _LIVE_CALLBACK_REFS.pop(key, None)
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_LIVE_CALLBACK_REFS); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3537, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_pop); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3537, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_4 = __Pyx_PyLong_FromSize_t(__pyx_v_key); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3537, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_6 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_5))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
__pyx_t_6 = 0;
}
#endif
{
PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_4, Py_None};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3537, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
03538:
03539:
03540: # Scoped call depths and callback-dispatch depths live in native
03541: # thread-local storage, keyed by owner token identity, because `row()`
03542: # raises and lowers a scoped depth on every pooled row and checks the
03543: # dispatch depth on every standalone ws row: the
03544: # whole table is reached through a single `PyThread_tss_get`, and the
03545: # per-owner entry through a scan of the handful of owners a thread has
03546: # calls or dispatches in progress on. The key is process-wide -- OS TLS
03547: # keys are a capped process resource, so one per handle exhausts them --
03548: # and holds a table per thread rather than a single count, so each count
03549: # belongs to one owner. While no callback is being dispatched anywhere,
03550: # `_dispatching_for` answers from `_DISPATCHES_IN_PROGRESS` without reaching
03551: # the table at all.
03552: cdef Py_tss_t _SCOPED_DEPTH_KEY
03553:
+03554: if PyThread_tss_create(&_SCOPED_DEPTH_KEY) != 0:
__pyx_t_8 = (PyThread_tss_create((&__pyx_v_7questdb_7_client__SCOPED_DEPTH_KEY)) != 0);
if (unlikely(__pyx_t_8)) {
/* … */
}
+03555: raise RuntimeError('Could not create the QuestDB thread-state key.')
__pyx_t_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_5 = __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_5)) __PYX_ERR(0, 3555, __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, 3555, __pyx_L1_error)
03556:
+03557: cdef enum:
enum {
__pyx_e_7questdb_7_client__SCOPED_TABLE_INIT_SLOTS = 4
};
03558: _SCOPED_TABLE_INIT_SLOTS = 4
03559:
03560: # Callback dispatches in progress on every thread together. Changed only with
03561: # the GIL held, by `_enter_dispatch` and `_exit_dispatch`. A count left raised
03562: # by a failed exit only costs the lookup it saves.
+03563: cdef size_t _DISPATCHES_IN_PROGRESS = 0
__pyx_v_7questdb_7_client__DISPATCHES_IN_PROGRESS = 0;
03564:
03565:
+03566: ctypedef struct scoped_slot_t:
struct __pyx_t_7questdb_7_client_scoped_slot_t {
void *owner;
uintptr_t depth;
uintptr_t dispatch;
};
03567: # Borrowed identity only, never dereferenced: the owning handle keeps
03568: # its token alive for as long as it can have calls in progress, a
03569: # dispatch context keeps it alive for as long as its callbacks can
03570: # run, and an entry is dropped the moment both its counts reach zero,
03571: # so an address a later token reuses is never already in the table.
03572: void* owner
03573: # Scoped calls in progress for this owner on this thread.
03574: uintptr_t depth
03575: # Callback dispatches in progress for this owner on this thread.
03576: uintptr_t dispatch
03577:
03578:
+03579: ctypedef struct scoped_table_t:
struct __pyx_t_7questdb_7_client_scoped_table_t {
size_t used;
size_t cap;
__pyx_t_7questdb_7_client_scoped_slot_t *slots;
};
03580: size_t used
03581: size_t cap
03582: scoped_slot_t* slots
03583:
03584:
+03585: cdef const char* _SCOPED_TABLE_CAPSULE_NAME = b'questdb._client.scoped_table'
__pyx_v_7questdb_7_client__SCOPED_TABLE_CAPSULE_NAME = __pyx_k_questdb__client_scoped_table;
03586:
03587: # The key the owning capsule is stored under in each thread state's dict.
03588: # The dict is shared by everything in the process, so the key is an object
03589: # unique to this module instance: no other writer, including another loaded
03590: # copy of this extension, can replace the capsule and free a table that a
03591: # call in progress is using. A module global rather than a C constant, so
03592: # a test can substitute a key whose hash runs code at the moment the table
03593: # is first recorded.
+03594: _SCOPED_TABLE_KEY = object()
__pyx_t_16 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_16, NULL};
__pyx_t_5 = __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_5)) __PYX_ERR(0, 3594, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_SCOPED_TABLE_KEY, __pyx_t_5) < (0)) __PYX_ERR(0, 3594, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
03595:
03596:
+03597: cdef void _scoped_table_free(object capsule) noexcept:
static void __pyx_f_7questdb_7_client__scoped_table_free(PyObject *__pyx_v_capsule) {
__pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_WriteUnraisable("questdb._client._scoped_table_free", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
}
+03598: cdef scoped_table_t* table = <scoped_table_t*>PyCapsule_GetPointer(
__pyx_t_1 = PyCapsule_GetPointer(__pyx_v_capsule, __pyx_v_7questdb_7_client__SCOPED_TABLE_CAPSULE_NAME); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 3598, __pyx_L1_error) __pyx_v_table = ((__pyx_t_7questdb_7_client_scoped_table_t *)__pyx_t_1);
03599: capsule, _SCOPED_TABLE_CAPSULE_NAME)
+03600: if table == NULL:
__pyx_t_2 = (__pyx_v_table == NULL);
if (__pyx_t_2) {
/* … */
}
+03601: return
{
}
goto __pyx_L0;
03602: # A thread's Python state can end while its OS thread lives on: every
03603: # call into Python from a native thread gets a fresh one. That state's
03604: # table is freed on its own thread, so the native slot is cleared here
03605: # and the next scoped call or dispatch on that thread builds a new
03606: # table. A thread state can also be cleared from another thread --
03607: # interpreter finalization clears the states of threads still running,
03608: # and a forked child those of the parent's other threads -- so the slot
03609: # is cleared only when it holds the table being freed.
+03610: if <scoped_table_t*>PyThread_tss_get(&_SCOPED_DEPTH_KEY) == table:
__pyx_t_2 = (((__pyx_t_7questdb_7_client_scoped_table_t *)PyThread_tss_get((&__pyx_v_7questdb_7_client__SCOPED_DEPTH_KEY))) == __pyx_v_table);
if (__pyx_t_2) {
/* … */
}
+03611: PyThread_tss_set(&_SCOPED_DEPTH_KEY, NULL)
(void)(PyThread_tss_set((&__pyx_v_7questdb_7_client__SCOPED_DEPTH_KEY), NULL));
+03612: free(table.slots)
free(__pyx_v_table->slots);
+03613: free(table)
free(__pyx_v_table);
03614:
03615:
+03616: cdef inline scoped_table_t* _scoped_table() noexcept:
static CYTHON_INLINE __pyx_t_7questdb_7_client_scoped_table_t *__pyx_f_7questdb_7_client__scoped_table(void) {
__pyx_t_7questdb_7_client_scoped_table_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
+03617: return <scoped_table_t*>PyThread_tss_get(&_SCOPED_DEPTH_KEY)
{
__pyx_r = ((__pyx_t_7questdb_7_client_scoped_table_t *)PyThread_tss_get((&__pyx_v_7questdb_7_client__SCOPED_DEPTH_KEY)));
}
goto __pyx_L0;
03618:
03619:
+03620: cdef scoped_table_t* _scoped_table_ensure() except NULL:
static __pyx_t_7questdb_7_client_scoped_table_t *__pyx_f_7questdb_7_client__scoped_table_ensure(void) {
__pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table;
PyObject *__pyx_v_state_dict;
PyObject *__pyx_v_capsule = NULL;
__pyx_t_7questdb_7_client_scoped_table_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client._scoped_table_ensure", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_capsule);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
03621: """This thread's table, created on its first scoped call or callback
03622: dispatch.
03623:
03624: A capsule in the thread state's dict owns the table: it is what frees
03625: it when the thread state ends. The native key caches the same pointer
03626: so the per-row path never reaches the Python dict again.
03627:
03628: The thread state is shared by every greenlet on the OS thread, so the
03629: table's owner lives exactly as long as the per-thread cache, and no
03630: greenlet's exit frees a table another greenlet's suspended call is
03631: using.
03632: """
+03633: cdef scoped_table_t* table = _scoped_table()
__pyx_v_table = __pyx_f_7questdb_7_client__scoped_table();
03634: cdef PyObject* state_dict
+03635: if table != NULL:
__pyx_t_1 = (__pyx_v_table != NULL);
if (__pyx_t_1) {
/* … */
}
+03636: return table
{
__pyx_r = __pyx_v_table;
}
goto __pyx_L0;
+03637: state_dict = PyThreadState_GetDict()
__pyx_v_state_dict = PyThreadState_GetDict();
+03638: if state_dict == NULL:
__pyx_t_1 = (__pyx_v_state_dict == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+03639: raise RuntimeError('Could not reach the QuestDB thread state.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Could_not_reach_the_QuestDB_thre};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3639, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 3639, __pyx_L1_error)
+03640: table = <scoped_table_t*>calloc(1, sizeof(scoped_table_t))
__pyx_v_table = ((__pyx_t_7questdb_7_client_scoped_table_t *)calloc(1, (sizeof(__pyx_t_7questdb_7_client_scoped_table_t))));
+03641: if table == NULL:
__pyx_t_1 = (__pyx_v_table == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+03642: raise MemoryError('Could not allocate QuestDB thread-use counters.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Could_not_allocate_QuestDB_threa};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_MemoryError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3642, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 3642, __pyx_L1_error)
+03643: table.slots = <scoped_slot_t*>malloc(
__pyx_v_table->slots = ((__pyx_t_7questdb_7_client_scoped_slot_t *)malloc((__pyx_e_7questdb_7_client__SCOPED_TABLE_INIT_SLOTS * (sizeof(__pyx_t_7questdb_7_client_scoped_slot_t)))));
03644: _SCOPED_TABLE_INIT_SLOTS * sizeof(scoped_slot_t))
+03645: if table.slots == NULL:
__pyx_t_1 = (__pyx_v_table->slots == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+03646: free(table)
free(__pyx_v_table);
+03647: raise MemoryError('Could not allocate QuestDB thread-use counters.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Could_not_allocate_QuestDB_threa};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_MemoryError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3647, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 3647, __pyx_L1_error)
+03648: table.cap = _SCOPED_TABLE_INIT_SLOTS
__pyx_v_table->cap = __pyx_e_7questdb_7_client__SCOPED_TABLE_INIT_SLOTS;
+03649: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
goto __pyx_L12_try_end;
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
goto __pyx_L1_error;
__pyx_L12_try_end:;
}
+03650: capsule = PyCapsule_New(
__pyx_t_2 = PyCapsule_New(__pyx_v_table, __pyx_v_7questdb_7_client__SCOPED_TABLE_CAPSULE_NAME, ((PyCapsule_Destructor)__pyx_f_7questdb_7_client__scoped_table_free)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3650, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_capsule = __pyx_t_2; __pyx_t_2 = 0;
03651: table, _SCOPED_TABLE_CAPSULE_NAME,
03652: <PyCapsule_Destructor>_scoped_table_free)
+03653: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._scoped_table_ensure", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_8) < 0) __PYX_ERR(0, 3653, __pyx_L9_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_8);
+03654: free(table.slots)
free(__pyx_v_table->slots);
+03655: free(table)
free(__pyx_v_table);
+03656: raise
__Pyx_GIVEREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_3); __Pyx_XGIVEREF(__pyx_t_8); __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_3, __pyx_t_8); __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_8 = 0; __PYX_ERR(0, 3656, __pyx_L9_except_error) }
03657: # From here the capsule owns the table, so every later failure hands
03658: # the cleanup to it by letting it go out of scope.
+03659: if PyThread_tss_set(&_SCOPED_DEPTH_KEY, <void*>table) != 0:
__pyx_t_1 = (PyThread_tss_set((&__pyx_v_7questdb_7_client__SCOPED_DEPTH_KEY), ((void *)__pyx_v_table)) != 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+03660: raise RuntimeError('Could not record a QuestDB thread-use counter.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Could_not_record_a_QuestDB_threa};
__pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3660, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
}
__Pyx_Raise(__pyx_t_8, 0, 0, 0);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__PYX_ERR(0, 3660, __pyx_L1_error)
+03661: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L21_try_end;
__pyx_L16_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L18_except_error:;
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_7, __pyx_t_6, __pyx_t_5);
goto __pyx_L1_error;
__pyx_L21_try_end:;
}
+03662: (<dict>state_dict)[_SCOPED_TABLE_KEY] = capsule
if (unlikely(((PyObject *)__pyx_v_state_dict) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
__PYX_ERR(0, 3662, __pyx_L16_error)
}
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_SCOPED_TABLE_KEY); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3662, __pyx_L16_error)
__Pyx_GOTREF(__pyx_t_8);
if (unlikely((PyDict_SetItem(((PyObject*)__pyx_v_state_dict), __pyx_t_8, __pyx_v_capsule) < 0))) __PYX_ERR(0, 3662, __pyx_L16_error)
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+03663: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._scoped_table_ensure", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_3, &__pyx_t_2) < 0) __PYX_ERR(0, 3663, __pyx_L18_except_error)
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_2);
+03664: PyThread_tss_set(&_SCOPED_DEPTH_KEY, NULL)
(void)(PyThread_tss_set((&__pyx_v_7questdb_7_client__SCOPED_DEPTH_KEY), NULL));
+03665: raise
__Pyx_GIVEREF(__pyx_t_8); __Pyx_GIVEREF(__pyx_t_3); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_ErrRestoreWithState(__pyx_t_8, __pyx_t_3, __pyx_t_2); __pyx_t_8 = 0; __pyx_t_3 = 0; __pyx_t_2 = 0; __PYX_ERR(0, 3665, __pyx_L18_except_error) }
+03666: return table
{
__pyx_r = __pyx_v_table;
}
goto __pyx_L0;
03667:
03668:
+03669: cdef inline scoped_slot_t* _scoped_slot(
static CYTHON_INLINE __pyx_t_7questdb_7_client_scoped_slot_t *__pyx_f_7questdb_7_client__scoped_slot(__pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table, void *__pyx_v_owner) {
size_t __pyx_v_i;
__pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_slots;
__pyx_t_7questdb_7_client_scoped_slot_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
03670: scoped_table_t* table, void* owner) noexcept:
03671: cdef size_t i
+03672: cdef scoped_slot_t* slots = table.slots
__pyx_t_1 = __pyx_v_table->slots; __pyx_v_slots = __pyx_t_1;
+03673: for i in range(table.used):
__pyx_t_2 = __pyx_v_table->used;
__pyx_t_3 = __pyx_t_2;
for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
__pyx_v_i = __pyx_t_4;
+03674: if slots[i].owner == owner:
__pyx_t_5 = ((__pyx_v_slots[__pyx_v_i]).owner == __pyx_v_owner);
if (__pyx_t_5) {
/* … */
}
}
+03675: return &slots[i]
{
__pyx_r = (&(__pyx_v_slots[__pyx_v_i]));
}
goto __pyx_L0;
+03676: return NULL
{
__pyx_r = NULL;
}
goto __pyx_L0;
03677:
03678:
+03679: cdef uintptr_t _scoped_depth_for(object owner_token) except? <uintptr_t>-1:
static uintptr_t __pyx_f_7questdb_7_client__scoped_depth_for(PyObject *__pyx_v_owner_token) {
__pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table;
__pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_slot;
uintptr_t __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
+03680: cdef scoped_table_t* table = _scoped_table()
__pyx_v_table = __pyx_f_7questdb_7_client__scoped_table();
03681: cdef scoped_slot_t* slot
+03682: if table == NULL:
__pyx_t_1 = (__pyx_v_table == NULL);
if (__pyx_t_1) {
/* … */
}
+03683: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+03684: slot = _scoped_slot(table, <void*>owner_token)
__pyx_v_slot = __pyx_f_7questdb_7_client__scoped_slot(__pyx_v_table, ((void *)__pyx_v_owner_token));
+03685: if slot == NULL:
__pyx_t_1 = (__pyx_v_slot == NULL);
if (__pyx_t_1) {
/* … */
}
+03686: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+03687: return slot.depth
{
__pyx_r = __pyx_v_slot->depth;
}
goto __pyx_L0;
03688:
03689:
+03690: cdef inline scoped_slot_t* _scoped_slot_add(
static CYTHON_INLINE __pyx_t_7questdb_7_client_scoped_slot_t *__pyx_f_7questdb_7_client__scoped_slot_add(__pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table, void *__pyx_v_owner) {
size_t __pyx_v_cap;
__pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_grown;
__pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_slot;
__pyx_t_7questdb_7_client_scoped_slot_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._scoped_slot_add", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
03691: scoped_table_t* table, void* owner) except NULL:
03692: """Append an entry for `owner` with both counts at zero."""
03693: cdef size_t cap
03694: cdef scoped_slot_t* grown
03695: cdef scoped_slot_t* slot
+03696: if table.used == table.cap:
__pyx_t_1 = (__pyx_v_table->used == __pyx_v_table->cap);
if (__pyx_t_1) {
/* … */
}
+03697: cap = table.cap * 2
__pyx_v_cap = (__pyx_v_table->cap * 2);
+03698: grown = <scoped_slot_t*>realloc(
__pyx_v_grown = ((__pyx_t_7questdb_7_client_scoped_slot_t *)realloc(__pyx_v_table->slots, (__pyx_v_cap * (sizeof(__pyx_t_7questdb_7_client_scoped_slot_t)))));
03699: table.slots, cap * sizeof(scoped_slot_t))
+03700: if grown == NULL:
__pyx_t_1 = (__pyx_v_grown == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+03701: raise MemoryError(
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Could_not_allocate_QuestDB_threa};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_MemoryError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3701, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 3701, __pyx_L1_error)
03702: 'Could not allocate QuestDB thread-use counters.')
+03703: table.slots = grown
__pyx_v_table->slots = __pyx_v_grown;
+03704: table.cap = cap
__pyx_v_table->cap = __pyx_v_cap;
+03705: slot = &table.slots[table.used]
__pyx_v_slot = (&(__pyx_v_table->slots[__pyx_v_table->used]));
+03706: slot.owner = owner
__pyx_v_slot->owner = __pyx_v_owner;
+03707: slot.depth = 0
__pyx_v_slot->depth = 0;
+03708: slot.dispatch = 0
__pyx_v_slot->dispatch = 0;
+03709: table.used += 1
__pyx_v_table->used = (__pyx_v_table->used + 1);
+03710: return slot
{
__pyx_r = __pyx_v_slot;
}
goto __pyx_L0;
03711:
03712:
+03713: cdef inline void _scoped_slot_drop_if_idle(
static CYTHON_INLINE void __pyx_f_7questdb_7_client__scoped_slot_drop_if_idle(__pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table, __pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_slot) {
/* … */
/* function exit code */
}
03714: scoped_table_t* table, scoped_slot_t* slot) noexcept:
03715: # Vacated by moving the last entry down, which keeps the scan over
03716: # `used` dense and drops the borrowed owner address.
+03717: if slot.depth == 0 and slot.dispatch == 0:
__pyx_t_2 = (__pyx_v_slot->depth == 0);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_slot->dispatch == 0);
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+03718: table.used -= 1
__pyx_v_table->used = (__pyx_v_table->used - 1);
+03719: slot[0] = table.slots[table.used]
(__pyx_v_slot[0]) = (__pyx_v_table->slots[__pyx_v_table->used]);
03720:
03721:
+03722: cdef void _enter_scoped_for(object owner_token) except *:
static void __pyx_f_7questdb_7_client__enter_scoped_for(PyObject *__pyx_v_owner_token) {
__pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table;
void *__pyx_v_owner;
__pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_slot;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client._enter_scoped_for", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
}
+03723: cdef scoped_table_t* table = _scoped_table_ensure()
__pyx_t_1 = __pyx_f_7questdb_7_client__scoped_table_ensure(); if (unlikely(__pyx_t_1 == ((void *)NULL))) __PYX_ERR(0, 3723, __pyx_L1_error)
__pyx_v_table = __pyx_t_1;
+03724: cdef void* owner = <void*>owner_token
__pyx_v_owner = ((void *)__pyx_v_owner_token);
+03725: cdef scoped_slot_t* slot = _scoped_slot(table, owner)
__pyx_v_slot = __pyx_f_7questdb_7_client__scoped_slot(__pyx_v_table, __pyx_v_owner);
+03726: if slot == NULL:
__pyx_t_2 = (__pyx_v_slot == NULL);
if (__pyx_t_2) {
/* … */
}
+03727: slot = _scoped_slot_add(table, owner)
__pyx_t_3 = __pyx_f_7questdb_7_client__scoped_slot_add(__pyx_v_table, __pyx_v_owner); if (unlikely(__pyx_t_3 == ((void *)NULL))) __PYX_ERR(0, 3727, __pyx_L1_error)
__pyx_v_slot = __pyx_t_3;
+03728: slot.depth += 1
__pyx_v_slot->depth = (__pyx_v_slot->depth + 1);
03729:
03730:
+03731: cdef void _exit_scoped_for(object owner_token) except *:
static void __pyx_f_7questdb_7_client__exit_scoped_for(PyObject *__pyx_v_owner_token) {
__pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table;
__pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_slot;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._exit_scoped_for", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
+03732: cdef scoped_table_t* table = _scoped_table()
__pyx_v_table = __pyx_f_7questdb_7_client__scoped_table();
03733: cdef scoped_slot_t* slot
+03734: if table == NULL:
__pyx_t_1 = (__pyx_v_table == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+03735: raise RuntimeError('QuestDB thread-use counter underflow.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_QuestDB_thread_use_counter_under};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3735, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 3735, __pyx_L1_error)
+03736: slot = _scoped_slot(table, <void*>owner_token)
__pyx_v_slot = __pyx_f_7questdb_7_client__scoped_slot(__pyx_v_table, ((void *)__pyx_v_owner_token));
+03737: if slot == NULL or slot.depth == 0:
__pyx_t_5 = (__pyx_v_slot == NULL);
if (!__pyx_t_5) {
} else {
__pyx_t_1 = __pyx_t_5;
goto __pyx_L5_bool_binop_done;
}
__pyx_t_5 = (__pyx_v_slot->depth == 0);
__pyx_t_1 = __pyx_t_5;
__pyx_L5_bool_binop_done:;
if (unlikely(__pyx_t_1)) {
/* … */
}
+03738: raise RuntimeError('QuestDB thread-use counter underflow.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_QuestDB_thread_use_counter_under};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3738, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 3738, __pyx_L1_error)
+03739: slot.depth -= 1
__pyx_v_slot->depth = (__pyx_v_slot->depth - 1);
+03740: _scoped_slot_drop_if_idle(table, slot)
__pyx_f_7questdb_7_client__scoped_slot_drop_if_idle(__pyx_v_table, __pyx_v_slot);
03741:
03742:
+03743: cdef void _enter_dispatch(object owner_token) except *:
static void __pyx_f_7questdb_7_client__enter_dispatch(PyObject *__pyx_v_owner_token) {
__pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table;
void *__pyx_v_owner;
__pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_slot;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client._enter_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
}
03744: global _DISPATCHES_IN_PROGRESS
+03745: cdef scoped_table_t* table = _scoped_table_ensure()
__pyx_t_1 = __pyx_f_7questdb_7_client__scoped_table_ensure(); if (unlikely(__pyx_t_1 == ((void *)NULL))) __PYX_ERR(0, 3745, __pyx_L1_error)
__pyx_v_table = __pyx_t_1;
+03746: cdef void* owner = <void*>owner_token
__pyx_v_owner = ((void *)__pyx_v_owner_token);
+03747: cdef scoped_slot_t* slot = _scoped_slot(table, owner)
__pyx_v_slot = __pyx_f_7questdb_7_client__scoped_slot(__pyx_v_table, __pyx_v_owner);
+03748: if slot == NULL:
__pyx_t_2 = (__pyx_v_slot == NULL);
if (__pyx_t_2) {
/* … */
}
+03749: slot = _scoped_slot_add(table, owner)
__pyx_t_3 = __pyx_f_7questdb_7_client__scoped_slot_add(__pyx_v_table, __pyx_v_owner); if (unlikely(__pyx_t_3 == ((void *)NULL))) __PYX_ERR(0, 3749, __pyx_L1_error)
__pyx_v_slot = __pyx_t_3;
+03750: slot.dispatch += 1
__pyx_v_slot->dispatch = (__pyx_v_slot->dispatch + 1);
+03751: _DISPATCHES_IN_PROGRESS += 1
__pyx_v_7questdb_7_client__DISPATCHES_IN_PROGRESS = (__pyx_v_7questdb_7_client__DISPATCHES_IN_PROGRESS + 1);
03752:
03753:
+03754: cdef void _exit_dispatch(object owner_token) except *:
static void __pyx_f_7questdb_7_client__exit_dispatch(PyObject *__pyx_v_owner_token) {
__pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table;
__pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_slot;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._exit_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
03755: global _DISPATCHES_IN_PROGRESS
+03756: cdef scoped_table_t* table = _scoped_table()
__pyx_v_table = __pyx_f_7questdb_7_client__scoped_table();
03757: cdef scoped_slot_t* slot
+03758: if table == NULL:
__pyx_t_1 = (__pyx_v_table == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+03759: raise RuntimeError('QuestDB callback-dispatch counter underflow.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_QuestDB_callback_dispatch_counte};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3759, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 3759, __pyx_L1_error)
+03760: slot = _scoped_slot(table, <void*>owner_token)
__pyx_v_slot = __pyx_f_7questdb_7_client__scoped_slot(__pyx_v_table, ((void *)__pyx_v_owner_token));
+03761: if slot == NULL or slot.dispatch == 0:
__pyx_t_5 = (__pyx_v_slot == NULL);
if (!__pyx_t_5) {
} else {
__pyx_t_1 = __pyx_t_5;
goto __pyx_L5_bool_binop_done;
}
__pyx_t_5 = (__pyx_v_slot->dispatch == 0);
__pyx_t_1 = __pyx_t_5;
__pyx_L5_bool_binop_done:;
if (unlikely(__pyx_t_1)) {
/* … */
}
+03762: raise RuntimeError('QuestDB callback-dispatch counter underflow.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_QuestDB_callback_dispatch_counte};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3762, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 3762, __pyx_L1_error)
+03763: slot.dispatch -= 1
__pyx_v_slot->dispatch = (__pyx_v_slot->dispatch - 1);
+03764: _DISPATCHES_IN_PROGRESS -= 1
__pyx_v_7questdb_7_client__DISPATCHES_IN_PROGRESS = (__pyx_v_7questdb_7_client__DISPATCHES_IN_PROGRESS - 1);
+03765: _scoped_slot_drop_if_idle(table, slot)
__pyx_f_7questdb_7_client__scoped_slot_drop_if_idle(__pyx_v_table, __pyx_v_slot);
03766:
03767:
+03768: cdef inline bint _dispatching_for(object owner_token) noexcept:
static CYTHON_INLINE int __pyx_f_7questdb_7_client__dispatching_for(PyObject *__pyx_v_owner_token) {
__pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table;
__pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_slot;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
03769: cdef scoped_table_t* table
03770: cdef scoped_slot_t* slot
+03771: if _DISPATCHES_IN_PROGRESS == 0:
__pyx_t_1 = (__pyx_v_7questdb_7_client__DISPATCHES_IN_PROGRESS == 0);
if (__pyx_t_1) {
/* … */
}
+03772: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+03773: table = _scoped_table()
__pyx_v_table = __pyx_f_7questdb_7_client__scoped_table();
+03774: if table == NULL:
__pyx_t_1 = (__pyx_v_table == NULL);
if (__pyx_t_1) {
/* … */
}
+03775: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+03776: slot = _scoped_slot(table, <void*>owner_token)
__pyx_v_slot = __pyx_f_7questdb_7_client__scoped_slot(__pyx_v_table, ((void *)__pyx_v_owner_token));
+03777: return slot != NULL and slot.dispatch != 0
__pyx_t_2 = (__pyx_v_slot != NULL);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L5_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_slot->dispatch != 0);
__pyx_t_1 = __pyx_t_2;
__pyx_L5_bool_binop_done:;
{
__pyx_r = __pyx_t_1;
}
goto __pyx_L0;
03778:
03779:
+03780: cdef void _connection_event_dispatch(
static void __pyx_f_7questdb_7_client__connection_event_dispatch(void *__pyx_v_user_data, struct questdb_connection_event const *__pyx_v_event) {
struct __pyx_obj_7questdb_7_client__DispatchContext *__pyx_v_context = 0;
int __pyx_v_entered;
PyObject *__pyx_v_kind = NULL;
PyObject *__pyx_v_entry = NULL;
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_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);
}
03781: void* user_data,
03782: const questdb_connection_event* event) noexcept with gil:
+03783: cdef _DispatchContext context = <_DispatchContext>user_data
__pyx_t_1 = ((PyObject *)__pyx_v_user_data);
__Pyx_INCREF(__pyx_t_1);
__pyx_v_context = ((struct __pyx_obj_7questdb_7_client__DispatchContext *)__pyx_t_1);
__pyx_t_1 = 0;
+03784: cdef bint entered = False
__pyx_v_entered = 0;
+03785: try:
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L11_try_end;
__pyx_L6_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_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:;
}
}
+03786: _enter_dispatch(context.owner_token)
__pyx_t_1 = __pyx_v_context->owner_token;
__Pyx_INCREF(__pyx_t_1);
__pyx_f_7questdb_7_client__enter_dispatch(__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3786, __pyx_L6_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+03787: entered = True
__pyx_v_entered = 1;
+03788: kind = ConnectionEventKind.Connected
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ConnectionEventKind); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3788, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_Connected); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3788, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_kind = __pyx_t_5; __pyx_t_5 = 0;
+03789: for entry in ConnectionEventKind:
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ConnectionEventKind); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3789, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_5); if (likely(PyList_CheckExact(__pyx_t_5)) || PyTuple_CheckExact(__pyx_t_5)) { __pyx_t_1 = __pyx_t_5; __Pyx_INCREF(__pyx_t_1); __pyx_t_6 = 0; __pyx_t_7 = NULL; } else { __pyx_t_6 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3789, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3789, __pyx_L6_error) } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; for (;;) { if (likely(!__pyx_t_7)) { if (likely(PyList_CheckExact(__pyx_t_1))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 3789, __pyx_L6_error) #endif if (__pyx_t_6 >= __pyx_temp) break; } __pyx_t_5 = __Pyx_PyList_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, 3789, __pyx_L6_error) #endif if (__pyx_t_6 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_5 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_6)); #else __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_6); #endif ++__pyx_t_6; } if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3789, __pyx_L6_error) } else { __pyx_t_5 = __pyx_t_7(__pyx_t_1); if (unlikely(!__pyx_t_5)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 3789, __pyx_L6_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_5); __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_5); __pyx_t_5 = 0; /* … */ } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L15_for_end; __pyx_L13_break:; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L15_for_end; __pyx_L15_for_end:;
+03790: if entry.c_value == <int>event.kind:
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_entry, __pyx_mstate_global->__pyx_n_u_c_value); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3790, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_8 = __Pyx_PyLong_From_int(((int)__pyx_v_event->kind)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3790, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = __Pyx_PyObject_CompareBoolEq_object_int(__pyx_t_5, __pyx_t_8, Py_EQ); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 3790, __pyx_L6_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (__pyx_t_9) { /* … */ }
+03791: kind = entry
__Pyx_INCREF(__pyx_v_entry); __Pyx_DECREF_SET(__pyx_v_kind, __pyx_v_entry);
+03792: break
goto __pyx_L13_break;
+03793: context.connection_listener(ConnectionEvent(
__pyx_t_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, 3793, __pyx_L6_error)
__Pyx_GOTREF(__pyx_t_12);
/* … */
#endif
__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[40];
if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 3793, __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, 3793, __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;
#if CYTHON_VECTORCALL
#endif
__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, 3793, __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, 3793, __pyx_L6_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
{
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[40] = __Pyx_PyTuple_FromArray(__pyx_temp, 9); if (unlikely(!__pyx_mstate_global->__pyx_tuple[40])) __PYX_ERR(0, 3793, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[40]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[40]);
03794: kind=kind,
+03795: host=_conn_event_str(event.host, event.host_len),
__pyx_t_13 = __pyx_f_7questdb_7_client__conn_event_str(__pyx_v_event->host, __pyx_v_event->host_len); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3795, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_13);
+03796: port=_conn_event_str(event.port, event.port_len),
__pyx_t_14 = __pyx_f_7questdb_7_client__conn_event_str(__pyx_v_event->port, __pyx_v_event->port_len); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3796, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_14);
+03797: previous_host=_conn_event_str(
__pyx_t_15 = __pyx_f_7questdb_7_client__conn_event_str(__pyx_v_event->previous_host, __pyx_v_event->previous_host_len); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3797, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_15);
03798: event.previous_host, event.previous_host_len),
+03799: previous_port=_conn_event_str(
__pyx_t_16 = __pyx_f_7questdb_7_client__conn_event_str(__pyx_v_event->previous_port, __pyx_v_event->previous_port_len); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3799, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_16);
03800: event.previous_port, event.previous_port_len),
+03801: attempt_number=event.attempt_number
__pyx_t_18 = __Pyx_PyLong_From_uint64_t(__pyx_v_event->attempt_number); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3801, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_17 = __pyx_t_18; __pyx_t_18 = 0; } else {
+03802: if event.has_attempt else None,
__pyx_t_9 = (__pyx_v_event->has_attempt != 0);
if (__pyx_t_9) {
/* … */
__Pyx_INCREF(Py_None);
__pyx_t_17 = Py_None;
}
+03803: cause_code=c_err_code_to_py(event.cause_code)
__pyx_t_19 = __pyx_f_7questdb_7_client_c_err_code_to_py(__pyx_v_event->cause_code); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3803, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_18 = __pyx_t_19; __pyx_t_19 = 0; } else {
+03804: if event.has_cause else None,
__pyx_t_9 = (__pyx_v_event->has_cause != 0);
if (__pyx_t_9) {
/* … */
__Pyx_INCREF(Py_None);
__pyx_t_18 = Py_None;
}
+03805: cause_msg=_conn_event_str(event.cause_msg, event.cause_msg_len)
__pyx_t_20 = __pyx_f_7questdb_7_client__conn_event_str(__pyx_v_event->cause_msg, __pyx_v_event->cause_msg_len); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3805, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_20); __pyx_t_19 = __pyx_t_20; __pyx_t_20 = 0; } else {
+03806: if event.has_cause else None,
__pyx_t_9 = (__pyx_v_event->has_cause != 0);
if (__pyx_t_9) {
/* … */
__Pyx_INCREF(Py_None);
__pyx_t_19 = Py_None;
}
+03807: timestamp_millis=event.timestamp_millis))
__pyx_t_20 = __Pyx_PyLong_From_int64_t(__pyx_v_event->timestamp_millis); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3807, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_20); #if CYTHON_VECTORCALL
+03808: except BaseException:
__pyx_t_23 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_23) { __Pyx_AddTraceback("questdb._client._connection_event_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_5, &__pyx_t_10) < 0) __PYX_ERR(0, 3808, __pyx_L8_except_error) __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_5); __Pyx_XGOTREF(__pyx_t_10);
+03809: logging.getLogger("questdb").exception(
__pyx_t_20 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3809, __pyx_L8_except_error)
__Pyx_GOTREF(__pyx_t_19);
__pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3809, __pyx_L8_except_error)
__Pyx_GOTREF(__pyx_t_18);
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
__pyx_t_21 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_18))) {
__pyx_t_20 = PyMethod_GET_SELF(__pyx_t_18);
assert(__pyx_t_20);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_18);
__Pyx_INCREF(__pyx_t_20);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_18, __pyx__function);
__pyx_t_21 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_20, __pyx_mstate_global->__pyx_n_u_questdb};
__pyx_t_22 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_18, __pyx_callargs+__pyx_t_21, (2-__pyx_t_21) | (__pyx_t_21*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 3809, __pyx_L8_except_error)
__Pyx_GOTREF(__pyx_t_22);
}
__pyx_t_12 = __pyx_t_22;
__Pyx_INCREF(__pyx_t_12);
__pyx_t_21 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_mstate_global->__pyx_kp_u_connection_event_listener_failed};
__pyx_t_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, 3809, __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;
03810: "connection event listener failed")
03811: finally:
+03812: if entered:
/*finally:*/ {
/*normal exit:*/{
if (__pyx_v_entered) {
/* … */
}
goto __pyx_L5;
}
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_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:;
}
+03813: _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, 3813, __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, 3813, __pyx_L20_error)
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
03814:
03815:
+03816: def _debug_connection_event_dispatch(
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_103_debug_connection_event_dispatch(PyObject *__pyx_self, #if CYTHON_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_102_debug_connection_event_dispatch, "Internal test seam: dispatch a connection event of ``kind_ordinal``.\n\n ``target`` is either the dispatch context a handle registered with its\n native dispatcher (see `_debug_registered_connection_listener`), which\n dispatches exactly as that handle\047s own callback would, or a plain\n listener, which is dispatched for an owner nothing else holds.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_103_debug_connection_event_dispatch = {"_debug_connection_event_dispatch", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_103_debug_connection_event_dispatch, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_102_debug_connection_event_dispatch}; static PyObject *__pyx_pw_7questdb_7_client_103_debug_connection_event_dispatch(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { uint32_t __pyx_v_kind_ordinal; PyObject *__pyx_v_target = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_debug_connection_event_dispatch (wrapper)", 0); #if !CYTHON_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_kind_ordinal,&__pyx_mstate_global->__pyx_n_u_target,0}; PyObject* values[2] = {0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 3816, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 3816, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3816, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_connection_event_dispatch", 0) < (0)) __PYX_ERR(0, 3816, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 2; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_connection_event_dispatch", 1, 2, 2, i); __PYX_ERR(0, 3816, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3816, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 3816, __pyx_L3_error) } __pyx_v_kind_ordinal = __Pyx_PyLong_As_uint32_t(values[0]); if (unlikely((__pyx_v_kind_ordinal == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3817, __pyx_L3_error) __pyx_v_target = values[1]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_debug_connection_event_dispatch", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 3816, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client._debug_connection_event_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_102_debug_connection_event_dispatch(__pyx_self, __pyx_v_kind_ordinal, __pyx_v_target); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_102_debug_connection_event_dispatch(CYTHON_UNUSED PyObject *__pyx_self, uint32_t __pyx_v_kind_ordinal, PyObject *__pyx_v_target) { struct questdb_connection_event __pyx_v_event; struct __pyx_obj_7questdb_7_client__DispatchContext *__pyx_v_context = 0; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client._debug_connection_event_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_context); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_103_debug_connection_event_dispatch, 0, __pyx_mstate_global->__pyx_n_u_debug_connection_event_dispatch, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[200])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3816, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_connection_event_dispatch, __pyx_t_5) < (0)) __PYX_ERR(0, 3816, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
03817: uint32_t kind_ordinal, object target):
03818: """Internal test seam: dispatch a connection event of ``kind_ordinal``.
03819:
03820: ``target`` is either the dispatch context a handle registered with its
03821: native dispatcher (see `_debug_registered_connection_listener`), which
03822: dispatches exactly as that handle's own callback would, or a plain
03823: listener, which is dispatched for an owner nothing else holds.
03824: """
03825: cdef questdb_connection_event event
03826: cdef _DispatchContext context
+03827: if isinstance(target, _DispatchContext):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_target, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__DispatchContext);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+03828: context = <_DispatchContext>target
__pyx_t_2 = __pyx_v_target;
__Pyx_INCREF(__pyx_t_2);
__pyx_v_context = ((struct __pyx_obj_7questdb_7_client__DispatchContext *)__pyx_t_2);
__pyx_t_2 = 0;
03829: else:
+03830: context = _new_dispatch_context(object(), None, target)
/*else*/ {
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_object, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3830, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_3 = ((PyObject *)__pyx_f_7questdb_7_client__new_dispatch_context(__pyx_t_2, Py_None, __pyx_v_target)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3830, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_v_context = ((struct __pyx_obj_7questdb_7_client__DispatchContext *)__pyx_t_3);
__pyx_t_3 = 0;
}
__pyx_L3:;
+03831: memset(&event, 0, sizeof(questdb_connection_event))
(void)(memset((&__pyx_v_event), 0, (sizeof(struct questdb_connection_event))));
+03832: event.kind = kind_ordinal
__pyx_v_event.kind = __pyx_v_kind_ordinal;
+03833: _connection_event_dispatch(<void*>context, &event)
__pyx_f_7questdb_7_client__connection_event_dispatch(((void *)__pyx_v_context), (&__pyx_v_event));
03834:
03835:
+03836: cdef void _connection_event_trampoline(
static void __pyx_f_7questdb_7_client__connection_event_trampoline(void *__pyx_v_user_data, struct questdb_connection_event const *__pyx_v_event) {
/* … */
/* function exit code */
__pyx_L0:;
}
03837: void* user_data,
03838: const questdb_connection_event* event) noexcept nogil:
03839: # No object locals here: the finalizing early return must not touch
03840: # the GIL, which a Cython epilogue with object cleanup would.
+03841: if qdb_py_is_finalizing():
__pyx_t_1 = qdb_py_is_finalizing();
if (__pyx_t_1) {
/* … */
}
+03842: return
{
}
goto __pyx_L0;
+03843: _connection_event_dispatch(user_data, event)
__pyx_f_7questdb_7_client__connection_event_dispatch(__pyx_v_user_data, __pyx_v_event);
03844:
03845:
+03846: class ServerRole(TaggedEnum):
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3846, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); { PyObject* __pyx_temp[1] = {__pyx_t_5}; __pyx_t_16 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3846, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __pyx_t_16; __Pyx_INCREF(__pyx_t_5); __pyx_t_18 = __Pyx_PEP560_update_bases(__pyx_t_5); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3846, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_CalculateMetaclass(NULL, __pyx_t_18); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3846, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_20 = __Pyx_Py3MetaclassPrepare(__pyx_t_5, __pyx_t_18, __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, 3846, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); if (__pyx_t_18 != __pyx_t_16) { if (unlikely((PyDict_SetItemString(__pyx_t_20, "__orig_bases__", __pyx_t_16) < 0))) __PYX_ERR(0, 3846, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; /* … */ __pyx_t_16 = __Pyx_Py3ClassCreate(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ServerRole, __pyx_t_18, __pyx_t_20, NULL, 0, 0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3846, __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, 3846, __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_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
03847: """
03848: Cluster role advertised by the server's ``SERVER_INFO`` handshake.
03849: """
+03850: Standalone = ('standalone', 0)
if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_Standalone, __pyx_mstate_global->__pyx_tuple[90]) < (0)) __PYX_ERR(0, 3850, __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[90] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[90])) __PYX_ERR(0, 3850, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[90]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[90]);
+03851: Primary = ('primary', 1)
if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_Primary, __pyx_mstate_global->__pyx_tuple[91]) < (0)) __PYX_ERR(0, 3851, __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[91] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[91])) __PYX_ERR(0, 3851, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[91]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[91]);
+03852: Replica = ('replica', 2)
if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_Replica, __pyx_mstate_global->__pyx_tuple[92]) < (0)) __PYX_ERR(0, 3852, __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[92] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[92])) __PYX_ERR(0, 3852, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[92]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[92]);
+03853: PrimaryCatchup = ('primary_catchup', 3)
if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_PrimaryCatchup, __pyx_mstate_global->__pyx_tuple[93]) < (0)) __PYX_ERR(0, 3853, __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[93] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[93])) __PYX_ERR(0, 3853, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[93]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[93]);
03854: #: Forward-compat: a role byte this client doesn't recognise. The raw
03855: #: byte is available via :attr:`ServerInfo.role_byte`.
+03856: Other = ('other', 0xFF)
if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_Other, __pyx_mstate_global->__pyx_tuple[94]) < (0)) __PYX_ERR(0, 3856, __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[94] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[94])) __PYX_ERR(0, 3856, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[94]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[94]);
03857:
03858:
+03859: @dataclass(frozen=True)
__pyx_t_16 = NULL; __pyx_t_21 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_dataclass); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3859, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_VECTORCALL #endif __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_21, Py_True}; #if CYTHON_VECTORCALL __pyx_t_19 = __pyx_mstate_global->__pyx_tuple[81]; if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3859, __pyx_L1_error) __Pyx_INCREF(__pyx_t_19); #else { PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_frozen}; __pyx_t_19 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3859, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); } #endif __pyx_t_25 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_17, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_19); __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0; #if CYTHON_VECTORCALL #endif __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3859, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); } __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_16, __pyx_t_5}; __pyx_t_20 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_25, __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_25); __pyx_t_25 = 0; if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3859, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); } if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ServerInfo, __pyx_t_20) < (0)) __PYX_ERR(0, 3860, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+03860: class ServerInfo:
__pyx_t_18 = __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_18)) __PYX_ERR(0, 3860, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_5 = __Pyx_PyDict_NewPresized(8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3860, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_role, __pyx_mstate_global->__pyx_n_u_ServerRole) < (0)) __PYX_ERR(0, 3860, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_role_byte, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 3860, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_epoch, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 3860, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_capabilities, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 3860, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_server_wall_ns, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 3860, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_cluster_id, __pyx_mstate_global->__pyx_n_u_str_2) < (0)) __PYX_ERR(0, 3860, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_node_id, __pyx_mstate_global->__pyx_n_u_str_2) < (0)) __PYX_ERR(0, 3860, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_zone_id, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 3860, __pyx_L1_error) if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_annotations, __pyx_t_5) < (0)) __PYX_ERR(0, 3860, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; /* … */ __pyx_t_5 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_mstate_global->__pyx_n_u_ServerInfo, __pyx_mstate_global->__pyx_empty_tuple, __pyx_t_18, NULL, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3860, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5); #endif
03861: """
03862: Snapshot of the server's ``SERVER_INFO`` handshake, as advertised on
03863: the connection :meth:`QuestDB.server_info` sampled. Fields mirror the
03864: Rust reader's ``ServerInfo``.
03865: """
03866: #: Cluster role; :attr:`ServerRole.Other` for unrecognised role bytes.
03867: role: ServerRole
03868: #: Raw wire role byte; disambiguates ``role == ServerRole.Other``.
03869: role_byte: int
03870: #: Monotonic generation counter; increases on failover/role
03871: #: transitions, useful for fencing replayed batches.
03872: epoch: int
03873: #: Bitset of QWP capability flags negotiated with the server.
03874: capabilities: int
03875: #: Server wall-clock at handshake, nanoseconds since the Unix epoch
03876: #: (UTC). Useful for clock-skew detection.
03877: server_wall_ns: int
03878: cluster_id: str
03879: node_id: str
03880: #: Zone identifier, present iff the server advertised ``CAP_ZONE`` in
03881: #: ``capabilities``; ``None`` otherwise. Compared case-insensitively
03882: #: against the client's ``zone=`` connect-string knob during failover.
03883: zone_id: Optional[str]
03884:
03885:
+03886: def _sender_error_from_raw(raw):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_105_sender_error_from_raw(PyObject *__pyx_self,
#if CYTHON_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_105_sender_error_from_raw = {"_sender_error_from_raw", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_105_sender_error_from_raw, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_105_sender_error_from_raw(PyObject *__pyx_self,
#if CYTHON_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, 3886, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3886, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_sender_error_from_raw", 0) < (0)) __PYX_ERR(0, 3886, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_sender_error_from_raw", 1, 1, 1, i); __PYX_ERR(0, 3886, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 1)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3886, __pyx_L3_error)
}
__pyx_v_raw = values[0];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("_sender_error_from_raw", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3886, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client._sender_error_from_raw", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_104_sender_error_from_raw(__pyx_self, __pyx_v_raw);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_104_sender_error_from_raw(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_raw) {
PyObject *__pyx_v_category = NULL;
PyObject *__pyx_v_applied_policy = NULL;
PyObject *__pyx_v_status = NULL;
PyObject *__pyx_v_message = NULL;
PyObject *__pyx_v_message_sequence = NULL;
PyObject *__pyx_v_from_fsn = NULL;
PyObject *__pyx_v_to_fsn = NULL;
PyObject *__pyx_v_py_category = NULL;
PyObject *__pyx_v_entry = NULL;
PyObject *__pyx_v_py_policy = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_AddTraceback("questdb._client._sender_error_from_raw", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_category);
__Pyx_XDECREF(__pyx_v_applied_policy);
__Pyx_XDECREF(__pyx_v_status);
__Pyx_XDECREF(__pyx_v_message);
__Pyx_XDECREF(__pyx_v_message_sequence);
__Pyx_XDECREF(__pyx_v_from_fsn);
__Pyx_XDECREF(__pyx_v_to_fsn);
__Pyx_XDECREF(__pyx_v_py_category);
__Pyx_XDECREF(__pyx_v_entry);
__Pyx_XDECREF(__pyx_v_py_policy);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_105_sender_error_from_raw, 0, __pyx_mstate_global->__pyx_n_u_sender_error_from_raw, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[201])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3886, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
#endif
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_sender_error_from_raw, __pyx_t_18) < (0)) __PYX_ERR(0, 3886, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+03887: if raw is None or isinstance(raw, SenderError):
__pyx_t_2 = (__pyx_v_raw == Py_None);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_SenderError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3887, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_2 = PyObject_IsInstance(__pyx_v_raw, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 3887, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+03888: return raw
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_raw);
__pyx_r = __pyx_v_raw;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
03889:
03890: (
+03891: category,
__pyx_v_category = __pyx_t_3; __pyx_t_3 = 0; __pyx_v_applied_policy = __pyx_t_4; __pyx_t_4 = 0; __pyx_v_status = __pyx_t_5; __pyx_t_5 = 0; __pyx_v_message = __pyx_t_6; __pyx_t_6 = 0; __pyx_v_message_sequence = __pyx_t_7; __pyx_t_7 = 0; __pyx_v_from_fsn = __pyx_t_8; __pyx_t_8 = 0; __pyx_v_to_fsn = __pyx_t_9; __pyx_t_9 = 0;
03892: applied_policy,
03893: status,
03894: message,
03895: message_sequence,
03896: from_fsn,
03897: to_fsn,
+03898: ) = raw
if ((likely(PyTuple_CheckExact(__pyx_v_raw))) || (PyList_CheckExact(__pyx_v_raw))) { PyObject* sequence = __pyx_v_raw; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 7)) { if (size > 7) __Pyx_RaiseTooManyValuesError(7); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 3891, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = PyTuple_GET_ITEM(sequence, 3); __Pyx_INCREF(__pyx_t_6); __pyx_t_7 = PyTuple_GET_ITEM(sequence, 4); __Pyx_INCREF(__pyx_t_7); __pyx_t_8 = PyTuple_GET_ITEM(sequence, 5); __Pyx_INCREF(__pyx_t_8); __pyx_t_9 = PyTuple_GET_ITEM(sequence, 6); __Pyx_INCREF(__pyx_t_9); } else { __pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3891, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3891, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyList_GET_ITEM_REF(sequence, 2, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3891, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyList_GET_ITEM_REF(sequence, 3, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3891, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyList_GET_ITEM_REF(sequence, 4, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3891, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyList_GET_ITEM_REF(sequence, 5, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3891, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_8); __pyx_t_9 = __Pyx_PyList_GET_ITEM_REF(sequence, 6, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3891, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_9); } #else { Py_ssize_t i; PyObject** temps[7] = {&__pyx_t_3,&__pyx_t_4,&__pyx_t_5,&__pyx_t_6,&__pyx_t_7,&__pyx_t_8,&__pyx_t_9}; for (i=0; i < 7; i++) { PyObject* item = __Pyx_PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 3891, __pyx_L1_error) __Pyx_GOTREF(item); *(temps[i]) = item; } } #endif } else { Py_ssize_t index = -1; PyObject** temps[7] = {&__pyx_t_3,&__pyx_t_4,&__pyx_t_5,&__pyx_t_6,&__pyx_t_7,&__pyx_t_8,&__pyx_t_9}; __pyx_t_10 = PyObject_GetIter(__pyx_v_raw); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3891, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_11 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_10); for (index=0; index < 7; index++) { PyObject* item = __pyx_t_11(__pyx_t_10); if (unlikely(!item)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(item); *(temps[index]) = item; } if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 7) < (0)) __PYX_ERR(0, 3891, __pyx_L1_error) __pyx_t_11 = NULL; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; goto __pyx_L7_unpacking_done; __pyx_L6_unpacking_failed:; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_11 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 3891, __pyx_L1_error) __pyx_L7_unpacking_done:; }
03899:
+03900: py_category = SenderErrorCategory.Unknown
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_SenderErrorCategory); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3900, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_Unknown); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3900, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_v_py_category = __pyx_t_8; __pyx_t_8 = 0;
+03901: for entry in SenderErrorCategory:
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_SenderErrorCategory); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3901, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); if (likely(PyList_CheckExact(__pyx_t_8)) || PyTuple_CheckExact(__pyx_t_8)) { __pyx_t_9 = __pyx_t_8; __Pyx_INCREF(__pyx_t_9); __pyx_t_12 = 0; __pyx_t_13 = NULL; } else { __pyx_t_12 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3901, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_13 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_9); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3901, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; for (;;) { if (likely(!__pyx_t_13)) { if (likely(PyList_CheckExact(__pyx_t_9))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_9); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 3901, __pyx_L1_error) #endif if (__pyx_t_12 >= __pyx_temp) break; } __pyx_t_8 = __Pyx_PyList_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, 3901, __pyx_L1_error) #endif if (__pyx_t_12 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_8 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_12)); #else __pyx_t_8 = __Pyx_PySequence_ITEM(__pyx_t_9, __pyx_t_12); #endif ++__pyx_t_12; } if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3901, __pyx_L1_error) } else { __pyx_t_8 = __pyx_t_13(__pyx_t_9); if (unlikely(!__pyx_t_8)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 3901, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_8); __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_8); __pyx_t_8 = 0; /* … */ } __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L11_for_end; __pyx_L9_break:; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L11_for_end; __pyx_L11_for_end:;
+03902: if entry.c_value == category:
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_entry, __pyx_mstate_global->__pyx_n_u_c_value); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3902, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_8, __pyx_v_category, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3902, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (__pyx_t_1) { /* … */ }
+03903: py_category = entry
__Pyx_INCREF(__pyx_v_entry); __Pyx_DECREF_SET(__pyx_v_py_category, __pyx_v_entry);
+03904: break
goto __pyx_L9_break;
03905:
+03906: py_policy = SenderErrorPolicy.Terminal
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3906, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_Terminal); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3906, __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;
+03907: for entry in SenderErrorPolicy:
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3907, __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, 3907, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_13 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_9); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3907, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_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, 3907, __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, 3907, __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, 3907, __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, 3907, __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:;
+03908: 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, 3908, __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, 3908, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (__pyx_t_1) { /* … */ }
+03909: py_policy = entry
__Pyx_INCREF(__pyx_v_entry); __Pyx_DECREF_SET(__pyx_v_py_policy, __pyx_v_entry);
+03910: break
goto __pyx_L13_break;
03911:
+03912: return SenderError(
__pyx_t_8 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_SenderError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3912, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7);
03913: py_category,
03914: py_policy,
03915: status,
03916: message,
03917: message_sequence,
03918: from_fsn,
+03919: to_fsn)
__pyx_t_14 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_8); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_14 = 0; } #endif { PyObject *__pyx_callargs[8] = {__pyx_t_8, __pyx_v_py_category, __pyx_v_py_policy, __pyx_v_status, __pyx_v_message, __pyx_v_message_sequence, __pyx_v_from_fsn, __pyx_v_to_fsn}; __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_14, (8-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3912, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_9; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_9 = 0; goto __pyx_L0;
03920:
03921:
+03922: def _default_error_handler(error):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_107_default_error_handler(PyObject *__pyx_self,
#if CYTHON_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_107_default_error_handler = {"_default_error_handler", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_107_default_error_handler, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_107_default_error_handler(PyObject *__pyx_self,
#if CYTHON_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, 3922, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3922, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_default_error_handler", 0) < (0)) __PYX_ERR(0, 3922, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_default_error_handler", 1, 1, 1, i); __PYX_ERR(0, 3922, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 1)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3922, __pyx_L3_error)
}
__pyx_v_error = values[0];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("_default_error_handler", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3922, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client._default_error_handler", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_106_default_error_handler(__pyx_self, __pyx_v_error);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_106_default_error_handler(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_error) {
PyObject *__pyx_v_level = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_AddTraceback("questdb._client._default_error_handler", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_level);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_107_default_error_handler, 0, __pyx_mstate_global->__pyx_n_u_default_error_handler, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[202])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3922, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
#endif
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_default_error_handler, __pyx_t_18) < (0)) __PYX_ERR(0, 3922, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
03923: level = (
+03924: logging.ERROR
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3924, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ERROR); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3924, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_1 = __pyx_t_2; __pyx_t_2 = 0; } else {
+03925: if error.applied_policy is SenderErrorPolicy.Terminal
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_mstate_global->__pyx_n_u_applied_policy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3925, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3925, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Terminal); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3925, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = (__pyx_t_2 == __pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_5) {
+03926: else logging.WARNING)
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3926, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_WARNING); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3926, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_1 = __pyx_t_4; __pyx_t_4 = 0; } __pyx_v_level = __pyx_t_1; __pyx_t_1 = 0;
+03927: logging.getLogger("questdb").log(
__pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3927, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3927, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_n_u_questdb}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3927, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_t_4 = __pyx_t_2; __Pyx_INCREF(__pyx_t_4);
03928: level,
03929: "QWP/WebSocket server rejection: "
03930: "category=%s policy=%s status=%s fsn=[%s,%s] seq=%s message=%s",
+03931: error.category.tag,
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_mstate_global->__pyx_n_u_category); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3931, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_tag); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3931, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+03932: error.applied_policy.tag,
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_mstate_global->__pyx_n_u_applied_policy); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3932, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_tag); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3932, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+03933: error.status,
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_mstate_global->__pyx_n_u_status); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3933, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7);
+03934: error.from_fsn,
__pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_mstate_global->__pyx_n_u_from_fsn); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3934, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9);
+03935: error.to_fsn,
__pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_mstate_global->__pyx_n_u_to_fsn); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3935, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10);
+03936: error.message_sequence,
__pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_mstate_global->__pyx_n_u_message_sequence); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3936, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11);
+03937: error.message)
__pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_mstate_global->__pyx_n_u_message); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3937, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_8 = 0; { PyObject *__pyx_callargs[10] = {__pyx_t_4, __pyx_v_level, __pyx_mstate_global->__pyx_kp_u_QWP_WebSocket_server_rejection_c, __pyx_t_3, __pyx_t_6, __pyx_t_7, __pyx_t_9, __pyx_t_10, __pyx_t_11, __pyx_t_12}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_log, __pyx_callargs+__pyx_t_8, (10-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3927, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
03938:
03939:
+03940: cdef void _sender_error_dispatch(
static void __pyx_f_7questdb_7_client__sender_error_dispatch(void *__pyx_v_user_data, struct line_sender_qwpws_error_view const *__pyx_v_view) {
struct __pyx_obj_7questdb_7_client__DispatchContext *__pyx_v_context = 0;
int __pyx_v_entered;
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_WriteUnraisable("questdb._client._sender_error_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_context);
__Pyx_RefNannyFinishContext();
__Pyx_PyGILState_Release(__pyx_gilstate_save);
}
03941: void* user_data,
03942: const line_sender_qwpws_error_view* view) noexcept with gil:
+03943: cdef _DispatchContext context = <_DispatchContext>user_data
__pyx_t_1 = ((PyObject *)__pyx_v_user_data);
__Pyx_INCREF(__pyx_t_1);
__pyx_v_context = ((struct __pyx_obj_7questdb_7_client__DispatchContext *)__pyx_t_1);
__pyx_t_1 = 0;
+03944: cdef bint entered = False
__pyx_v_entered = 0;
+03945: try:
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L11_try_end;
__pyx_L6_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
__pyx_L8_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L4_error;
__pyx_L7_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
__pyx_L11_try_end:;
}
}
+03946: _enter_dispatch(context.owner_token)
__pyx_t_1 = __pyx_v_context->owner_token;
__Pyx_INCREF(__pyx_t_1);
__pyx_f_7questdb_7_client__enter_dispatch(__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3946, __pyx_L6_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+03947: entered = True
__pyx_v_entered = 1;
+03948: context.error_handler(_sender_error_from_raw(
__pyx_t_5 = NULL;
__Pyx_INCREF(__pyx_v_context->error_handler);
__pyx_t_6 = __pyx_v_context->error_handler;
__pyx_t_8 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_sender_error_from_raw); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3948, __pyx_L6_error)
__Pyx_GOTREF(__pyx_t_9);
+03949: c_sender_error_view_to_raw(view[0])))
__pyx_t_10 = __pyx_f_7questdb_7_client_c_sender_error_view_to_raw((__pyx_v_view[0])); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3949, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_11 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_8); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_11 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_10}; __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3948, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_t_11 = 1; #if CYTHON_UNPACK_METHODS if (likely(PyMethod_Check(__pyx_t_6))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_11 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_7}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3948, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+03950: except BaseException:
__pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_12) { __Pyx_AddTraceback("questdb._client._sender_error_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 3950, __pyx_L8_except_error) __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_7);
+03951: logging.getLogger("questdb").exception(
__pyx_t_8 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3951, __pyx_L8_except_error)
__Pyx_GOTREF(__pyx_t_13);
__pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3951, __pyx_L8_except_error)
__Pyx_GOTREF(__pyx_t_14);
__Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
__pyx_t_11 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_14))) {
__pyx_t_8 = PyMethod_GET_SELF(__pyx_t_14);
assert(__pyx_t_8);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_14);
__Pyx_INCREF(__pyx_t_8);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_14, __pyx__function);
__pyx_t_11 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_mstate_global->__pyx_n_u_questdb};
__pyx_t_10 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_14, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3951, __pyx_L8_except_error)
__Pyx_GOTREF(__pyx_t_10);
}
__pyx_t_9 = __pyx_t_10;
__Pyx_INCREF(__pyx_t_9);
__pyx_t_11 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_mstate_global->__pyx_kp_u_QWP_WebSocket_error_handler_fail};
__pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_exception, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3951, __pyx_L8_except_error)
__Pyx_GOTREF(__pyx_t_5);
}
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
goto __pyx_L7_exception_handled;
}
goto __pyx_L8_except_error;
03952: "QWP/WebSocket error handler failed")
03953: finally:
+03954: if entered:
/*finally:*/ {
/*normal exit:*/{
if (__pyx_v_entered) {
/* … */
}
goto __pyx_L5;
}
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
if ( unlikely(__Pyx_GetException(&__pyx_t_4, &__pyx_t_3, &__pyx_t_2) < 0)) __Pyx_ErrFetch(&__pyx_t_4, &__pyx_t_3, &__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_19);
__pyx_t_12 = __pyx_lineno; __pyx_t_15 = __pyx_clineno; __pyx_t_16 = __pyx_filename;
{
if (__pyx_v_entered) {
/* … */
}
}
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_ErrRestore(__pyx_t_4, __pyx_t_3, __pyx_t_2);
__pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_15; __pyx_filename = __pyx_t_16;
goto __pyx_L1_error;
__pyx_L16_error:;
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
goto __pyx_L1_error;
}
__pyx_L5:;
}
+03955: _exit_dispatch(context.owner_token)
__pyx_t_7 = __pyx_v_context->owner_token;
__Pyx_INCREF(__pyx_t_7);
__pyx_f_7questdb_7_client__exit_dispatch(__pyx_t_7); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3955, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
__pyx_t_7 = __pyx_v_context->owner_token;
__Pyx_INCREF(__pyx_t_7);
__pyx_f_7questdb_7_client__exit_dispatch(__pyx_t_7); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3955, __pyx_L16_error)
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
03956:
03957:
+03958: cdef void _sender_error_trampoline(
static void __pyx_f_7questdb_7_client__sender_error_trampoline(void *__pyx_v_user_data, struct line_sender_qwpws_error_view const *__pyx_v_view) {
/* … */
/* function exit code */
__pyx_L0:;
}
03959: void* user_data,
03960: const line_sender_qwpws_error_view* view) noexcept nogil:
03961: # No object locals here: the finalizing early return must not touch
03962: # the GIL, which a Cython epilogue with object cleanup would.
+03963: if qdb_py_is_finalizing():
__pyx_t_1 = qdb_py_is_finalizing();
if (__pyx_t_1) {
/* … */
}
+03964: return
{
}
goto __pyx_L0;
+03965: _sender_error_dispatch(user_data, view)
__pyx_f_7questdb_7_client__sender_error_dispatch(__pyx_v_user_data, __pyx_v_view);
03966:
03967:
+03968: class TlsCa(TaggedEnum):
__Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3968, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); { PyObject* __pyx_temp[1] = {__pyx_t_18}; __pyx_t_5 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3968, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __pyx_t_18 = __pyx_t_5; __Pyx_INCREF(__pyx_t_18); __pyx_t_20 = __Pyx_PEP560_update_bases(__pyx_t_18); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3968, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __pyx_t_18 = __Pyx_CalculateMetaclass(NULL, __pyx_t_20); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3968, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_25 = __Pyx_Py3MetaclassPrepare(__pyx_t_18, __pyx_t_20, __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_25)) __PYX_ERR(0, 3968, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); if (__pyx_t_20 != __pyx_t_5) { if (unlikely((PyDict_SetItemString(__pyx_t_25, "__orig_bases__", __pyx_t_5) < 0))) __PYX_ERR(0, 3968, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; /* … */ __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_TlsCa, __pyx_t_20, __pyx_t_25, NULL, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3968, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_TlsCa, __pyx_t_5) < (0)) __PYX_ERR(0, 3968, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
03969: """
03970: Verification mechanism for the server's certificate.
03971:
03972: Here ``webpki`` refers to the
03973: `WebPKI library <https://github.com/rustls/webpki-roots>`_ and
03974: ``os`` refers to the operating system's certificate store.
03975:
03976: See :ref:`sender_conf_tls` for more information.
03977: """
+03978: WebpkiRoots = ('webpki_roots', line_sender_ca_webpki_roots)
__pyx_t_5 = __Pyx_PyLong_From_enum__line_sender_ca(line_sender_ca_webpki_roots); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3978, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_webpki_roots, __pyx_t_5}; __pyx_t_16 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3978, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__Pyx_SetNameInClass(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_WebpkiRoots, __pyx_t_16) < (0)) __PYX_ERR(0, 3978, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+03979: 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, 3979, __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_5 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3979, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; if (__Pyx_SetNameInClass(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_OsRoots, __pyx_t_5) < (0)) __PYX_ERR(0, 3979, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+03980: WebpkiAndOsRoots = ('webpki_and_os_roots', line_sender_ca_webpki_and_os_roots)
__pyx_t_5 = __Pyx_PyLong_From_enum__line_sender_ca(line_sender_ca_webpki_and_os_roots); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3980, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_webpki_and_os_roots, __pyx_t_5}; __pyx_t_16 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3980, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__Pyx_SetNameInClass(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_WebpkiAndOsRoots, __pyx_t_16) < (0)) __PYX_ERR(0, 3980, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+03981: 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, 3981, __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_5 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3981, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; if (__Pyx_SetNameInClass(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_PemFile, __pyx_t_5) < (0)) __PYX_ERR(0, 3981, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
03982:
03983:
+03984: cdef object c_parse_conf_err_to_py(questdb_conf_str_parse_err* err):
static PyObject *__pyx_f_7questdb_7_client_c_parse_conf_err_to_py(struct questdb_conf_str_parse_err *__pyx_v_err) {
PyObject *__pyx_v_msg = 0;
PyObject *__pyx_v_py_err = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client.c_parse_conf_err_to_py", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_msg);
__Pyx_XDECREF(__pyx_v_py_err);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+03985: cdef str msg = PyUnicode_FromStringAndSize(
__pyx_t_1 = PyUnicode_FromStringAndSize(__pyx_v_err->msg, ((Py_ssize_t)__pyx_v_err->msg_len)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3985, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_msg = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
03986: err.msg, <Py_ssize_t>err.msg_len)
+03987: cdef object py_err = QuestDBError(QuestDBErrorCode.ConfigError, msg)
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3987, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3987, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3987, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_5, __pyx_v_msg}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3987, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_py_err = __pyx_t_1; __pyx_t_1 = 0;
+03988: questdb_conf_str_parse_err_free(err)
questdb_conf_str_parse_err_free(__pyx_v_err);
+03989: return py_err
{
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;
03990:
03991:
+03992: cdef object parse_conf_str(
static PyObject *__pyx_f_7questdb_7_client_parse_conf_str(struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_conf_str) {
size_t __pyx_v_c_len1;
char const *__pyx_v_c_buf1;
size_t __pyx_v_c_len2;
char const *__pyx_v_c_buf2;
PyObject *__pyx_v_service = 0;
struct questdb_conf_str_iter *__pyx_v_c_iter;
PyObject *__pyx_v_key = 0;
PyObject *__pyx_v_value = 0;
PyObject *__pyx_v_params = 0;
struct line_sender_utf8 __pyx_v_c_conf_str_utf8;
struct questdb_conf_str_parse_err *__pyx_v_err;
struct questdb_conf_str *__pyx_v_c_conf_str;
PyObject *__pyx_v_type_mappings = NULL;
PyObject *__pyx_v_typed_params = NULL;
PyObject *__pyx_v_converter = NULL;
PyObject *__pyx_v_e = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_XDECREF(__pyx_t_19);
__Pyx_XDECREF(__pyx_t_20);
__Pyx_XDECREF(__pyx_t_21);
__Pyx_XDECREF(__pyx_t_22);
__Pyx_XDECREF(__pyx_t_23);
__Pyx_XDECREF(__pyx_t_24);
__Pyx_XDECREF(__pyx_t_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;
}
03993: qdb_pystr_buf* b,
03994: str conf_str):
03995: """
03996: Parse a config string to a tuple of (Protocol, dict[str, str]).
03997: """
03998: cdef size_t c_len1
03999: cdef const char* c_buf1
04000: cdef size_t c_len2
04001: cdef const char* c_buf2
04002: cdef str service
04003: cdef questdb_conf_str_iter* c_iter
04004: cdef str key
04005: cdef str value
+04006: cdef dict params = {}
__pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4006, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_params = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
04007: cdef line_sender_utf8 c_conf_str_utf8
04008: cdef questdb_conf_str_parse_err* err
04009: cdef questdb_conf_str* c_conf_str
+04010: str_to_utf8(b, <PyObject*>conf_str, &c_conf_str_utf8)
__pyx_t_2 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_conf_str), (&__pyx_v_c_conf_str_utf8)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 4010, __pyx_L1_error)
+04011: c_conf_str = questdb_conf_str_parse(
__pyx_v_c_conf_str = questdb_conf_str_parse(__pyx_v_c_conf_str_utf8.buf, __pyx_v_c_conf_str_utf8.len, (&__pyx_v_err));
04012: c_conf_str_utf8.buf,
04013: c_conf_str_utf8.len,
04014: &err)
+04015: if c_conf_str == NULL:
__pyx_t_3 = (__pyx_v_c_conf_str == NULL);
if (unlikely(__pyx_t_3)) {
/* … */
}
+04016: raise c_parse_conf_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_parse_conf_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4016, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 4016, __pyx_L1_error)
04017:
+04018: c_iter = NULL
__pyx_v_c_iter = NULL;
+04019: try:
/*try:*/ {
+04020: c_buf1 = questdb_conf_str_service(c_conf_str, &c_len1)
__pyx_v_c_buf1 = questdb_conf_str_service(__pyx_v_c_conf_str, (&__pyx_v_c_len1));
+04021: service = PyUnicode_FromStringAndSize(c_buf1, <Py_ssize_t>c_len1)
__pyx_t_1 = PyUnicode_FromStringAndSize(__pyx_v_c_buf1, ((Py_ssize_t)__pyx_v_c_len1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4021, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_service = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
04022:
+04023: c_iter = questdb_conf_str_iter_pairs(c_conf_str)
__pyx_v_c_iter = questdb_conf_str_iter_pairs(__pyx_v_c_conf_str);
+04024: while questdb_conf_str_iter_next(c_iter, &c_buf1, &c_len1, &c_buf2, &c_len2):
while (1) {
__pyx_t_3 = questdb_conf_str_iter_next(__pyx_v_c_iter, (&__pyx_v_c_buf1), (&__pyx_v_c_len1), (&__pyx_v_c_buf2), (&__pyx_v_c_len2));
if (!__pyx_t_3) break;
+04025: key = PyUnicode_FromStringAndSize(c_buf1, <Py_ssize_t>c_len1)
__pyx_t_1 = PyUnicode_FromStringAndSize(__pyx_v_c_buf1, ((Py_ssize_t)__pyx_v_c_len1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4025, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_key, ((PyObject*)__pyx_t_1)); __pyx_t_1 = 0;
+04026: value = PyUnicode_FromStringAndSize(c_buf2, <Py_ssize_t>c_len2)
__pyx_t_1 = PyUnicode_FromStringAndSize(__pyx_v_c_buf2, ((Py_ssize_t)__pyx_v_c_len2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4026, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_value, ((PyObject*)__pyx_t_1)); __pyx_t_1 = 0;
+04027: params[key] = value
if (unlikely((PyDict_SetItem(__pyx_v_params, __pyx_v_key, __pyx_v_value) < 0))) __PYX_ERR(0, 4027, __pyx_L5_error) } }
04028: finally:
+04029: if c_iter != NULL:
/*finally:*/ {
/*normal exit:*/{
__pyx_t_3 = (__pyx_v_c_iter != NULL);
if (__pyx_t_3) {
/* … */
}
/* … */
__pyx_t_3 = (__pyx_v_c_iter != NULL);
if (__pyx_t_3) {
/* … */
}
+04030: questdb_conf_str_iter_free(c_iter)
questdb_conf_str_iter_free(__pyx_v_c_iter);
/* … */
questdb_conf_str_iter_free(__pyx_v_c_iter);
+04031: questdb_conf_str_free(c_conf_str)
questdb_conf_str_free(__pyx_v_c_conf_str);
goto __pyx_L6;
}
__pyx_L5_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
if ( unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
{
/* … */
questdb_conf_str_free(__pyx_v_c_conf_str);
}
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
__pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
__pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
goto __pyx_L1_error;
}
__pyx_L6:;
}
04032:
04033: # We now need to parse the various values in the dict from their
04034: # string values to their Python types, as expected by the overrides
04035: # API of Sender.from_conf and Sender.from_env.
04036: # Note that some of these values, such as `tls_ca` or `auto_flush`
04037: # are kept as strings and are parsed by Sender._set_sender_fields.
04038: type_mappings = {
+04039: 'bind_interface': str,
__pyx_t_1 = __Pyx_PyDict_NewPresized(25); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4039, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_bind_interface, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04040: 'max_datagram_size': int,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_max_datagram_size, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04041: 'multicast_ttl': int,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_multicast_ttl, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04042: 'username': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_username, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04043: 'password': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_password, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04044: 'token': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_token, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04045: 'token_x': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_token_x, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04046: 'token_y': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_token_y, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04047: 'auth_timeout': int,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auth_timeout, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04048: 'tls_verify': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_verify, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04049: 'tls_ca': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_ca, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04050: 'tls_roots': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_roots, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04051: 'tls_roots_password': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_roots_password, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04052: 'max_buf_size': int,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_max_buf_size, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04053: 'retry_timeout': int,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_retry_timeout, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04054: 'retry_max_backoff_millis': int,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_retry_max_backoff_millis, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04055: 'request_min_throughput': int,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_request_min_throughput, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04056: 'request_timeout': int,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_request_timeout, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04057: 'auto_flush': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04058: 'auto_flush_rows': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_rows, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04059: 'auto_flush_bytes': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04060: 'auto_flush_interval': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_interval, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04061: 'init_buf_size': int,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_init_buf_size, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04062: 'max_name_len': int,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_max_name_len, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04063: 'qwp_ws_progress': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_qwp_ws_progress, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error) __pyx_v_type_mappings = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
04064: }
+04065: typed_params = {}
__pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4065, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_typed_params = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
+04066: for key, value in params.items():
__pyx_t_13 = 0; __pyx_t_15 = __Pyx_dict_iterator(__pyx_v_params, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_14), (&__pyx_t_5)); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4066, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = __pyx_t_15; __pyx_t_15 = 0; while (1) { __pyx_t_4 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_14, &__pyx_t_13, &__pyx_t_15, &__pyx_t_16, NULL, __pyx_t_5); if (unlikely(__pyx_t_4 == 0)) break; if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 4066, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_GOTREF(__pyx_t_16); if (!(likely(PyUnicode_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_15))) __PYX_ERR(0, 4066, __pyx_L1_error) if (!(likely(PyUnicode_CheckExact(__pyx_t_16))||((__pyx_t_16) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_16))) __PYX_ERR(0, 4066, __pyx_L1_error) __Pyx_XDECREF_SET(__pyx_v_key, ((PyObject*)__pyx_t_15)); __pyx_t_15 = 0; __Pyx_XDECREF_SET(__pyx_v_value, ((PyObject*)__pyx_t_16)); __pyx_t_16 = 0;
+04067: converter = type_mappings.get(key, str)
__pyx_t_16 = __Pyx_PyDict_GetItemDefault(__pyx_v_type_mappings, __pyx_v_key, ((PyObject *)(&PyUnicode_Type))); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4067, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_XDECREF_SET(__pyx_v_converter, __pyx_t_16); __pyx_t_16 = 0;
+04068: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
goto __pyx_L22_try_end;
__pyx_L15_error:;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
/* … */
__pyx_L17_except_error:;
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_ExceptionReset(__pyx_t_12, __pyx_t_11, __pyx_t_10);
goto __pyx_L1_error;
__pyx_L22_try_end:;
}
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+04069: typed_params[key] = converter(value)
__pyx_t_15 = NULL;
__Pyx_INCREF(__pyx_v_converter);
__pyx_t_17 = __pyx_v_converter;
__pyx_t_18 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_17))) {
__pyx_t_15 = PyMethod_GET_SELF(__pyx_t_17);
assert(__pyx_t_15);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_17);
__Pyx_INCREF(__pyx_t_15);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_17, __pyx__function);
__pyx_t_18 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_v_value};
__pyx_t_16 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_17, __pyx_callargs+__pyx_t_18, (2-__pyx_t_18) | (__pyx_t_18*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4069, __pyx_L15_error)
__Pyx_GOTREF(__pyx_t_16);
}
if (unlikely((PyDict_SetItem(__pyx_v_typed_params, __pyx_v_key, __pyx_t_16) < 0))) __PYX_ERR(0, 4069, __pyx_L15_error)
__Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+04070: except (ValueError, TypeError) as e:
__pyx_t_4 = __Pyx_PyErr_ExceptionMatches2(((PyObject *)(((PyTypeObject*)PyExc_ValueError))), ((PyObject *)(((PyTypeObject*)PyExc_TypeError))));
if (__pyx_t_4) {
__Pyx_AddTraceback("questdb._client.parse_conf_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_16, &__pyx_t_17, &__pyx_t_15) < 0) __PYX_ERR(0, 4070, __pyx_L17_except_error)
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_INCREF(__pyx_t_17);
__pyx_v_e = __pyx_t_17;
/*try:*/ {
/* … */
/*finally:*/ {
__pyx_L28_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0; __pyx_t_31 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
__Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
__Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
__Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
__Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
__Pyx_XDECREF(__pyx_t_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;
+04071: raise QuestDBError(
__pyx_t_20 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 4071, __pyx_L28_error)
__Pyx_GOTREF(__pyx_t_21);
+04072: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 4072, __pyx_L28_error) __Pyx_GOTREF(__pyx_t_22); __pyx_t_23 = __Pyx_PyObject_GetAttrStr(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 4072, __pyx_L28_error) __Pyx_GOTREF(__pyx_t_23); __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
+04073: f'Invalid value for config key {key!r}: {value!r}') from e
__pyx_t_22 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_key), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 4073, __pyx_L28_error) __Pyx_GOTREF(__pyx_t_22); __pyx_t_24 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_value), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 4073, __pyx_L28_error) __Pyx_GOTREF(__pyx_t_24); __pyx_t_25[0] = __pyx_mstate_global->__pyx_kp_u_Invalid_value_for_config_key; __pyx_t_25[1] = __pyx_t_22; __pyx_t_25[2] = __pyx_mstate_global->__pyx_kp_u__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, 4073, __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, 4071, __pyx_L28_error) __Pyx_GOTREF(__pyx_t_19); } __Pyx_Raise(__pyx_t_19, 0, 0, __pyx_v_e); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __PYX_ERR(0, 4071, __pyx_L28_error) }
+04074: if service == 'udps':
__pyx_t_3 = __Pyx_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, 4074, __pyx_L1_error) if (unlikely(__pyx_t_3)) { /* … */ }
+04075: raise QuestDBError(
__pyx_t_15 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4075, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
+04076: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4076, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4076, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_18 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_17))) { __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_17); assert(__pyx_t_15); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_17); __Pyx_INCREF(__pyx_t_15); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_17, __pyx__function); __pyx_t_18 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_15, __pyx_t_19, __pyx_mstate_global->__pyx_kp_u_TLS_is_not_supported_for_UDP}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_17, __pyx_callargs+__pyx_t_18, (3-__pyx_t_18) | (__pyx_t_18*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4075, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 4075, __pyx_L1_error)
04077: 'TLS is not supported for UDP.')
+04078: return (Protocol.parse(service), typed_params)
__pyx_t_17 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_Protocol); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4078, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_parse); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4078, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __pyx_t_18 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_15))) { __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_15); assert(__pyx_t_17); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_15); __Pyx_INCREF(__pyx_t_17); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_15, __pyx__function); __pyx_t_18 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_v_service}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_15, __pyx_callargs+__pyx_t_18, (2-__pyx_t_18) | (__pyx_t_18*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4078, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4078, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_GIVEREF(__pyx_t_1); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_1) != (0)) __PYX_ERR(0, 4078, __pyx_L1_error); __Pyx_INCREF(__pyx_v_typed_params); __Pyx_GIVEREF(__pyx_v_typed_params); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_v_typed_params) != (0)) __PYX_ERR(0, 4078, __pyx_L1_error); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_15; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_15 = 0; goto __pyx_L0;
04079:
04080:
+04081: cdef str conf_str_value(object value):
static PyObject *__pyx_f_7questdb_7_client_conf_str_value(PyObject *__pyx_v_value) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.conf_str_value", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+04082: return str(value).replace(';', ';;')
__pyx_t_1 = __Pyx_PyObject_Unicode(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4082, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyUnicode_Replace(((PyObject*)__pyx_t_1), __pyx_mstate_global->__pyx_kp_u__30, __pyx_mstate_global->__pyx_kp_u__31, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4082, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = ((PyObject*)__pyx_t_2); } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
04083:
04084:
+04085: cdef bint _dataframe_columnar_has_single_logical_chunk(
static int __pyx_f_7questdb_7_client__dataframe_columnar_has_single_logical_chunk(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
04086: col_t* col,
04087: size_t row_count) noexcept nogil:
+04088: if col.setup.chunks.n_chunks != 1:
__pyx_t_1 = (__pyx_v_col->setup->chunks.n_chunks != 1);
if (__pyx_t_1) {
/* … */
}
+04089: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+04090: if col.setup.chunks.chunks == NULL:
__pyx_t_1 = (__pyx_v_col->setup->chunks.chunks == NULL);
if (__pyx_t_1) {
/* … */
}
+04091: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+04092: return col.setup.chunks.chunks[0].length == <int64_t>row_count
{
__pyx_r = ((__pyx_v_col->setup->chunks.chunks[0]).length == ((int64_t)__pyx_v_row_count));
}
goto __pyx_L0;
04093:
04094:
+04095: cdef bint _dataframe_columnar_has_single_contiguous_chunk(
static int __pyx_f_7questdb_7_client__dataframe_columnar_has_single_contiguous_chunk(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count) {
struct ArrowArray *__pyx_v_arr;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
04096: col_t* col,
04097: size_t row_count) noexcept nogil:
04098: cdef ArrowArray* arr
+04099: if not _dataframe_columnar_has_single_logical_chunk(col, row_count):
__pyx_t_1 = (!__pyx_f_7questdb_7_client__dataframe_columnar_has_single_logical_chunk(__pyx_v_col, __pyx_v_row_count));
if (__pyx_t_1) {
/* … */
}
+04100: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+04101: arr = &col.setup.chunks.chunks[0]
__pyx_v_arr = (&(__pyx_v_col->setup->chunks.chunks[0]));
04102: # pyarrow allocates exactly `n_buffers` pointers, so `buffers[1]` is
04103: # past the allocation for a struct array (1) or a null array (0).
04104: return (
+04105: arr.offset == 0 and
__pyx_t_2 = (__pyx_v_arr->offset == 0);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
+04106: arr.n_buffers >= 2 and
__pyx_t_2 = (__pyx_v_arr->n_buffers >= 2);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
+04107: arr.buffers != NULL and
__pyx_t_2 = (__pyx_v_arr->buffers != NULL);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
+04108: arr.buffers[1] != NULL)
__pyx_t_2 = ((__pyx_v_arr->buffers[1]) != NULL);
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
{
__pyx_r = __pyx_t_1;
}
goto __pyx_L0;
04109:
04110:
+04111: cdef bint _dataframe_columnar_i64_has_nat(
static int __pyx_f_7questdb_7_client__dataframe_columnar_i64_has_nat(int64_t const *__pyx_v_data, size_t __pyx_v_row_count) {
size_t __pyx_v_row_index;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
04112: const int64_t* data,
04113: size_t row_count) noexcept nogil:
04114: cdef size_t row_index
+04115: for row_index in range(row_count):
__pyx_t_1 = __pyx_v_row_count;
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_row_index = __pyx_t_3;
+04116: if data[row_index] == _NAT:
__pyx_t_4 = ((__pyx_v_data[__pyx_v_row_index]) == __pyx_v_7questdb_7_client__NAT);
if (__pyx_t_4) {
/* … */
}
}
+04117: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+04118: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
04119:
04120:
+04121: cdef bint _dataframe_columnar_col_has_nat(
static int __pyx_f_7questdb_7_client__dataframe_columnar_col_has_nat(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
04122: col_t* col,
04123: size_t row_count) noexcept nogil:
+04124: if not col.setup.nat_scan_done:
__pyx_t_1 = (!__pyx_v_col->setup->nat_scan_done);
if (__pyx_t_1) {
/* … */
}
+04125: col.setup.nat_found = _dataframe_columnar_i64_has_nat(
__pyx_v_col->setup->nat_found = __pyx_f_7questdb_7_client__dataframe_columnar_i64_has_nat(((int64_t const *)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1])), __pyx_v_row_count);
04126: <const int64_t*>col.setup.chunks.chunks[0].buffers[1],
04127: row_count)
+04128: col.setup.nat_scan_done = True
__pyx_v_col->setup->nat_scan_done = 1;
+04129: return col.setup.nat_found
{
__pyx_r = __pyx_v_col->setup->nat_found;
}
goto __pyx_L0;
04130:
04131:
+04132: cdef bint _dataframe_columnar_i64_has_negative(
static int __pyx_f_7questdb_7_client__dataframe_columnar_i64_has_negative(int64_t const *__pyx_v_data, size_t __pyx_v_row_count) {
size_t __pyx_v_row_index;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
04133: const int64_t* data,
04134: size_t row_count) noexcept nogil:
04135: cdef size_t row_index
+04136: for row_index in range(row_count):
__pyx_t_1 = __pyx_v_row_count;
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_row_index = __pyx_t_3;
+04137: if data[row_index] < 0:
__pyx_t_4 = ((__pyx_v_data[__pyx_v_row_index]) < 0);
if (__pyx_t_4) {
/* … */
}
}
+04138: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+04139: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
04140:
04141:
+04142: cdef const qwp_validity* _dataframe_columnar_validity(
static struct qwp_validity const *__pyx_f_7questdb_7_client__dataframe_columnar_validity(struct ArrowArray *__pyx_v_arr, size_t __pyx_v_row_offset, size_t __pyx_v_row_count, struct qwp_validity *__pyx_v_validity) {
struct qwp_validity const *__pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_validity", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
04143: ArrowArray* arr,
04144: size_t row_offset,
04145: size_t row_count,
04146: qwp_validity* validity) except? NULL:
+04147: if arr.null_count == 0:
__pyx_t_1 = (__pyx_v_arr->null_count == 0);
if (__pyx_t_1) {
/* … */
}
+04148: return NULL
{
__pyx_r = NULL;
}
goto __pyx_L0;
+04149: if row_offset % 8 != 0:
__pyx_t_1 = ((__pyx_v_row_offset % 8) != 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04150: raise RuntimeError(
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Columnar_validity_slices_must_st};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4150, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 4150, __pyx_L1_error)
04151: 'Columnar validity slices must start at byte-aligned row offsets.')
+04152: validity.bits = (<const uint8_t*>arr.buffers[0]) + (row_offset // 8)
__pyx_v_validity->bits = (((uint8_t const *)(__pyx_v_arr->buffers[0])) + (__pyx_v_row_offset / 8));
+04153: validity.bit_len = row_count
__pyx_v_validity->bit_len = __pyx_v_row_count;
+04154: return validity
{
__pyx_r = __pyx_v_validity;
}
goto __pyx_L0;
04155:
04156:
+04157: cdef bint _dataframe_columnar_has_validity(
static int __pyx_f_7questdb_7_client__dataframe_columnar_has_validity(struct ArrowArray *__pyx_v_arr) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
04158: ArrowArray* arr) noexcept nogil:
04159: # A null array carries no buffer pointers at all, so the bitmap
04160: # read is bounded by `n_buffers` before it happens. This is the
04161: # gate `_dataframe_columnar_validity` relies on having run.
+04162: return arr.null_count == 0 or (
__pyx_t_2 = (__pyx_v_arr->null_count == 0);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L3_bool_binop_done;
}
+04163: arr.n_buffers >= 1
__pyx_t_2 = (__pyx_v_arr->n_buffers >= 1);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L3_bool_binop_done;
}
+04164: and arr.buffers != NULL
__pyx_t_2 = (__pyx_v_arr->buffers != NULL);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L3_bool_binop_done;
}
+04165: and arr.buffers[0] != NULL)
__pyx_t_2 = ((__pyx_v_arr->buffers[0]) != NULL);
__pyx_t_1 = __pyx_t_2;
__pyx_L3_bool_binop_done:;
{
__pyx_r = __pyx_t_1;
}
goto __pyx_L0;
04166:
04167:
+04168: cdef bint _dataframe_columnar_has_utf8_values(
static int __pyx_f_7questdb_7_client__dataframe_columnar_has_utf8_values(struct ArrowArray *__pyx_v_arr, int __pyx_v_large_offsets) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
04169: ArrowArray* arr, bint large_offsets) noexcept nogil:
+04170: if not (arr.n_buffers >= 3 and
__pyx_t_2 = (__pyx_v_arr->n_buffers >= 3);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
/* … */
__pyx_t_2 = (!__pyx_t_1);
if (__pyx_t_2) {
/* … */
}
+04171: arr.buffers != NULL and
__pyx_t_2 = (__pyx_v_arr->buffers != NULL);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
+04172: arr.buffers[1] != NULL):
__pyx_t_2 = ((__pyx_v_arr->buffers[1]) != NULL); __pyx_t_1 = __pyx_t_2; __pyx_L4_bool_binop_done:;
+04173: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+04174: if arr.length == 0 or arr.buffers[2] != NULL:
__pyx_t_1 = (__pyx_v_arr->length == 0);
if (!__pyx_t_1) {
} else {
__pyx_t_2 = __pyx_t_1;
goto __pyx_L8_bool_binop_done;
}
__pyx_t_1 = ((__pyx_v_arr->buffers[2]) != NULL);
__pyx_t_2 = __pyx_t_1;
__pyx_L8_bool_binop_done:;
if (__pyx_t_2) {
/* … */
}
+04175: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
04176: # NULL byte buffer is valid only with zero data bytes (all-null/empty).
+04177: if large_offsets:
if (__pyx_v_large_offsets) {
/* … */
}
+04178: return (<const int64_t*>arr.buffers[1])[arr.offset + arr.length] == 0
{
__pyx_r = ((((int64_t const *)(__pyx_v_arr->buffers[1]))[(__pyx_v_arr->offset + __pyx_v_arr->length)]) == 0);
}
goto __pyx_L0;
+04179: return (<const int32_t*>arr.buffers[1])[arr.offset + arr.length] == 0
{
__pyx_r = ((((int32_t const *)(__pyx_v_arr->buffers[1]))[(__pyx_v_arr->offset + __pyx_v_arr->length)]) == 0);
}
goto __pyx_L0;
04180:
04181:
+04182: cdef bint _dataframe_columnar_has_utf8_dictionary(
static int __pyx_f_7questdb_7_client__dataframe_columnar_has_utf8_dictionary(struct ArrowArray *__pyx_v_arr) {
struct ArrowArray *__pyx_v_dictionary;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
04183: ArrowArray* arr) noexcept nogil:
+04184: cdef ArrowArray* dictionary = arr.dictionary
__pyx_t_1 = __pyx_v_arr->dictionary; __pyx_v_dictionary = __pyx_t_1;
+04185: if dictionary == NULL:
__pyx_t_2 = (__pyx_v_dictionary == NULL);
if (__pyx_t_2) {
/* … */
}
+04186: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
04187: return (
+04188: dictionary.offset == 0 and
__pyx_t_3 = (__pyx_v_dictionary->offset == 0);
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L4_bool_binop_done;
}
+04189: dictionary.n_buffers >= 3 and
__pyx_t_3 = (__pyx_v_dictionary->n_buffers >= 3);
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L4_bool_binop_done;
}
+04190: dictionary.buffers != NULL and
__pyx_t_3 = (__pyx_v_dictionary->buffers != NULL);
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L4_bool_binop_done;
}
+04191: dictionary.buffers[1] != NULL and
__pyx_t_3 = ((__pyx_v_dictionary->buffers[1]) != NULL);
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L4_bool_binop_done;
}
+04192: (dictionary.length == 0 or dictionary.buffers[2] != NULL))
__pyx_t_3 = (__pyx_v_dictionary->length == 0);
if (!__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_3 = ((__pyx_v_dictionary->buffers[2]) != NULL);
__pyx_t_2 = __pyx_t_3;
__pyx_L4_bool_binop_done:;
{
__pyx_r = __pyx_t_2;
}
goto __pyx_L0;
04193:
04194:
+04195: cdef bint _dataframe_columnar_plan_has_validity(
static int __pyx_f_7questdb_7_client__dataframe_columnar_plan_has_validity(struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan) {
size_t __pyx_v_col_index;
struct ArrowArray *__pyx_v_arr;
struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
04196: dataframe_plan_t* plan) noexcept nogil:
04197: """
04198: True when chunk row boundaries must be byte-aligned (multiples of 8).
04199: Triggers for:
04200: - Any Arrow column whose `null_count != 0` (the encoder reads a
04201: validity bitmap and our slicing requires byte-alignment).
04202: - Any PyObject source. The planner can't see the nulls until the
04203: build phase walks the column; we conservatively assume they
04204: might be present and require alignment.
04205: - col_source_bool_pyobj specifically packs its VALUES into an
04206: LSB-first bitmap; the emit shift `row_offset // 8` requires
04207: alignment whether or not nulls are present.
04208: """
04209: cdef size_t col_index
04210: cdef ArrowArray* arr
04211: cdef col_t* col
+04212: for col_index in range(plan.col_count):
__pyx_t_1 = __pyx_v_plan->col_count;
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_col_index = __pyx_t_3;
+04213: col = &plan.cols.d[col_index]
__pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_col_index]));
+04214: if _is_pyobj_source(col.setup.source):
__pyx_t_4 = __pyx_f_7questdb_7_client__is_pyobj_source(__pyx_v_col->setup->source);
if (__pyx_t_4) {
/* … */
}
+04215: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+04216: arr = &col.setup.chunks.chunks[0]
__pyx_v_arr = (&(__pyx_v_col->setup->chunks.chunks[0]));
+04217: if arr.null_count != 0:
__pyx_t_4 = (__pyx_v_arr->null_count != 0);
if (__pyx_t_4) {
/* … */
}
}
+04218: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+04219: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
04220:
04221:
+04222: cdef size_t _dataframe_columnar_rows_per_chunk(
static size_t __pyx_f_7questdb_7_client__dataframe_columnar_rows_per_chunk(struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan, size_t __pyx_v_max_rows_per_chunk) {
size_t __pyx_v_rows_per_chunk;
size_t __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
04223: dataframe_plan_t* plan,
04224: size_t max_rows_per_chunk) noexcept nogil:
04225: # Clamp to a hard safety upper bound and align to 8 rows when the plan
04226: # carries a validity bitmap (chunk boundary must be byte-aligned).
+04227: cdef size_t rows_per_chunk = max_rows_per_chunk
__pyx_v_rows_per_chunk = __pyx_v_max_rows_per_chunk;
+04228: if rows_per_chunk > 1000000:
__pyx_t_1 = (__pyx_v_rows_per_chunk > 0xF4240);
if (__pyx_t_1) {
/* … */
}
+04229: rows_per_chunk = 1000000
__pyx_v_rows_per_chunk = 0xF4240;
+04230: if rows_per_chunk == 0:
__pyx_t_1 = (__pyx_v_rows_per_chunk == 0);
if (__pyx_t_1) {
/* … */
}
+04231: rows_per_chunk = 1
__pyx_v_rows_per_chunk = 1;
+04232: if _dataframe_columnar_plan_has_validity(plan):
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_plan_has_validity(__pyx_v_plan);
if (__pyx_t_1) {
/* … */
}
+04233: if rows_per_chunk < 8 and rows_per_chunk < plan.row_count:
__pyx_t_2 = (__pyx_v_rows_per_chunk < 8);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L7_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_rows_per_chunk < __pyx_v_plan->row_count);
__pyx_t_1 = __pyx_t_2;
__pyx_L7_bool_binop_done:;
if (__pyx_t_1) {
/* … */
goto __pyx_L6;
}
+04234: rows_per_chunk = 8
__pyx_v_rows_per_chunk = 8;
+04235: elif rows_per_chunk > 8:
__pyx_t_1 = (__pyx_v_rows_per_chunk > 8);
if (__pyx_t_1) {
/* … */
}
__pyx_L6:;
+04236: rows_per_chunk -= rows_per_chunk % 8
__pyx_v_rows_per_chunk = (__pyx_v_rows_per_chunk - (__pyx_v_rows_per_chunk % 8));
+04237: if rows_per_chunk == 0:
__pyx_t_1 = (__pyx_v_rows_per_chunk == 0);
if (__pyx_t_1) {
/* … */
}
+04238: rows_per_chunk = 8
__pyx_v_rows_per_chunk = 8;
+04239: return rows_per_chunk
{
__pyx_r = __pyx_v_rows_per_chunk;
}
goto __pyx_L0;
04240:
04241:
+04242: cdef object _dataframe_columnar_global_failure(str reason):
static PyObject *__pyx_f_7questdb_7_client__dataframe_columnar_global_failure(PyObject *__pyx_v_reason) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_global_failure", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
04243: return {
+04244: 'column': None,
__pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4244, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_column_2, Py_None) < (0)) __PYX_ERR(0, 4244, __pyx_L1_error)
+04245: 'target': None,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_target, Py_None) < (0)) __PYX_ERR(0, 4244, __pyx_L1_error)
+04246: 'source_code': None,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_source_code, Py_None) < (0)) __PYX_ERR(0, 4244, __pyx_L1_error)
+04247: 'reason': reason,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_reason, __pyx_v_reason) < (0)) __PYX_ERR(0, 4244, __pyx_L1_error) { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
04248: }
04249:
04250:
+04251: cdef object _dataframe_columnar_col_failure(
static PyObject *__pyx_f_7questdb_7_client__dataframe_columnar_col_failure(PyObject *__pyx_v_df, struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, PyObject *__pyx_v_reason) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_col_failure", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
04252: object df,
04253: col_t* col,
04254: str reason):
04255: return {
+04256: 'column': df.columns[col.setup.orig_index],
__pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4256, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4256, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_2, __pyx_v_col->setup->orig_index, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4256, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_column_2, __pyx_t_3) < (0)) __PYX_ERR(0, 4256, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+04257: 'target': _TARGET_NAMES[col.setup.target],
if (unlikely(__pyx_v_7questdb_7_client__TARGET_NAMES == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
__PYX_ERR(0, 4257, __pyx_L1_error)
}
__pyx_t_3 = __Pyx_PyLong_From_enum____pyx_t_7questdb_7_client_col_target_t(__pyx_v_col->setup->target); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4257, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_7questdb_7_client__TARGET_NAMES, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4257, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_target, __pyx_t_2) < (0)) __PYX_ERR(0, 4256, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+04258: 'source_code': <int>col.setup.source,
__pyx_t_2 = __Pyx_PyLong_From_int(((int)__pyx_v_col->setup->source)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4258, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_source_code, __pyx_t_2) < (0)) __PYX_ERR(0, 4256, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+04259: 'reason': reason,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_reason, __pyx_v_reason) < (0)) __PYX_ERR(0, 4256, __pyx_L1_error) { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
04260: }
04261:
04262:
+04263: cdef object _dataframe_columnar_plan_normalizations(
static PyObject *__pyx_f_7questdb_7_client__dataframe_columnar_plan_normalizations(CYTHON_UNUSED PyObject *__pyx_v_df, CYTHON_UNUSED struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan) {
PyObject *__pyx_v_normalizations = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_plan_normalizations", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_normalizations);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
04264: object df,
04265: dataframe_plan_t* plan):
+04266: cdef list normalizations = []
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4266, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_normalizations = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
+04267: return normalizations
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_normalizations);
__pyx_r = __pyx_v_normalizations;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
04268:
04269:
+04270: cdef object _dataframe_columnar_plan_failures(
static PyObject *__pyx_f_7questdb_7_client__dataframe_columnar_plan_failures(PyObject *__pyx_v_df, struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan) {
PyObject *__pyx_v_failures = 0;
size_t __pyx_v_col_index;
size_t __pyx_v_field_count;
struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col;
int64_t const *__pyx_v_ts_data;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_plan_failures", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_failures);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
04271: object df,
04272: dataframe_plan_t* plan):
+04273: cdef list failures = []
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_failures = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
04274: cdef size_t col_index
+04275: cdef size_t field_count = 0
__pyx_v_field_count = 0;
04276: cdef col_t* col
04277: cdef const int64_t* ts_data
04278:
+04279: if (plan.col_count == 0) or (plan.row_count == 0):
__pyx_t_3 = (__pyx_v_plan->col_count == 0);
if (!__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_3 = (__pyx_v_plan->row_count == 0);
__pyx_t_2 = __pyx_t_3;
__pyx_L4_bool_binop_done:;
if (__pyx_t_2) {
/* … */
}
+04280: return failures
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_failures);
__pyx_r = __pyx_v_failures;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
04281:
+04282: if plan.c_table_name.buf == NULL:
__pyx_t_2 = (__pyx_v_plan->c_table_name.buf == NULL);
if (__pyx_t_2) {
/* … */
}
+04283: failures.append(_dataframe_columnar_global_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_global_failure(__pyx_mstate_global->__pyx_kp_u_v1_requires_a_fixed_table_name_t); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4283, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4283, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
04284: 'v1 requires a fixed table_name; table_name_col is not supported.'))
04285:
+04286: if (plan.at_value != _AT_IS_SET_BY_COLUMN
__pyx_t_3 = (__pyx_v_plan->at_value != __pyx_v_7questdb_7_client__AT_IS_SET_BY_COLUMN);
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L8_bool_binop_done;
}
/* … */
if (__pyx_t_2) {
/* … */
}
+04287: and plan.at_value != _AT_IS_SERVER_NOW
__pyx_t_3 = (__pyx_v_plan->at_value != __pyx_v_7questdb_7_client__AT_IS_SERVER_NOW);
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L8_bool_binop_done;
}
+04288: and plan.at_value < 0):
__pyx_t_3 = (__pyx_v_plan->at_value < 0); __pyx_t_2 = __pyx_t_3; __pyx_L8_bool_binop_done:;
+04289: failures.append(_dataframe_columnar_global_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_global_failure(__pyx_mstate_global->__pyx_kp_u_v1_requires_at_to_be_a_non_null); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4289, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4289, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
04290: 'v1 requires at to be a non-null DataFrame timestamp column, '
04291: 'a fixed timestamp shared by every row, or the explicit '
04292: 'ServerTimestamp sentinel.'))
04293:
+04294: for col_index in range(plan.col_count):
__pyx_t_5 = __pyx_v_plan->col_count;
__pyx_t_6 = __pyx_t_5;
for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
__pyx_v_col_index = __pyx_t_7;
+04295: col = &plan.cols.d[col_index]
__pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_col_index]));
+04296: if col.setup.target == col_target_t.col_target_skip:
__pyx_t_2 = (__pyx_v_col->setup->target == __pyx_e_7questdb_7_client_col_target_skip);
if (__pyx_t_2) {
/* … */
}
+04297: continue
goto __pyx_L11_continue;
+04298: if col.setup.target == col_target_t.col_target_table:
__pyx_t_2 = (__pyx_v_col->setup->target == __pyx_e_7questdb_7_client_col_target_table);
if (__pyx_t_2) {
/* … */
}
+04299: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_table_name_columns_are_not_suppo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4299, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4299, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
04300: df, col, 'table-name columns are not supported in v1.'))
+04301: continue
goto __pyx_L11_continue;
+04302: if col.setup.target != col_target_t.col_target_at:
__pyx_t_2 = (__pyx_v_col->setup->target != __pyx_e_7questdb_7_client_col_target_at);
if (__pyx_t_2) {
/* … */
}
+04303: field_count += 1
__pyx_v_field_count = (__pyx_v_field_count + 1);
+04304: if col.setup.target == col_target_t.col_target_column_arrow:
__pyx_t_2 = (__pyx_v_col->setup->target == __pyx_e_7questdb_7_client_col_target_column_arrow);
if (__pyx_t_2) {
/* … */
goto __pyx_L16;
}
04305: # Generic Arrow passthrough is opaque to this planner. The Rust
04306: # importer validates the type-specific buffer layout, validity,
04307: # children and logical offset. This side only needs the one array
04308: # that the per-column import handle accepts, spanning every row in
04309: # the pandas frame.
+04310: if not _dataframe_columnar_has_single_logical_chunk(
__pyx_t_2 = (!__pyx_f_7questdb_7_client__dataframe_columnar_has_single_logical_chunk(__pyx_v_col, __pyx_v_plan->row_count));
if (__pyx_t_2) {
/* … */
}
04311: col, plan.row_count):
+04312: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_requires_one_Arrow_chunk_span); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4312, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4312, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
04313: df, col,
04314: 'v1 requires one Arrow chunk spanning the whole column.'))
+04315: continue
goto __pyx_L11_continue;
04316: else:
04317: # Direct encoders below address buffers[0]/buffers[1] themselves,
04318: # so they require a zero-offset value buffer and a readable
04319: # validity bitmap. Arrow passthrough deliberately does not.
+04320: if not _dataframe_columnar_has_single_contiguous_chunk(
/*else*/ {
/* … */
__pyx_t_2 = (!__pyx_f_7questdb_7_client__dataframe_columnar_has_single_contiguous_chunk(__pyx_v_col, __pyx_v_plan->row_count));
/* … */
if (__pyx_t_2) {
/* … */
}
04321: col, plan.row_count):
+04322: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_requires_one_contiguous_zero); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4322, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4322, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
04323: df, col,
04324: 'v1 requires one contiguous zero-offset buffer.'))
+04325: continue
goto __pyx_L11_continue;
+04326: if not _dataframe_columnar_has_validity(
__pyx_t_2 = (!__pyx_f_7questdb_7_client__dataframe_columnar_has_validity((&(__pyx_v_col->setup->chunks.chunks[0]))));
if (__pyx_t_2) {
/* … */
}
}
__pyx_L16:;
04327: &col.setup.chunks.chunks[0]):
+04328: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_requires_a_zero_offset_validi); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4328, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4328, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
04329: df, col, 'v1 requires a zero-offset validity bitmap when '
04330: 'nulls are present.'))
+04331: continue
goto __pyx_L11_continue;
04332:
+04333: if col.setup.target == col_target_t.col_target_column_bool:
switch (__pyx_v_col->setup->target) {
case __pyx_e_7questdb_7_client_col_target_column_bool:
/* … */
break;
case __pyx_e_7questdb_7_client_col_target_column_i64:
+04334: if col.setup.source not in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_bool_pyobj:
/* … */
__pyx_t_2 = 0;
break;
default:
__pyx_t_2 = 1;
break;
}
__pyx_t_3 = __pyx_t_2;
if (__pyx_t_3) {
/* … */
}
+04335: col_source_t.col_source_bool_pyobj,
case __pyx_e_7questdb_7_client_col_source_bool_numpy:
04336: col_source_t.col_source_bool_numpy):
+04337: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_only_supports_object_dtype_bo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4337, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4337, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
04338: df,
04339: col,
04340: 'v1 only supports object-dtype bool or NumPy bool '
04341: 'columns; Arrow nullable bool not yet supported.'))
+04342: elif col.setup.target == col_target_t.col_target_column_i64:
break;
case __pyx_e_7questdb_7_client_col_target_column_f64:
+04343: if col.setup.source not in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_i64_numpy:
/* … */
__pyx_t_3 = 0;
break;
default:
__pyx_t_3 = 1;
break;
}
__pyx_t_2 = __pyx_t_3;
if (__pyx_t_2) {
/* … */
}
+04344: col_source_t.col_source_i64_numpy,
case __pyx_e_7questdb_7_client_col_source_i8_numpy:
+04345: col_source_t.col_source_i8_numpy,
case __pyx_e_7questdb_7_client_col_source_i16_numpy:
+04346: col_source_t.col_source_i16_numpy,
case __pyx_e_7questdb_7_client_col_source_i32_numpy:
+04347: col_source_t.col_source_i32_numpy,
case __pyx_e_7questdb_7_client_col_source_u8_numpy:
+04348: col_source_t.col_source_u8_numpy,
case __pyx_e_7questdb_7_client_col_source_u16_numpy:
+04349: col_source_t.col_source_u16_numpy,
case __pyx_e_7questdb_7_client_col_source_u32_numpy:
+04350: col_source_t.col_source_u32_numpy,
case __pyx_e_7questdb_7_client_col_source_u64_numpy:
+04351: col_source_t.col_source_u64_numpy,
case __pyx_e_7questdb_7_client_col_source_u32_arrow:
+04352: col_source_t.col_source_u32_arrow,
case __pyx_e_7questdb_7_client_col_source_i64_arrow:
+04353: col_source_t.col_source_i64_arrow,
case __pyx_e_7questdb_7_client_col_source_int_pyobj:
04354: col_source_t.col_source_int_pyobj):
+04355: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_only_supports_NumPy_signed_un); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4355, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4355, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
04356: df,
04357: col,
04358: 'v1 only supports NumPy signed/unsigned int columns, '
04359: 'Arrow uint32/int64 columns, or object-dtype int '
04360: 'columns.'))
+04361: elif col.setup.target == col_target_t.col_target_column_f64:
break;
case __pyx_e_7questdb_7_client_col_target_column_ts:
+04362: if col.setup.source not in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_f64_numpy:
/* … */
__pyx_t_2 = 0;
break;
default:
__pyx_t_2 = 1;
break;
}
__pyx_t_3 = __pyx_t_2;
if (__pyx_t_3) {
/* … */
}
+04363: col_source_t.col_source_f64_numpy,
case __pyx_e_7questdb_7_client_col_source_f32_numpy:
+04364: col_source_t.col_source_f32_numpy,
case __pyx_e_7questdb_7_client_col_source_f64_arrow:
+04365: col_source_t.col_source_f64_arrow,
case __pyx_e_7questdb_7_client_col_source_float_pyobj:
04366: col_source_t.col_source_float_pyobj):
+04367: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_only_supports_NumPy_float32_f); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4367, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4367, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
04368: df,
04369: col,
04370: 'v1 only supports NumPy float32/float64, Arrow '
04371: 'float64, or object-dtype float columns.'))
+04372: elif col.setup.target == col_target_t.col_target_column_ts:
break;
case __pyx_e_7questdb_7_client_col_target_column_str:
+04373: if col.setup.source not in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_dt64ns_numpy:
/* … */
__pyx_t_3 = 0;
break;
default:
__pyx_t_3 = 1;
break;
}
__pyx_t_2 = __pyx_t_3;
if (__pyx_t_2) {
/* … */
goto __pyx_L23;
}
+04374: col_source_t.col_source_dt64ns_numpy,
case __pyx_e_7questdb_7_client_col_source_dt64us_numpy:
+04375: col_source_t.col_source_dt64us_numpy,
case __pyx_e_7questdb_7_client_col_source_dt64ns_tz_arrow:
+04376: col_source_t.col_source_dt64ns_tz_arrow,
case __pyx_e_7questdb_7_client_col_source_dt64us_tz_arrow:
+04377: col_source_t.col_source_dt64us_tz_arrow,
case __pyx_e_7questdb_7_client_col_source_datetime_pyobj:
04378: col_source_t.col_source_datetime_pyobj):
+04379: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_only_supports_NumPy_datetime6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4379, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4379, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
04380: df,
04381: col,
04382: 'v1 only supports NumPy datetime64[ns/us], '
04383: 'tz-aware datetime64/timestamp[pyarrow], or '
04384: 'object-dtype datetime timestamp field columns.'))
+04385: elif (col.setup.source == col_source_t.col_source_dt64ns_numpy
__pyx_t_3 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_dt64ns_numpy);
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L24_bool_binop_done;
}
/* … */
if (__pyx_t_2) {
/* … */
}
__pyx_L23:;
+04386: and _PYARROW is None):
__pyx_t_3 = (__pyx_v_7questdb_7_client__PYARROW == Py_None);
__pyx_t_2 = __pyx_t_3;
__pyx_L24_bool_binop_done:;
04387: # NaT in a datetime64[ns] field is INT64_MIN nanoseconds;
04388: # the zero-copy ns->micros wire conversion would corrupt
04389: # that null sentinel into a bogus 1677 timestamp. With
04390: # pyarrow, _dataframe_columnar_promote_cols already
04391: # re-exported any NaT-carrying column through Arrow (and
04392: # imported pyarrow doing so), leaving nothing to reject.
+04393: if _dataframe_columnar_col_has_nat(col, plan.row_count):
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_col_has_nat(__pyx_v_col, __pyx_v_plan->row_count);
if (__pyx_t_2) {
/* … */
}
+04394: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_datetime64_ns_timestamp_field); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4394, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4394, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
04395: df,
04396: col,
04397: 'v1 datetime64[ns] timestamp field columns cannot '
04398: 'contain NaT without pyarrow; install pyarrow, or '
04399: 'use datetime64[us] or an object-dtype datetime '
04400: 'column for NULL timestamps.'))
+04401: elif col.setup.target == col_target_t.col_target_column_str:
break;
case __pyx_e_7questdb_7_client_col_target_symbol:
+04402: if col.setup.source == col_source_t.col_source_str_pyobj:
__pyx_t_2 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_str_pyobj);
if (__pyx_t_2) {
goto __pyx_L27;
}
04403: # PyObject sources are validated by the pre-build phase
04404: # at row level (one walk catches all rows). The planner
04405: # has nothing more to check here.
04406: pass
+04407: elif col.setup.source in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_str_i8_cat:
/* … */
__pyx_t_2 = 1;
break;
default:
__pyx_t_2 = 0;
break;
}
__pyx_t_3 = __pyx_t_2;
if (__pyx_t_3) {
/* … */
goto __pyx_L27;
}
+04408: col_source_t.col_source_str_i8_cat,
case __pyx_e_7questdb_7_client_col_source_str_i16_cat:
+04409: col_source_t.col_source_str_i16_cat,
case __pyx_e_7questdb_7_client_col_source_str_i32_cat:
04410: col_source_t.col_source_str_i32_cat):
+04411: if not _dataframe_columnar_has_utf8_dictionary(
__pyx_t_3 = (!__pyx_f_7questdb_7_client__dataframe_columnar_has_utf8_dictionary((&(__pyx_v_col->setup->chunks.chunks[0]))));
if (__pyx_t_3) {
/* … */
}
04412: &col.setup.chunks.chunks[0]):
+04413: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_requires_Arrow_UTF_8_or_Large); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4413, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4413, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
04414: df,
04415: col,
04416: 'v1 requires Arrow UTF-8 or LargeUtf8 dictionary '
04417: 'offsets and byte buffers for categorical columns.'))
+04418: elif col.setup.source not in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_str_utf8_arrow:
/* … */
__pyx_t_3 = 0;
break;
default:
__pyx_t_3 = 1;
break;
}
__pyx_t_2 = __pyx_t_3;
if (__pyx_t_2) {
/* … */
goto __pyx_L27;
}
+04419: col_source_t.col_source_str_utf8_arrow,
case __pyx_e_7questdb_7_client_col_source_str_lrg_utf8_arrow:
04420: col_source_t.col_source_str_lrg_utf8_arrow):
+04421: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_only_supports_string_pyarrow); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4421, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4421, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
04422: df,
04423: col,
04424: 'v1 only supports string[pyarrow] columns backed by '
04425: 'Arrow UTF-8 or LargeUtf8, pandas string Categorical, '
04426: 'or object-dtype str.'))
+04427: elif not _dataframe_columnar_has_utf8_values(
__pyx_t_2 = (!__pyx_f_7questdb_7_client__dataframe_columnar_has_utf8_values((&(__pyx_v_col->setup->chunks.chunks[0])), (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_str_lrg_utf8_arrow)));
if (__pyx_t_2) {
/* … */
}
__pyx_L27:;
04428: &col.setup.chunks.chunks[0],
04429: col.setup.source ==
04430: col_source_t.col_source_str_lrg_utf8_arrow):
+04431: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_requires_Arrow_UTF_8_or_Large_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4431, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4431, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
04432: df,
04433: col,
04434: 'v1 requires Arrow UTF-8 or LargeUtf8 offsets and byte buffers.'))
+04435: elif col.setup.target == col_target_t.col_target_symbol:
break;
case __pyx_e_7questdb_7_client_col_target_at:
+04436: if col.setup.source in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_str_i8_cat:
/* … */
break;
case __pyx_e_7questdb_7_client_col_source_str_utf8_arrow:
+04437: col_source_t.col_source_str_i8_cat,
case __pyx_e_7questdb_7_client_col_source_str_i16_cat:
+04438: col_source_t.col_source_str_i16_cat,
case __pyx_e_7questdb_7_client_col_source_str_i32_cat:
04439: col_source_t.col_source_str_i32_cat):
+04440: if not _dataframe_columnar_has_utf8_dictionary(
__pyx_t_2 = (!__pyx_f_7questdb_7_client__dataframe_columnar_has_utf8_dictionary((&(__pyx_v_col->setup->chunks.chunks[0]))));
if (__pyx_t_2) {
/* … */
}
04441: &col.setup.chunks.chunks[0]):
+04442: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_requires_Arrow_UTF_8_or_Large_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4442, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4442, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
04443: df,
04444: col,
04445: 'v1 requires Arrow UTF-8 or LargeUtf8 dictionary '
04446: 'offsets and byte buffers for categorical symbols.'))
+04447: elif col.setup.source in (
break;
default:
+04448: col_source_t.col_source_str_utf8_arrow,
case __pyx_e_7questdb_7_client_col_source_str_lrg_utf8_arrow:
04449: col_source_t.col_source_str_lrg_utf8_arrow):
+04450: if not _dataframe_columnar_has_utf8_values(
__pyx_t_2 = (!__pyx_f_7questdb_7_client__dataframe_columnar_has_utf8_values((&(__pyx_v_col->setup->chunks.chunks[0])), (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_str_lrg_utf8_arrow)));
if (__pyx_t_2) {
/* … */
}
04451: &col.setup.chunks.chunks[0],
04452: col.setup.source ==
04453: col_source_t.col_source_str_lrg_utf8_arrow):
+04454: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_requires_Arrow_UTF_8_or_Large_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4454, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4454, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
04455: df,
04456: col,
04457: 'v1 requires Arrow UTF-8 or LargeUtf8 offsets and '
04458: 'byte buffers.'))
04459: else:
+04460: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_only_supports_pandas_string_C); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4460, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4460, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; break; }
04461: df,
04462: col,
04463: 'v1 only supports pandas string Categorical or '
04464: 'string[pyarrow] symbol columns.'))
+04465: elif col.setup.target == col_target_t.col_target_at:
break;
case __pyx_e_7questdb_7_client_col_target_column_decimal:
+04466: if col.setup.source not in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_dt64ns_numpy:
/* … */
__pyx_t_2 = 0;
break;
default:
__pyx_t_2 = 1;
break;
}
__pyx_t_3 = __pyx_t_2;
if (__pyx_t_3) {
/* … */
goto __pyx_L31;
}
+04467: col_source_t.col_source_dt64ns_numpy,
case __pyx_e_7questdb_7_client_col_source_dt64us_numpy:
+04468: col_source_t.col_source_dt64us_numpy,
case __pyx_e_7questdb_7_client_col_source_dt64ns_tz_arrow:
+04469: col_source_t.col_source_dt64ns_tz_arrow,
case __pyx_e_7questdb_7_client_col_source_dt64us_tz_arrow:
+04470: col_source_t.col_source_dt64us_tz_arrow,
case __pyx_e_7questdb_7_client_col_source_dt64ms_tz_arrow:
+04471: col_source_t.col_source_dt64ms_tz_arrow,
case __pyx_e_7questdb_7_client_col_source_dt64s_tz_arrow:
04472: col_source_t.col_source_dt64s_tz_arrow):
+04473: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_only_supports_NumPy_datetime6_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4473, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4473, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
04474: df,
04475: col,
04476: 'v1 only supports NumPy datetime64[ns/us] or '
04477: 'tz-aware datetime64/timestamp[pyarrow] '
04478: 'designated timestamp columns.'))
+04479: elif (col.setup.source in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_dt64ns_tz_arrow:
/* … */
__pyx_t_2 = 1;
break;
default:
__pyx_t_2 = 0;
break;
}
__pyx_t_8 = __pyx_t_2;
if (__pyx_t_8) {
} else {
__pyx_t_3 = __pyx_t_8;
goto __pyx_L32_bool_binop_done;
}
/* … */
if (__pyx_t_3) {
/* … */
goto __pyx_L31;
}
+04480: col_source_t.col_source_dt64ns_tz_arrow,
case __pyx_e_7questdb_7_client_col_source_dt64us_tz_arrow:
+04481: col_source_t.col_source_dt64us_tz_arrow,
case __pyx_e_7questdb_7_client_col_source_dt64ms_tz_arrow:
+04482: col_source_t.col_source_dt64ms_tz_arrow,
case __pyx_e_7questdb_7_client_col_source_dt64s_tz_arrow:
04483: col_source_t.col_source_dt64s_tz_arrow)
+04484: and col.setup.chunks.chunks[0].null_count != 0):
__pyx_t_8 = ((__pyx_v_col->setup->chunks.chunks[0]).null_count != 0);
__pyx_t_3 = __pyx_t_8;
__pyx_L32_bool_binop_done:;
+04485: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_designated_timestamp_columns); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4485, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4485, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
04486: df,
04487: col,
04488: 'v1 designated timestamp columns cannot contain nulls.'))
04489: else:
+04490: ts_data = <const int64_t*>col.setup.chunks.chunks[0].buffers[1]
/*else*/ {
__pyx_v_ts_data = ((int64_t const *)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
+04491: if _dataframe_columnar_i64_has_nat(ts_data, plan.row_count):
__pyx_t_3 = __pyx_f_7questdb_7_client__dataframe_columnar_i64_has_nat(__pyx_v_ts_data, __pyx_v_plan->row_count);
if (__pyx_t_3) {
/* … */
goto __pyx_L34;
}
+04492: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_designated_timestamp_columns_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4492, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4492, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
04493: df,
04494: col,
04495: 'v1 designated timestamp columns cannot contain NaT.'))
+04496: elif _dataframe_columnar_i64_has_negative(
__pyx_t_3 = __pyx_f_7questdb_7_client__dataframe_columnar_i64_has_negative(__pyx_v_ts_data, __pyx_v_plan->row_count);
if (__pyx_t_3) {
/* … */
}
__pyx_L34:;
}
__pyx_L31:;
04497: ts_data, plan.row_count):
+04498: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_designated_timestamp_columns_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4498, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4498, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
04499: df,
04500: col,
04501: 'v1 designated timestamp columns cannot contain '
04502: 'timestamps before the Unix epoch.'))
+04503: elif col.setup.target == col_target_t.col_target_column_decimal:
break;
case __pyx_e_7questdb_7_client_col_target_column_i8:
+04504: if col.setup.source == col_source_t.col_source_decimal_pyobj:
__pyx_t_3 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_decimal_pyobj);
if (__pyx_t_3) {
/* … */
goto __pyx_L35;
}
04505: # _dataframe_columnar_promote_cols re-exports these through
04506: # Arrow; reaching this branch means pyarrow is unavailable.
+04507: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_object_dtype_Decimal_columns_req); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4507, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4507, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
04508: df,
04509: col,
04510: 'object-dtype Decimal columns require pyarrow on the '
04511: 'columnar path; install pyarrow, or back the column '
04512: 'with an Arrow decimal type.'))
+04513: elif col.setup.source not in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_decimal32_arrow:
/* … */
__pyx_t_3 = 0;
break;
default:
__pyx_t_3 = 1;
break;
}
__pyx_t_8 = __pyx_t_3;
if (__pyx_t_8) {
/* … */
}
__pyx_L35:;
+04514: col_source_t.col_source_decimal32_arrow,
case __pyx_e_7questdb_7_client_col_source_decimal64_arrow:
+04515: col_source_t.col_source_decimal64_arrow,
case __pyx_e_7questdb_7_client_col_source_decimal128_arrow:
+04516: col_source_t.col_source_decimal128_arrow,
case __pyx_e_7questdb_7_client_col_source_decimal256_arrow:
04517: col_source_t.col_source_decimal256_arrow):
+04518: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_only_supports_Arrow_backed_de); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4518, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4518, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
04519: df,
04520: col,
04521: 'v1 only supports Arrow-backed decimal columns '
04522: '(pyarrow decimal32/64/128/256).'))
+04523: elif col.setup.target in (
break;
default:
+04524: col_target_t.col_target_column_i8,
case __pyx_e_7questdb_7_client_col_target_column_i16:
+04525: col_target_t.col_target_column_i16,
case __pyx_e_7questdb_7_client_col_target_column_i32:
+04526: col_target_t.col_target_column_i32,
case __pyx_e_7questdb_7_client_col_target_column_f32:
+04527: col_target_t.col_target_column_f32,
case __pyx_e_7questdb_7_client_col_target_column_uuid:
+04528: col_target_t.col_target_column_uuid,
case __pyx_e_7questdb_7_client_col_target_column_ipv4:
+04529: col_target_t.col_target_column_ipv4,
case __pyx_e_7questdb_7_client_col_target_column_binary:
+04530: col_target_t.col_target_column_binary,
case __pyx_e_7questdb_7_client_col_target_column_arrow:
04531: col_target_t.col_target_column_arrow):
04532: # Column-QWP-only targets reached via `_FIELD_TARGETS_QWP`.
04533: # Routing has already held each one's source to its set in
04534: # `_TARGET_TO_SOURCES`, and the append handles every member
04535: # of that set. The contiguous-buffer +
04536: # validity checks above cover layout; the per-type FFI
04537: # handles the wire encoding. col_target_column_arrow delegates
04538: # type validation to the Rust importer.
04539: pass
04540: else:
+04541: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, ((PyObject*)__pyx_t_9)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4541, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4541, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; break; } __pyx_L11_continue:; }
04542: df,
04543: col,
+04544: f'v1 does not support {_TARGET_NAMES[col.setup.target]} '
if (unlikely(__pyx_v_7questdb_7_client__TARGET_NAMES == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
__PYX_ERR(0, 4544, __pyx_L1_error)
}
__pyx_t_1 = __Pyx_PyLong_From_enum____pyx_t_7questdb_7_client_col_target_t(__pyx_v_col->setup->target); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4544, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_9 = __Pyx_PyDict_GetItem(__pyx_v_7questdb_7_client__TARGET_NAMES, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4544, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_t_9, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4544, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__pyx_t_10[0] = __pyx_mstate_global->__pyx_kp_u_v1_does_not_support;
__pyx_t_10[1] = __pyx_t_1;
__pyx_t_10[2] = __pyx_mstate_global->__pyx_kp_u_columns_3;
__pyx_t_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, 4544, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
04545: 'columns.'))
04546:
+04547: if field_count == 0:
__pyx_t_8 = (__pyx_v_field_count == 0);
if (__pyx_t_8) {
/* … */
}
+04548: failures.append(_dataframe_columnar_global_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_global_failure(__pyx_mstate_global->__pyx_kp_u_v1_requires_at_least_one_non_tim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4548, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4548, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
04549: 'v1 requires at least one non-timestamp data column.'))
04550:
+04551: return failures
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_failures);
__pyx_r = __pyx_v_failures;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
04552:
04553:
+04554: cdef void_int _dataframe_columnar_validate_plan(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_validate_plan(PyObject *__pyx_v_df, struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan) {
PyObject *__pyx_v_failures = 0;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_validate_plan", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_failures);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
04555: object df,
04556: dataframe_plan_t* plan) except -1:
+04557: cdef object failures = _dataframe_columnar_plan_failures(df, plan)
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_plan_failures(__pyx_v_df, __pyx_v_plan); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4557, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_failures = __pyx_t_1; __pyx_t_1 = 0;
+04558: if failures:
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_failures); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 4558, __pyx_L1_error) if (unlikely(__pyx_t_2)) { /* … */ }
+04559: raise UnsupportedDataFrameShapeError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_UnsupportedDataFrameShapeError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4559, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
04560: 'DataFrame is not supported by QuestDB.dataframe() columnar v1.',
+04561: failures)
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_DataFrame_is_not_supported_by_Qu, __pyx_v_failures};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4559, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 4559, __pyx_L1_error)
04562:
04563:
+04564: cdef object _dataframe_columnar_ndarray_col_to_arrow(object df, col_t* col):
static PyObject *__pyx_f_7questdb_7_client__dataframe_columnar_ndarray_col_to_arrow(PyObject *__pyx_v_df, struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col) {
PyObject *__pyx_v_series = 0;
PyObject *__pyx_v_cell = 0;
PyArrayObject *__pyx_v_arr;
int __pyx_v_nested;
PyObject *__pyx_v_col_name = 0;
PyObject *__pyx_9genexpr17__pyx_v_cell = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_ndarray_col_to_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_series);
__Pyx_XDECREF(__pyx_v_cell);
__Pyx_XDECREF(__pyx_v_col_name);
__Pyx_XDECREF(__pyx_9genexpr17__pyx_v_cell);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+04565: cdef object series = df.iloc[:, col.setup.orig_index]
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4565, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyLong_FromSize_t(__pyx_v_col->setup->orig_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4565, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4565, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 4565, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_2); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2) != (0)) __PYX_ERR(0, 4565, __pyx_L1_error); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4565, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_series = __pyx_t_2; __pyx_t_2 = 0;
04566: cdef object cell
04567: cdef PyArrayObject* arr
+04568: cdef bint nested = False
__pyx_v_nested = 0;
+04569: cdef object col_name = df.columns[col.setup.orig_index]
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4569, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_2, __pyx_v_col->setup->orig_index, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4569, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_col_name = __pyx_t_3; __pyx_t_3 = 0;
+04570: for cell in series:
if (likely(PyList_CheckExact(__pyx_v_series)) || PyTuple_CheckExact(__pyx_v_series)) { __pyx_t_3 = __pyx_v_series; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_series); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4570, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4570, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_5)) { if (likely(PyList_CheckExact(__pyx_t_3))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 4570, __pyx_L1_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } __pyx_t_2 = __Pyx_PyList_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, 4570, __pyx_L1_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_2 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4)); #else __pyx_t_2 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4); #endif ++__pyx_t_4; } if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4570, __pyx_L1_error) } else { __pyx_t_2 = __pyx_t_5(__pyx_t_3); if (unlikely(!__pyx_t_2)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 4570, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_2); __Pyx_XDECREF_SET(__pyx_v_cell, __pyx_t_2); __pyx_t_2 = 0; /* … */ __pyx_L3_continue:; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+04571: if _dataframe_is_null_pyobj(<PyObject*>cell):
__pyx_t_6 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(((PyObject *)__pyx_v_cell));
if (__pyx_t_6) {
/* … */
}
+04572: continue
goto __pyx_L3_continue;
+04573: if not PyArray_CheckExact(<PyObject*>cell):
__pyx_t_6 = (!PyArray_CheckExact(((PyObject *)__pyx_v_cell)));
if (unlikely(__pyx_t_6)) {
/* … */
}
+04574: raise QuestDBError(
__pyx_t_1 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4574, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
+04575: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4575, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4575, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+04576: f'Bad column {col_name!r}: mixed object cells; expected '
__pyx_t_8 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4576, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); /* … */ __pyx_t_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, 4576, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_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, 4574, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 4574, __pyx_L1_error)
04577: f'every non-null cell to be a numpy array, got '
+04578: f'{_fqn(type(cell))}.')
__pyx_t_10 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_cell)))); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4578, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_11 = __Pyx_PyUnicode_Unicode(__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4578, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_12[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_12[1] = __pyx_t_8; __pyx_t_12[2] = __pyx_mstate_global->__pyx_kp_u_mixed_object_cells_expected_eve; __pyx_t_12[3] = __pyx_t_11; __pyx_t_12[4] = __pyx_mstate_global->__pyx_kp_u__3;
+04579: arr = <PyArrayObject*>cell
__pyx_v_arr = ((PyArrayObject *)__pyx_v_cell);
+04580: if PyArray_TYPE(arr) != NPY_DOUBLE:
__pyx_t_6 = (PyArray_TYPE(__pyx_v_arr) != NPY_DOUBLE);
if (unlikely(__pyx_t_6)) {
/* … */
}
+04581: raise QuestDBError(
__pyx_t_7 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4581, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
+04582: QuestDBErrorCode.ArrayError,
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4582, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_ArrayError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4582, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+04583: f'Bad column {col_name!r}: Only float64 numpy arrays are '
__pyx_t_9 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4583, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); /* … */ __pyx_t_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, 4583, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_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, 4581, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 4581, __pyx_L1_error)
+04584: f'supported, got dtype: {cell.dtype}')
__pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_cell, __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4584, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_8 = __Pyx_PyObject_FormatSimple(__pyx_t_11, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4584, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_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;
+04585: if PyArray_NDIM(arr) > 1:
__pyx_t_6 = (PyArray_NDIM(__pyx_v_arr) > 1);
if (__pyx_t_6) {
/* … */
}
+04586: nested = True
__pyx_v_nested = 1;
+04587: if not nested:
__pyx_t_6 = (!__pyx_v_nested);
if (__pyx_t_6) {
/* … */
}
+04588: return _PYARROW.Array.from_pandas(series)
__pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_Array); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4588, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_2 = __pyx_t_10; __Pyx_INCREF(__pyx_t_2); __pyx_t_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, 4588, __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;
04589: # pyarrow cannot convert multi-dimensional ndarray cells directly
04590: # ("Can only convert 1-dimensional array values"); nested python
04591: # lists infer to the equivalent nested list<...<double>>.
+04592: return _PYARROW.array([
__pyx_t_10 = __pyx_v_7questdb_7_client__PYARROW; __Pyx_INCREF(__pyx_t_10); { /* enter inner scope */ __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4592, __pyx_L13_error) __Pyx_GOTREF(__pyx_t_2);
+04593: None if _dataframe_is_null_pyobj(<PyObject*>cell) else cell.tolist()
__pyx_t_6 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(((PyObject *)__pyx_9genexpr17__pyx_v_cell));
if (__pyx_t_6) {
__Pyx_INCREF(Py_None);
__pyx_t_1 = Py_None;
} else {
__pyx_t_8 = __pyx_9genexpr17__pyx_v_cell;
__Pyx_INCREF(__pyx_t_8);
__pyx_t_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, 4593, __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, 4592, __pyx_L13_error)
__pyx_t_1 = 0;
+04594: for cell in series])
if (likely(PyList_CheckExact(__pyx_v_series)) || PyTuple_CheckExact(__pyx_v_series)) { __pyx_t_11 = __pyx_v_series; __Pyx_INCREF(__pyx_t_11); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_11 = PyObject_GetIter(__pyx_v_series); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4594, __pyx_L13_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_11); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4594, __pyx_L13_error) } for (;;) { if (likely(!__pyx_t_5)) { if (likely(PyList_CheckExact(__pyx_t_11))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_11); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 4594, __pyx_L13_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } __pyx_t_1 = __Pyx_PyList_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, 4594, __pyx_L13_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_11, __pyx_t_4)); #else __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_11, __pyx_t_4); #endif ++__pyx_t_4; } if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4594, __pyx_L13_error) } else { __pyx_t_1 = __pyx_t_5(__pyx_t_11); if (unlikely(!__pyx_t_1)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 4594, __pyx_L13_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_9genexpr17__pyx_v_cell, __pyx_t_1); __pyx_t_1 = 0; /* … */ } __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_XDECREF(__pyx_9genexpr17__pyx_v_cell); __pyx_9genexpr17__pyx_v_cell = 0; goto __pyx_L17_exit_scope; __pyx_L13_error:; __Pyx_XDECREF(__pyx_9genexpr17__pyx_v_cell); __pyx_9genexpr17__pyx_v_cell = 0; goto __pyx_L1_error; __pyx_L17_exit_scope:; } /* exit inner scope */ __pyx_t_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, 4592, __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;
04595:
04596:
+04597: cdef object _dataframe_columnar_col_from_pandas(object df, col_t* col):
static PyObject *__pyx_f_7questdb_7_client__dataframe_columnar_col_from_pandas(PyObject *__pyx_v_df, struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col) {
PyObject *__pyx_v_e = NULL;
PyObject *__pyx_v_col_name = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_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;
}
04598: # Re-export a pandas column as a pyarrow Array: pyarrow infers the
04599: # Arrow type (decimal width/scale, timestamp unit, ...) and carries a
04600: # validity bitmap for nulls, which the Rust Arrow importer then encodes.
+04601: try:
{
/*try:*/ {
/* … */
}
__pyx_L3_error:;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
__pyx_L5_except_error:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L1_error;
__pyx_L7_try_return:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L0;
}
+04602: return _PYARROW.Array.from_pandas(df.iloc[:, col.setup.orig_index])
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_Array); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4602, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __pyx_t_6; __Pyx_INCREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4602, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyLong_FromSize_t(__pyx_v_col->setup->orig_index); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4602, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4602, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 4602, __pyx_L3_error); __Pyx_GIVEREF(__pyx_t_8); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_8) != (0)) __PYX_ERR(0, 4602, __pyx_L3_error); __pyx_t_8 = 0; __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4602, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_10 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_8}; __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_pandas, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4602, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_4); } { 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;
+04603: except (TypeError, ValueError) as e:
__pyx_t_11 = __Pyx_PyErr_ExceptionMatches2(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), ((PyObject *)(((PyTypeObject*)PyExc_ValueError))));
if (__pyx_t_11) {
__Pyx_AddTraceback("questdb._client._dataframe_columnar_col_from_pandas", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_6, &__pyx_t_8) < 0) __PYX_ERR(0, 4603, __pyx_L5_except_error)
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_INCREF(__pyx_t_6);
__pyx_v_e = __pyx_t_6;
/*try:*/ {
/* … */
/*finally:*/ {
__pyx_L14_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_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;
+04604: col_name = df.columns[col.setup.orig_index]
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4604, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_5, __pyx_v_col->setup->orig_index, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4604, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_col_name = __pyx_t_9; __pyx_t_9 = 0;
+04605: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4605, __pyx_L14_error)
__Pyx_GOTREF(__pyx_t_7);
+04606: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4606, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4606, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+04607: f'Bad column {col_name!r}: {e}') from e
__pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4607, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_v_e, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4607, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_15[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_15[1] = __pyx_t_12; __pyx_t_15[2] = __pyx_mstate_global->__pyx_kp_u__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, 4607, __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, 4605, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_9); } __Pyx_Raise(__pyx_t_9, 0, 0, __pyx_v_e); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __PYX_ERR(0, 4605, __pyx_L14_error) }
04608:
04609:
+04610: cdef void_int _dataframe_columnar_promote_cols(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_promote_cols(PyObject *__pyx_v_df, struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan) {
size_t __pyx_v_col_index;
struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col;
struct ArrowArray *__pyx_v_chunk;
PyObject *__pyx_v_arrow_array = 0;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_promote_cols", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_arrow_array);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
04611: object df,
04612: dataframe_plan_t* plan) except -1:
04613: # Some column shapes have no contiguous native buffer the columnar wire
04614: # can emit directly. Re-export each as an Arrow array and let the Rust
04615: # Arrow importer classify it — the same route the all-Arrow capsule path
04616: # takes:
04617: # - object-dtype numpy-array cells -> list<double> (ARRAY(DOUBLE));
04618: # - object-dtype Decimal -> DECIMAL (width/scale inferred);
04619: # - datetime64[ns] timestamp fields carrying NaT, whose INT64_MIN null
04620: # sentinel the zero-copy ns->us path would corrupt into a 1677 value.
04621: cdef size_t col_index
04622: cdef col_t* col
04623: cdef ArrowArray* chunk
04624: cdef object arrow_array
+04625: for col_index in range(plan.col_count):
__pyx_t_1 = __pyx_v_plan->col_count;
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_col_index = __pyx_t_3;
+04626: col = &plan.cols.d[col_index]
__pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_col_index]));
+04627: if col.setup.source == col_source_t.col_source_arr_f64_numpyobj:
__pyx_t_4 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_arr_f64_numpyobj);
if (__pyx_t_4) {
/* … */
goto __pyx_L5;
}
+04628: _dataframe_require_pyarrow()
__pyx_t_5 = __pyx_f_7questdb_7_client__dataframe_require_pyarrow(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4628, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+04629: arrow_array = _dataframe_columnar_ndarray_col_to_arrow(df, col)
__pyx_t_5 = __pyx_f_7questdb_7_client__dataframe_columnar_ndarray_col_to_arrow(__pyx_v_df, __pyx_v_col); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4629, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_XDECREF_SET(__pyx_v_arrow_array, __pyx_t_5); __pyx_t_5 = 0;
+04630: elif col.setup.source == col_source_t.col_source_decimal_pyobj:
__pyx_t_4 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_decimal_pyobj);
if (__pyx_t_4) {
/* … */
goto __pyx_L5;
}
+04631: if not _dataframe_try_import_pyarrow():
__pyx_t_4 = __pyx_f_7questdb_7_client__dataframe_try_import_pyarrow(); if (unlikely(__pyx_t_4 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4631, __pyx_L1_error) __pyx_t_6 = (!__pyx_t_4); if (__pyx_t_6) { /* … */ }
+04632: continue
goto __pyx_L3_continue;
+04633: arrow_array = _dataframe_columnar_col_from_pandas(df, col)
__pyx_t_5 = __pyx_f_7questdb_7_client__dataframe_columnar_col_from_pandas(__pyx_v_df, __pyx_v_col); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4633, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_XDECREF_SET(__pyx_v_arrow_array, __pyx_t_5); __pyx_t_5 = 0;
+04634: elif (col.setup.target == col_target_t.col_target_column_ts
__pyx_t_4 = (__pyx_v_col->setup->target == __pyx_e_7questdb_7_client_col_target_column_ts);
if (__pyx_t_4) {
} else {
__pyx_t_6 = __pyx_t_4;
goto __pyx_L7_bool_binop_done;
}
/* … */
if (__pyx_t_6) {
/* … */
goto __pyx_L5;
}
+04635: and col.setup.source == col_source_t.col_source_dt64ns_numpy
__pyx_t_4 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_dt64ns_numpy);
if (__pyx_t_4) {
} else {
__pyx_t_6 = __pyx_t_4;
goto __pyx_L7_bool_binop_done;
}
+04636: and _dataframe_columnar_has_single_contiguous_chunk(
__pyx_t_4 = __pyx_f_7questdb_7_client__dataframe_columnar_has_single_contiguous_chunk(__pyx_v_col, __pyx_v_plan->row_count);
if (__pyx_t_4) {
} else {
__pyx_t_6 = __pyx_t_4;
goto __pyx_L7_bool_binop_done;
}
04637: col, plan.row_count)
+04638: and _dataframe_columnar_col_has_nat(col, plan.row_count)):
__pyx_t_4 = __pyx_f_7questdb_7_client__dataframe_columnar_col_has_nat(__pyx_v_col, __pyx_v_plan->row_count);
__pyx_t_6 = __pyx_t_4;
__pyx_L7_bool_binop_done:;
+04639: if not _dataframe_try_import_pyarrow():
__pyx_t_6 = __pyx_f_7questdb_7_client__dataframe_try_import_pyarrow(); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4639, __pyx_L1_error) __pyx_t_4 = (!__pyx_t_6); if (__pyx_t_4) { /* … */ }
+04640: continue
goto __pyx_L3_continue;
+04641: arrow_array = _dataframe_columnar_col_from_pandas(df, col)
__pyx_t_5 = __pyx_f_7questdb_7_client__dataframe_columnar_col_from_pandas(__pyx_v_df, __pyx_v_col); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4641, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_XDECREF_SET(__pyx_v_arrow_array, __pyx_t_5); __pyx_t_5 = 0;
04642: else:
+04643: continue
/*else*/ {
goto __pyx_L3_continue;
}
__pyx_L5:;
+04644: chunk = &col.setup.chunks.chunks[0]
__pyx_v_chunk = (&(__pyx_v_col->setup->chunks.chunks[0]));
+04645: if chunk.release != NULL:
__pyx_t_4 = (__pyx_v_chunk->release != NULL);
if (__pyx_t_4) {
/* … */
}
+04646: chunk.release(chunk)
__pyx_v_chunk->release(__pyx_v_chunk);
+04647: memset(chunk, 0, sizeof(ArrowArray))
(void)(memset(__pyx_v_chunk, 0, (sizeof(struct ArrowArray))));
+04648: if col.setup.arrow_schema.release != NULL:
__pyx_t_4 = (__pyx_v_col->setup->arrow_schema.release != NULL);
if (__pyx_t_4) {
/* … */
}
+04649: col.setup.arrow_schema.release(&col.setup.arrow_schema)
__pyx_v_col->setup->arrow_schema.release((&__pyx_v_col->setup->arrow_schema));
+04650: arrow_array._export_to_c(
__pyx_t_7 = __pyx_v_arrow_array;
__Pyx_INCREF(__pyx_t_7);
+04651: <uintptr_t>chunk, <uintptr_t>&col.setup.arrow_schema)
__pyx_t_8 = __Pyx_PyLong_FromSize_t(((uintptr_t)__pyx_v_chunk)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4651, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = __Pyx_PyLong_FromSize_t(((uintptr_t)(&__pyx_v_col->setup->arrow_schema))); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4651, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = 0; { PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_8, __pyx_t_9}; __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_export_to_c, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4650, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+04652: col.setup.source = col_source_t.col_source_arrow_passthrough
__pyx_v_col->setup->source = __pyx_e_7questdb_7_client_col_source_arrow_passthrough;
+04653: col.setup.target = col_target_t.col_target_column_arrow
__pyx_v_col->setup->target = __pyx_e_7questdb_7_client_col_target_column_arrow;
__pyx_L3_continue:;
}
04654:
04655:
+04656: cdef bint _is_pyobj_source(col_source_t source) noexcept nogil:
static int __pyx_f_7questdb_7_client__is_pyobj_source(enum __pyx_t_7questdb_7_client_col_source_t __pyx_v_source) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
04657: return (
+04658: source == col_source_t.col_source_str_pyobj or
switch (__pyx_v_source) {
case __pyx_e_7questdb_7_client_col_source_str_pyobj:
case __pyx_e_7questdb_7_client_col_source_int_pyobj:
/* … */
__pyx_t_1 = 1;
break;
default:
__pyx_t_1 = 0;
break;
}
{
__pyx_r = __pyx_t_1;
}
goto __pyx_L0;
+04659: source == col_source_t.col_source_int_pyobj or
case __pyx_e_7questdb_7_client_col_source_float_pyobj:
+04660: source == col_source_t.col_source_float_pyobj or
case __pyx_e_7questdb_7_client_col_source_bool_pyobj:
+04661: source == col_source_t.col_source_bool_pyobj or
case __pyx_e_7questdb_7_client_col_source_uuid_pyobj:
+04662: source == col_source_t.col_source_uuid_pyobj or
case __pyx_e_7questdb_7_client_col_source_ipv4_pyobj:
+04663: source == col_source_t.col_source_ipv4_pyobj or
case __pyx_e_7questdb_7_client_col_source_datetime_pyobj:
+04664: source == col_source_t.col_source_datetime_pyobj or
case __pyx_e_7questdb_7_client_col_source_bytes_pyobj:
04665: source == col_source_t.col_source_bytes_pyobj)
04666:
04667:
+04668: cdef inline void _pyobj_set_validity_bit(uint8_t* bitmap, size_t row) noexcept nogil:
static CYTHON_INLINE void __pyx_f_7questdb_7_client__pyobj_set_validity_bit(uint8_t *__pyx_v_bitmap, size_t __pyx_v_row) {
/* … */
/* function exit code */
}
+04669: bitmap[row >> 3] |= <uint8_t>(1 << (row & 7))
__pyx_t_1 = (__pyx_v_row >> 3); (__pyx_v_bitmap[__pyx_t_1]) = ((__pyx_v_bitmap[__pyx_t_1]) | ((uint8_t)(1 << (__pyx_v_row & 7))));
04670:
04671:
+04672: cdef pyobj_built_t* _dataframe_columnar_build_str_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_str_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name) {
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
PyObject **__pyx_v_access;
PyObject *__pyx_v_cell;
PyObject *__pyx_v_cell_ref = 0;
size_t __pyx_v_i;
Py_ssize_t __pyx_v_utf8_len;
char const *__pyx_v_utf8_buf;
size_t __pyx_v_validity_bytes;
size_t __pyx_v_bytes_cap;
uint8_t *__pyx_v_new_bytes;
size_t __pyx_v_bytes_used;
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_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;
}
04673: col_t* col,
04674: size_t row_count,
04675: object df_col_name) except NULL:
04676: """
04677: Walk a PyObject column once and produce Arrow-Utf8-shaped buffers
04678: (int32 offsets + uint8 bytes + LSB-packed validity). Encoding uses
04679: CPython's `PyUnicode_AsUTF8AndSize`, which rejects lone surrogates,
04680: so every emitted buffer is valid UTF-8.
04681: """
+04682: cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
__pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+04683: if b == NULL:
__pyx_t_1 = (__pyx_v_b == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04684: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4684, __pyx_L1_error)
+04685: b.row_count = row_count
__pyx_v_b->row_count = __pyx_v_row_count;
04686:
+04687: cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
__pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
04688: cdef PyObject* cell
04689: # Owns the cell for as long as `cell` points at it. Code the cell
04690: # runs while it is read, such as a `__class__` lookup inside
04691: # `isinstance` or a property, can replace it in the frame's array
04692: # and so drop the array's reference to it.
04693: cdef object cell_ref
04694: cdef size_t i
04695: cdef Py_ssize_t utf8_len
04696: cdef const char* utf8_buf
+04697: cdef size_t validity_bytes = (row_count + 7) // 8
__pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
+04698: cdef size_t bytes_cap = 16
__pyx_v_bytes_cap = 16;
04699: cdef uint8_t* new_bytes
+04700: cdef size_t bytes_used = 0
__pyx_v_bytes_used = 0;
04701:
+04702: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_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:;
}
+04703: b.str_offsets = <int32_t*>calloc(row_count + 1, sizeof(int32_t))
__pyx_v_b->str_offsets = ((int32_t *)calloc((__pyx_v_row_count + 1), (sizeof(int32_t))));
+04704: if b.str_offsets == NULL:
__pyx_t_1 = (__pyx_v_b->str_offsets == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04705: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4705, __pyx_L4_error)
+04706: if validity_bytes > 0:
__pyx_t_1 = (__pyx_v_validity_bytes > 0);
if (__pyx_t_1) {
/* … */
}
+04707: b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
__pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+04708: if b.validity == NULL:
__pyx_t_1 = (__pyx_v_b->validity == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04709: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4709, __pyx_L4_error)
+04710: b.str_bytes = <uint8_t*>malloc(bytes_cap)
__pyx_v_b->str_bytes = ((uint8_t *)malloc(__pyx_v_bytes_cap));
+04711: if b.str_bytes == NULL:
__pyx_t_1 = (__pyx_v_b->str_bytes == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04712: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4712, __pyx_L4_error)
04713:
+04714: for i in range(row_count):
__pyx_t_5 = __pyx_v_row_count;
__pyx_t_6 = __pyx_t_5;
for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
__pyx_v_i = __pyx_t_7;
+04715: cell_ref = <object>access[i]
__pyx_t_8 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
__Pyx_INCREF(__pyx_t_8);
__Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_8);
__pyx_t_8 = 0;
+04716: cell = <PyObject*>cell_ref
__pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+04717: if PyUnicode_CheckExact(cell):
__pyx_t_1 = PyUnicode_CheckExact(__pyx_v_cell);
if (__pyx_t_1) {
/* … */
goto __pyx_L16;
}
+04718: utf8_buf = PyUnicode_AsUTF8AndSize(cell, &utf8_len)
__pyx_t_9 = PyUnicode_AsUTF8AndSize(__pyx_v_cell, (&__pyx_v_utf8_len)); if (unlikely(__pyx_t_9 == ((void *)NULL))) __PYX_ERR(0, 4718, __pyx_L4_error)
__pyx_v_utf8_buf = __pyx_t_9;
+04719: if bytes_used + <size_t>utf8_len > <size_t>2_147_483_647:
__pyx_t_1 = ((__pyx_v_bytes_used + ((size_t)__pyx_v_utf8_len)) > ((size_t)0x7FFFFFFF));
if (unlikely(__pyx_t_1)) {
/* … */
}
+04720: raise QuestDBError(
__pyx_t_10 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4720, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_11);
+04721: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4721, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4721, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+04722: f'Bad column {df_col_name!r}: column total UTF-8 '
__pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4722, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_14[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_14[1] = __pyx_t_12; __pyx_t_14[2] = __pyx_mstate_global->__pyx_kp_u_column_total_UTF_8_bytes_exceed; __pyx_t_15 = 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, 4722, __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, 4720, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 4720, __pyx_L4_error)
04723: 'bytes exceeds the QWP wire varchar offset table '
04724: 'limit (2 GiB).')
+04725: while bytes_used + <size_t>utf8_len > bytes_cap:
while (1) {
__pyx_t_1 = ((__pyx_v_bytes_used + ((size_t)__pyx_v_utf8_len)) > __pyx_v_bytes_cap);
if (!__pyx_t_1) break;
+04726: bytes_cap *= 2
__pyx_v_bytes_cap = (__pyx_v_bytes_cap * 2);
+04727: new_bytes = <uint8_t*>realloc(b.str_bytes, bytes_cap)
__pyx_v_new_bytes = ((uint8_t *)realloc(__pyx_v_b->str_bytes, __pyx_v_bytes_cap));
+04728: if new_bytes == NULL:
__pyx_t_1 = (__pyx_v_new_bytes == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04729: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4729, __pyx_L4_error)
+04730: b.str_bytes = new_bytes
__pyx_v_b->str_bytes = __pyx_v_new_bytes;
}
+04731: if utf8_len > 0:
__pyx_t_1 = (__pyx_v_utf8_len > 0);
if (__pyx_t_1) {
/* … */
}
+04732: memcpy(b.str_bytes + bytes_used, utf8_buf, <size_t>utf8_len)
(void)(memcpy((__pyx_v_b->str_bytes + __pyx_v_bytes_used), __pyx_v_utf8_buf, ((size_t)__pyx_v_utf8_len)));
+04733: bytes_used += <size_t>utf8_len
__pyx_v_bytes_used = (__pyx_v_bytes_used + ((size_t)__pyx_v_utf8_len));
+04734: b.str_offsets[i + 1] = <int32_t>bytes_used
(__pyx_v_b->str_offsets[(__pyx_v_i + 1)]) = ((int32_t)__pyx_v_bytes_used);
+04735: if b.validity != NULL:
__pyx_t_1 = (__pyx_v_b->validity != NULL);
if (__pyx_t_1) {
/* … */
}
+04736: _pyobj_set_validity_bit(b.validity, i)
__pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
+04737: elif _dataframe_is_null_pyobj(cell):
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
if (likely(__pyx_t_1)) {
/* … */
goto __pyx_L16;
}
+04738: b.str_offsets[i + 1] = <int32_t>bytes_used
(__pyx_v_b->str_offsets[(__pyx_v_i + 1)]) = ((int32_t)__pyx_v_bytes_used);
+04739: b.has_nulls = True
__pyx_v_b->has_nulls = 1;
04740: else:
+04741: raise QuestDBError(
/*else*/ {
__pyx_t_11 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4741, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_17);
+04742: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4742, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4742, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+04743: f'Bad column {df_col_name!r} at row {i}: expected str, '
__pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4743, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_12 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4743, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); /* … */ __pyx_t_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, 4743, __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, 4741, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 4741, __pyx_L4_error) } __pyx_L16:; }
+04744: f'got {_fqn(type(<object>cell))}.')
__pyx_t_19 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4744, __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, 4744, __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;
04745:
+04746: b.str_bytes_len = bytes_used
__pyx_v_b->str_bytes_len = __pyx_v_bytes_used;
04747:
04748: # If the column turned out to be all-valid, drop the bitmap so
04749: # the FFI takes the no-validity hot path.
+04750: if not b.has_nulls and b.validity != NULL:
__pyx_t_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) {
/* … */
}
+04751: free(b.validity)
free(__pyx_v_b->validity);
+04752: b.validity = NULL
__pyx_v_b->validity = NULL;
+04753: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_str_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_17, &__pyx_t_19) < 0) __PYX_ERR(0, 4753, __pyx_L6_except_error)
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_19);
+04754: pyobj_built_free(b)
__pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+04755: raise
__Pyx_GIVEREF(__pyx_t_8); __Pyx_GIVEREF(__pyx_t_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, 4755, __pyx_L6_except_error) }
04756:
+04757: return b
{
__pyx_r = __pyx_v_b;
}
goto __pyx_L0;
04758:
04759:
+04760: cdef pyobj_built_t* _dataframe_columnar_build_int_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_int_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name) {
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
PyObject **__pyx_v_access;
PyObject *__pyx_v_cell;
PyObject *__pyx_v_cell_ref = 0;
uint8_t *__pyx_v_values;
size_t __pyx_v_validity_bytes;
size_t __pyx_v_i;
int64_t __pyx_v_value;
int __pyx_v_overflow;
size_t __pyx_v_elem_size;
int64_t __pyx_v_narrow_max;
PyObject *__pyx_v_narrow_type = 0;
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_XDECREF(__pyx_t_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;
}
04761: col_t* col,
04762: size_t row_count,
04763: object df_col_name) except NULL:
04764: """
04765: Walk a PyObject int column once and produce a contiguous buffer +
04766: LSB-packed validity bitmap. Null cells leave the slot at 0 with the
04767: validity bit cleared.
04768:
04769: The slot is an int64 unless an IPV4 or CHAR round-trip claim
04770: narrows it to the 32- or 16-bit unsigned width that wire type
04771: needs; a GEOHASH claim keeps the int64 slot and carries its
04772: precision separately. Each is stored through its own pointer type,
04773: so the buffer holds native-order values whichever width it is.
04774:
04775: Null detection: ``None``, ``pd.NA``, and ``float('nan')`` all count
04776: as null — the NaN-as-null rule matches the row-path behaviour
04777: (`_dataframe_is_null_pyobj` in dataframe.pxi). A non-NaN float in
04778: an int-sniffed column raises ``QuestDBError`` with the row index;
04779: we accept the asymmetry because column-wide sniff has already
04780: locked the source type from the first non-null cell.
04781: """
+04782: cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
__pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+04783: if b == NULL:
__pyx_t_1 = (__pyx_v_b == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04784: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4784, __pyx_L1_error)
+04785: b.row_count = row_count
__pyx_v_b->row_count = __pyx_v_row_count;
04786:
+04787: cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
__pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
04788: cdef PyObject* cell
04789: # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
04790: cdef object cell_ref
+04791: cdef uint8_t* values = NULL
__pyx_v_values = NULL;
+04792: cdef size_t validity_bytes = (row_count + 7) // 8
__pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
04793: cdef size_t i
04794: cdef int64_t value
+04795: cdef int overflow = 0
__pyx_v_overflow = 0;
+04796: cdef size_t elem_size = 8
__pyx_v_elem_size = 8;
+04797: cdef int64_t narrow_max = 0
__pyx_v_narrow_max = 0;
+04798: cdef str narrow_type = None
__Pyx_INCREF(Py_None);
__pyx_v_narrow_type = ((PyObject*)Py_None);
04799:
+04800: if col.setup.has_override:
if (__pyx_v_col->setup->has_override) {
/* … */
}
+04801: if col.setup.override_dtype == qwp_numpy_dtype.qwp_numpy_u32_ipv4:
switch (__pyx_v_col->setup->override_dtype) {
case qwp_numpy_u32_ipv4:
/* … */
break;
case qwp_numpy_u16_char:
+04802: elem_size = 4
__pyx_v_elem_size = 4;
+04803: narrow_max = 0xFFFFFFFF
__pyx_v_narrow_max = 0xFFFFFFFF;
+04804: narrow_type = 'IPV4'
__Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_IPV4); __Pyx_DECREF_SET(__pyx_v_narrow_type, __pyx_mstate_global->__pyx_n_u_IPV4);
+04805: elif col.setup.override_dtype == qwp_numpy_dtype.qwp_numpy_u16_char:
break;
default: break;
}
+04806: elem_size = 2
__pyx_v_elem_size = 2;
+04807: narrow_max = 0xFFFF
__pyx_v_narrow_max = 0xFFFF;
+04808: narrow_type = 'CHAR'
__Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_CHAR); __Pyx_DECREF_SET(__pyx_v_narrow_type, __pyx_mstate_global->__pyx_n_u_CHAR);
04809: # GEOHASH has no per-value range check here, by design. That is
04810: # the documented bulk GEOHASH contract (`QuestDB.dataframe`,
04811: # docs/sender.rst): every DataFrame input shape -- NumPy, Arrow
04812: # and this object route -- takes a value as a raw bit pattern,
04813: # checks only the precision and the carrier width, and leaves
04814: # the values to the caller. The native encoder follows the same
04815: # rule and writes the low ceil(precision / 8) bytes, so a value
04816: # with bits above the precision lands as a different GEOHASH or
04817: # as NULL.
04818: #
04819: # The check would cost nothing in this per-cell loop. It is left
04820: # out so that one frame gets one answer: a masked pandas column
04821: # arrives here as Python ints, and plain `to_pandas()` returns a
04822: # GEOHASH column as a masked column when it holds a null and as
04823: # a NumPy column when it does not. A check on this route alone
04824: # would refuse an edited frame whose column holds a null and
04825: # write the same frame without one. IPV4 and CHAR get a range
04826: # check because their NumPy and Arrow carriers, uint32 and
04827: # uint16, cannot hold an out-of-range value either, so it gives
04828: # this route the same range as theirs.
04829: #
04830: # `test_roundtrip_claim_forwards_arbitrary_geohash_values` pins
04831: # this on every shape. Changing it changes the public contract,
04832: # docs and CHANGELOG included; it is not a local fix.
04833:
+04834: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L10_try_end;
__pyx_L5_error:;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_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:;
}
+04835: values = <uint8_t*>calloc(
__pyx_v_values = ((uint8_t *)calloc(__pyx_t_5, (sizeof(uint8_t))));
+04836: row_count * elem_size if row_count > 0 else elem_size,
__pyx_t_1 = (__pyx_v_row_count > 0);
if (__pyx_t_1) {
__pyx_t_5 = (__pyx_v_row_count * __pyx_v_elem_size);
} else {
__pyx_t_5 = __pyx_v_elem_size;
}
04837: sizeof(uint8_t))
+04838: if values == NULL:
__pyx_t_1 = (__pyx_v_values == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04839: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4839, __pyx_L5_error)
+04840: b.data = <void*>values
__pyx_v_b->data = ((void *)__pyx_v_values);
+04841: if validity_bytes > 0:
__pyx_t_1 = (__pyx_v_validity_bytes > 0);
if (__pyx_t_1) {
/* … */
}
+04842: b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
__pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+04843: if b.validity == NULL:
__pyx_t_1 = (__pyx_v_b->validity == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04844: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4844, __pyx_L5_error)
+04845: for i in range(row_count):
__pyx_t_5 = __pyx_v_row_count;
__pyx_t_6 = __pyx_t_5;
for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
__pyx_v_i = __pyx_t_7;
+04846: cell_ref = <object>access[i]
__pyx_t_8 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
__Pyx_INCREF(__pyx_t_8);
__Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_8);
__pyx_t_8 = 0;
+04847: cell = <PyObject*>cell_ref
__pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
04848: # PyBool_Check goes BEFORE PyLong_CheckExact because Python
04849: # bools are subclasses of int and PyLong_CheckExact returns
04850: # false for them; treat them as int (matches row-path).
+04851: if PyBool_Check(cell):
__pyx_t_1 = PyBool_Check(__pyx_v_cell);
if (__pyx_t_1) {
/* … */
goto __pyx_L16;
}
+04852: value = 1 if cell == Py_True else 0
__pyx_t_1 = (__pyx_v_cell == Py_True);
if (__pyx_t_1) {
__pyx_t_9 = 1;
} else {
__pyx_t_9 = 0;
}
__pyx_v_value = __pyx_t_9;
+04853: elif PyLong_CheckExact(cell):
__pyx_t_1 = PyLong_CheckExact(__pyx_v_cell);
if (__pyx_t_1) {
/* … */
goto __pyx_L16;
}
+04854: value = <int64_t>PyLong_AsLongLongAndOverflow(
__pyx_t_10 = PyLong_AsLongLongAndOverflow(((PyObject *)__pyx_v_cell), (&__pyx_v_overflow)); if (unlikely(__pyx_t_10 == ((PY_LONG_LONG)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 4854, __pyx_L5_error) __pyx_v_value = ((int64_t)__pyx_t_10);
04855: <object>cell, &overflow)
+04856: if overflow != 0:
__pyx_t_1 = (__pyx_v_overflow != 0);
if (__pyx_t_1) {
/* … */
}
+04857: if narrow_type is not None:
__pyx_t_1 = (__pyx_v_narrow_type != ((PyObject*)Py_None));
if (unlikely(__pyx_t_1)) {
/* … */
}
+04858: raise QuestDBError(
__pyx_t_11 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4858, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_12);
+04859: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4859, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4859, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+04860: f'Bad column {df_col_name!r} at row {i}: '
__pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4860, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_15 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4860, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_15); /* … */ __pyx_t_19 = 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, 4860, __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, 4858, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 4858, __pyx_L5_error)
+04861: f'{narrow_type} values must be in the range '
__pyx_t_16 = __Pyx_PyUnicode_Unicode(__pyx_v_narrow_type); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4861, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_16);
+04862: f'0 .. {narrow_max}.')
__pyx_t_17 = __Pyx_PyUnicode_From_int64_t(__pyx_v_narrow_max, 0, ' ', 'd'); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4862, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_18[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_18[1] = __pyx_t_13; __pyx_t_18[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_18[3] = __pyx_t_15; __pyx_t_18[4] = __pyx_mstate_global->__pyx_kp_u__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;
+04863: if overflow < 0:
__pyx_t_1 = (__pyx_v_overflow < 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04864: raise QuestDBError(
__pyx_t_12 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 4864, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_21);
+04865: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4865, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4865, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+04866: f'Bad column {df_col_name!r} at row {i}: '
__pyx_t_14 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4866, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_17 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4866, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_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, 4866, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_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, 4864, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 4864, __pyx_L5_error)
04867: f'integer is below the minimum for a LONG '
04868: f'column (-2**63). LONG256 is unsigned and '
04869: f'cannot store negative values.')
+04870: raise QuestDBError(
__pyx_t_21 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4870, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_16);
+04871: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4871, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4871, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+04872: f'Bad column {df_col_name!r} at row {i}: integer '
__pyx_t_11 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4872, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_17 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4872, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_17); /* … */ __pyx_t_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, 4872, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __pyx_t_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, 4870, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 4870, __pyx_L5_error)
04873: f'out of range for a LONG column '
04874: f'(-2**63 .. 2**63-1). A 256-bit value needs a '
04875: f'LONG256 column, which this column claims with '
04876: f"df.attrs['questdb'] = {{'version': 1, "
+04877: f"'columns': {{{df_col_name!r}: "
__pyx_t_14 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4877, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_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;
04878: f"{{'kind': 'long256'}}}}}}.")
+04879: elif _dataframe_is_null_pyobj(cell):
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
if (likely(__pyx_t_1)) {
/* … */
}
+04880: b.has_nulls = True
__pyx_v_b->has_nulls = 1;
+04881: continue
goto __pyx_L14_continue;
04882: else:
+04883: raise QuestDBError(
/*else*/ {
__pyx_t_16 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4883, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_15);
+04884: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4884, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_21 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 4884, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_21); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+04885: f'Bad column {df_col_name!r} at row {i}: expected int, '
__pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4885, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_14 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4885, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_14); /* … */ __pyx_t_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, 4885, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_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, 4883, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 4883, __pyx_L5_error) } __pyx_L16:;
+04886: f'got {_fqn(type(<object>cell))}.')
__pyx_t_17 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4886, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_11 = __Pyx_PyUnicode_Unicode(__pyx_t_17); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4886, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_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;
04887:
+04888: 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)) {
/* … */
}
+04889: raise QuestDBError(
__pyx_t_15 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4889, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_17);
+04890: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 4890, __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, 4890, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
+04891: 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, 4891, __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, 4891, __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, 4891, __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, 4889, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 4889, __pyx_L5_error)
+04892: f'{narrow_type} values must be in the range '
__pyx_t_14 = __Pyx_PyUnicode_Unicode(__pyx_v_narrow_type); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4892, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_14);
+04893: f'0 .. {narrow_max}.')
__pyx_t_12 = __Pyx_PyUnicode_From_int64_t(__pyx_v_narrow_max, 0, ' ', 'd'); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4893, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_18[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_18[1] = __pyx_t_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;
+04894: if elem_size == 4:
switch (__pyx_v_elem_size) {
case 4:
/* … */
break;
case 2:
+04895: (<uint32_t*>values)[i] = <uint32_t>value
(((uint32_t *)__pyx_v_values)[__pyx_v_i]) = ((uint32_t)__pyx_v_value);
+04896: elif elem_size == 2:
break;
default:
+04897: (<uint16_t*>values)[i] = <uint16_t>value
(((uint16_t *)__pyx_v_values)[__pyx_v_i]) = ((uint16_t)__pyx_v_value);
04898: else:
+04899: (<int64_t*>values)[i] = value
(((int64_t *)__pyx_v_values)[__pyx_v_i]) = __pyx_v_value;
break;
}
+04900: if b.validity != NULL:
__pyx_t_1 = (__pyx_v_b->validity != NULL);
if (__pyx_t_1) {
/* … */
}
__pyx_L14_continue:;
}
+04901: _pyobj_set_validity_bit(b.validity, i)
__pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
04902:
+04903: if not b.has_nulls and b.validity != NULL:
__pyx_t_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) {
/* … */
}
+04904: free(b.validity)
free(__pyx_v_b->validity);
+04905: b.validity = NULL
__pyx_v_b->validity = NULL;
+04906: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_int_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_17, &__pyx_t_13) < 0) __PYX_ERR(0, 4906, __pyx_L7_except_error)
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_13);
+04907: pyobj_built_free(b)
__pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+04908: raise
__Pyx_GIVEREF(__pyx_t_8); __Pyx_GIVEREF(__pyx_t_17); __Pyx_XGIVEREF(__pyx_t_13); __Pyx_ErrRestoreWithState(__pyx_t_8, __pyx_t_17, __pyx_t_13); __pyx_t_8 = 0; __pyx_t_17 = 0; __pyx_t_13 = 0; __PYX_ERR(0, 4908, __pyx_L7_except_error) }
04909:
+04910: return b
{
__pyx_r = __pyx_v_b;
}
goto __pyx_L0;
04911:
04912:
+04913: cdef object _LONG256_LIMIT = 1 << 256
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_large_0x1000000000000000_xxx_000000000000000000); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__LONG256_LIMIT); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__LONG256_LIMIT, __pyx_mstate_global->__pyx_int_large_0x1000000000000000_xxx_000000000000000000); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_large_0x1000000000000000_xxx_000000000000000000);
04914:
04915:
+04916: cdef pyobj_built_t* _dataframe_columnar_build_long256_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_long256_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name) {
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
PyObject **__pyx_v_access;
PyObject *__pyx_v_cell;
PyObject *__pyx_v_cell_ref = 0;
uint8_t *__pyx_v_buf;
size_t __pyx_v_buf_bytes;
size_t __pyx_v_validity_bytes;
size_t __pyx_v_i;
PyObject *__pyx_v_py_cell = 0;
PyObject *__pyx_v_le_bytes = 0;
PyObject *__pyx_v_int_to_bytes = 0;
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_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;
}
04917: col_t* col,
04918: size_t row_count,
04919: object df_col_name) except NULL:
04920: """
04921: Walk a PyObject int column claimed as LONG256 and produce 32 bytes
04922: per row + LSB-packed validity bitmap.
04923:
04924: ``qwp_numpy_s32`` puts the row on the wire verbatim, and the wire
04925: order for LONG256 is little-endian — the same order
04926: ``QueryResult.to_pandas()`` read the integer out of, so a value that
04927: came from a query goes back unchanged.
04928: """
+04929: cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
__pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+04930: if b == NULL:
__pyx_t_1 = (__pyx_v_b == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04931: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4931, __pyx_L1_error)
+04932: b.row_count = row_count
__pyx_v_b->row_count = __pyx_v_row_count;
04933:
+04934: cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
__pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
04935: cdef PyObject* cell
04936: # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
04937: cdef object cell_ref
+04938: cdef uint8_t* buf = NULL
__pyx_v_buf = NULL;
+04939: cdef size_t buf_bytes = row_count * 32 if row_count > 0 else 32
__pyx_t_1 = (__pyx_v_row_count > 0);
if (__pyx_t_1) {
__pyx_t_2 = (__pyx_v_row_count * 32);
} else {
__pyx_t_2 = 32;
}
__pyx_v_buf_bytes = __pyx_t_2;
+04940: cdef size_t validity_bytes = (row_count + 7) // 8
__pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
04941: cdef size_t i
04942: cdef object py_cell
04943: cdef bytes le_bytes
04944: # Called unbound so that an `int` subclass overriding `to_bytes`
04945: # cannot hand back something other than the 32 bytes the column
04946: # write copies.
+04947: cdef object int_to_bytes = int.to_bytes
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)(&PyLong_Type)), __pyx_mstate_global->__pyx_n_u_to_bytes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4947, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_int_to_bytes = __pyx_t_3; __pyx_t_3 = 0;
04948:
+04949: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_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:;
}
+04950: buf = <uint8_t*>calloc(buf_bytes, sizeof(uint8_t))
__pyx_v_buf = ((uint8_t *)calloc(__pyx_v_buf_bytes, (sizeof(uint8_t))));
+04951: if buf == NULL:
__pyx_t_1 = (__pyx_v_buf == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04952: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4952, __pyx_L4_error)
+04953: b.data = <void*>buf
__pyx_v_b->data = ((void *)__pyx_v_buf);
+04954: if validity_bytes > 0:
__pyx_t_1 = (__pyx_v_validity_bytes > 0);
if (__pyx_t_1) {
/* … */
}
+04955: b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
__pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+04956: if b.validity == NULL:
__pyx_t_1 = (__pyx_v_b->validity == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04957: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4957, __pyx_L4_error)
+04958: for i in range(row_count):
__pyx_t_2 = __pyx_v_row_count;
__pyx_t_7 = __pyx_t_2;
for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
__pyx_v_i = __pyx_t_8;
+04959: cell_ref = <object>access[i]
__pyx_t_3 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
__Pyx_INCREF(__pyx_t_3);
__Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_3);
__pyx_t_3 = 0;
+04960: cell = <PyObject*>cell_ref
__pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+04961: if PyLong_CheckExact(cell):
__pyx_t_1 = PyLong_CheckExact(__pyx_v_cell);
if (__pyx_t_1) {
/* … */
goto __pyx_L15;
}
+04962: py_cell = <object>cell
__pyx_t_3 = ((PyObject *)__pyx_v_cell);
__Pyx_INCREF(__pyx_t_3);
__Pyx_XDECREF_SET(__pyx_v_py_cell, __pyx_t_3);
__pyx_t_3 = 0;
+04963: if py_cell < 0 or py_cell >= _LONG256_LIMIT:
__pyx_t_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, 4963, __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, 4963, __pyx_L4_error) __pyx_t_1 = __pyx_t_9; __pyx_L17_bool_binop_done:; if (unlikely(__pyx_t_1)) { /* … */ }
+04964: raise QuestDBError(
__pyx_t_10 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4964, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_11);
+04965: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4965, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4965, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+04966: f'Bad column {df_col_name!r} at row {i}: LONG256 '
__pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4966, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_14 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4966, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_15[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_15[1] = __pyx_t_12; __pyx_t_15[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_15[3] = __pyx_t_14; __pyx_t_15[4] = __pyx_mstate_global->__pyx_kp_u_LONG256_is_unsigned_and_256_bit; __pyx_t_16 = 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, 4966, __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, 4964, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 4964, __pyx_L4_error)
04967: f'is unsigned and 256 bits wide, so the value '
04968: f'must be in the range 0 <= value < 2**256.')
+04969: le_bytes = int_to_bytes(py_cell, 32, 'little')
__pyx_t_11 = NULL;
__Pyx_INCREF(__pyx_v_int_to_bytes);
__pyx_t_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, 4969, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_3);
}
if (!(likely(PyBytes_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_3))) __PYX_ERR(0, 4969, __pyx_L4_error)
__Pyx_XDECREF_SET(__pyx_v_le_bytes, ((PyObject*)__pyx_t_3));
__pyx_t_3 = 0;
+04970: memcpy(buf + i * 32, PyBytes_AsString(le_bytes), 32)
__pyx_t_20 = PyBytes_AsString(__pyx_v_le_bytes); if (unlikely(__pyx_t_20 == ((void *)NULL))) __PYX_ERR(0, 4970, __pyx_L4_error) (void)(memcpy((__pyx_v_buf + (__pyx_v_i * 32)), __pyx_t_20, 32));
+04971: if b.validity != NULL:
__pyx_t_1 = (__pyx_v_b->validity != NULL);
if (__pyx_t_1) {
/* … */
}
+04972: _pyobj_set_validity_bit(b.validity, i)
__pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
+04973: elif _dataframe_is_null_pyobj(cell):
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
if (likely(__pyx_t_1)) {
/* … */
goto __pyx_L15;
}
+04974: b.has_nulls = True
__pyx_v_b->has_nulls = 1;
04975: else:
+04976: raise QuestDBError(
/*else*/ {
__pyx_t_18 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4976, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_11);
+04977: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4977, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4977, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+04978: f'Bad column {df_col_name!r} at row {i}: expected int, '
__pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4978, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4978, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_14); /* … */ __pyx_t_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, 4978, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_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, 4976, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 4976, __pyx_L4_error) } __pyx_L15:; }
+04979: f'got {_fqn(type(<object>cell))}.')
__pyx_t_12 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4979, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_21 = __Pyx_PyUnicode_Unicode(__pyx_t_12); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 4979, __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;
04980:
+04981: if not b.has_nulls and b.validity != NULL:
__pyx_t_9 = (!__pyx_v_b->has_nulls);
if (__pyx_t_9) {
} else {
__pyx_t_1 = __pyx_t_9;
goto __pyx_L21_bool_binop_done;
}
__pyx_t_9 = (__pyx_v_b->validity != NULL);
__pyx_t_1 = __pyx_t_9;
__pyx_L21_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+04982: free(b.validity)
free(__pyx_v_b->validity);
+04983: b.validity = NULL
__pyx_v_b->validity = NULL;
+04984: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_long256_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_11, &__pyx_t_12) < 0) __PYX_ERR(0, 4984, __pyx_L6_except_error)
__Pyx_XGOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
+04985: pyobj_built_free(b)
__pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+04986: raise
__Pyx_GIVEREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_11); __Pyx_XGIVEREF(__pyx_t_12); __Pyx_ErrRestoreWithState(__pyx_t_3, __pyx_t_11, __pyx_t_12); __pyx_t_3 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __PYX_ERR(0, 4986, __pyx_L6_except_error) }
04987:
+04988: return b
{
__pyx_r = __pyx_v_b;
}
goto __pyx_L0;
04989:
04990:
+04991: cdef pyobj_built_t* _dataframe_columnar_build_float_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_float_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name) {
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
PyObject **__pyx_v_access;
PyObject *__pyx_v_cell;
PyObject *__pyx_v_cell_ref = 0;
double *__pyx_v_values;
size_t __pyx_v_validity_bytes;
size_t __pyx_v_i;
double __pyx_v_value;
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_float_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_cell_ref);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
04992: col_t* col,
04993: size_t row_count,
04994: object df_col_name) except NULL:
04995: """
04996: Walk a PyObject float column once and produce a contiguous double
04997: buffer + LSB-packed validity bitmap.
04998: """
+04999: cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
__pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+05000: if b == NULL:
__pyx_t_1 = (__pyx_v_b == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05001: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 5001, __pyx_L1_error)
+05002: b.row_count = row_count
__pyx_v_b->row_count = __pyx_v_row_count;
05003:
+05004: cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
__pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
05005: cdef PyObject* cell
05006: # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
05007: cdef object cell_ref
+05008: cdef double* values = NULL
__pyx_v_values = NULL;
+05009: cdef size_t validity_bytes = (row_count + 7) // 8
__pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
05010: cdef size_t i
05011: cdef double value
05012:
+05013: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L1_error;
__pyx_L9_try_end:;
}
+05014: values = <double*>calloc(row_count if row_count > 0 else 1,
__pyx_t_1 = (__pyx_v_row_count > 0);
if (__pyx_t_1) {
__pyx_t_5 = __pyx_v_row_count;
} else {
__pyx_t_5 = 1;
}
/* … */
__pyx_v_values = ((double *)calloc(__pyx_t_5, (sizeof(double))));
05015: sizeof(double))
+05016: if values == NULL:
__pyx_t_1 = (__pyx_v_values == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05017: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 5017, __pyx_L4_error)
+05018: b.data = <void*>values
__pyx_v_b->data = ((void *)__pyx_v_values);
+05019: if validity_bytes > 0:
__pyx_t_1 = (__pyx_v_validity_bytes > 0);
if (__pyx_t_1) {
/* … */
}
+05020: b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
__pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+05021: if b.validity == NULL:
__pyx_t_1 = (__pyx_v_b->validity == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05022: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 5022, __pyx_L4_error)
+05023: for i in range(row_count):
__pyx_t_5 = __pyx_v_row_count;
__pyx_t_6 = __pyx_t_5;
for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
__pyx_v_i = __pyx_t_7;
+05024: cell_ref = <object>access[i]
__pyx_t_8 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
__Pyx_INCREF(__pyx_t_8);
__Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_8);
__pyx_t_8 = 0;
+05025: cell = <PyObject*>cell_ref
__pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+05026: if PyFloat_CheckExact(cell):
__pyx_t_1 = PyFloat_CheckExact(__pyx_v_cell);
if (__pyx_t_1) {
/* … */
goto __pyx_L15;
}
+05027: value = PyFloat_AS_DOUBLE(cell)
__pyx_v_value = PyFloat_AS_DOUBLE(__pyx_v_cell);
+05028: if isnan(value):
__pyx_t_1 = isnan(__pyx_v_value);
if (__pyx_t_1) {
/* … */
goto __pyx_L16;
}
05029: # pandas NaN-as-null convention matches the row-path.
+05030: b.has_nulls = True
__pyx_v_b->has_nulls = 1;
05031: else:
+05032: values[i] = value
/*else*/ {
(__pyx_v_values[__pyx_v_i]) = __pyx_v_value;
+05033: if b.validity != NULL:
__pyx_t_1 = (__pyx_v_b->validity != NULL);
if (__pyx_t_1) {
/* … */
}
}
__pyx_L16:;
+05034: _pyobj_set_validity_bit(b.validity, i)
__pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
+05035: elif PyLong_CheckExact(cell) or PyBool_Check(cell):
__pyx_t_9 = PyLong_CheckExact(__pyx_v_cell); if (!__pyx_t_9) { } else { __pyx_t_1 = __pyx_t_9; goto __pyx_L18_bool_binop_done; } __pyx_t_9 = PyBool_Check(__pyx_v_cell); __pyx_t_1 = __pyx_t_9; __pyx_L18_bool_binop_done:; if (__pyx_t_1) { /* … */ goto __pyx_L15; }
05036: # Accept widening of int / bool to float, matching how
05037: # Python implicitly converts when you do float(x).
+05038: values[i] = PyFloat_AsDouble(cell)
__pyx_t_10 = PyFloat_AsDouble(__pyx_v_cell); if (unlikely(__PYX_CHECK_FLOAT_EXCEPTION(__pyx_t_10, ((double)(-1.0))) && PyErr_Occurred())) __PYX_ERR(0, 5038, __pyx_L4_error) (__pyx_v_values[__pyx_v_i]) = __pyx_t_10;
+05039: if b.validity != NULL:
__pyx_t_1 = (__pyx_v_b->validity != NULL);
if (__pyx_t_1) {
/* … */
}
+05040: _pyobj_set_validity_bit(b.validity, i)
__pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
+05041: elif _dataframe_is_null_pyobj(cell):
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
if (likely(__pyx_t_1)) {
/* … */
goto __pyx_L15;
}
+05042: b.has_nulls = True
__pyx_v_b->has_nulls = 1;
05043: else:
+05044: raise QuestDBError(
/*else*/ {
__pyx_t_11 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5044, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_12);
+05045: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 5045, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5045, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+05046: f'Bad column {df_col_name!r} at row {i}: expected float, '
__pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 5046, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_15 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5046, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_15); /* … */ __pyx_t_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, 5046, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_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, 5044, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 5044, __pyx_L4_error) } __pyx_L15:; }
+05047: f'got {_fqn(type(<object>cell))}.')
__pyx_t_16 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5047, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_17 = __Pyx_PyUnicode_Unicode(__pyx_t_16); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5047, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_18[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_18[1] = __pyx_t_13; __pyx_t_18[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_18[3] = __pyx_t_15; __pyx_t_18[4] = __pyx_mstate_global->__pyx_kp_u_expected_float_got; __pyx_t_18[5] = __pyx_t_17; __pyx_t_18[6] = __pyx_mstate_global->__pyx_kp_u__3;
05048:
+05049: if not b.has_nulls and b.validity != NULL:
__pyx_t_9 = (!__pyx_v_b->has_nulls);
if (__pyx_t_9) {
} else {
__pyx_t_1 = __pyx_t_9;
goto __pyx_L22_bool_binop_done;
}
__pyx_t_9 = (__pyx_v_b->validity != NULL);
__pyx_t_1 = __pyx_t_9;
__pyx_L22_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+05050: free(b.validity)
free(__pyx_v_b->validity);
+05051: b.validity = NULL
__pyx_v_b->validity = NULL;
+05052: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_float_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_12, &__pyx_t_16) < 0) __PYX_ERR(0, 5052, __pyx_L6_except_error)
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_16);
+05053: pyobj_built_free(b)
__pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+05054: raise
__Pyx_GIVEREF(__pyx_t_8); __Pyx_GIVEREF(__pyx_t_12); __Pyx_XGIVEREF(__pyx_t_16); __Pyx_ErrRestoreWithState(__pyx_t_8, __pyx_t_12, __pyx_t_16); __pyx_t_8 = 0; __pyx_t_12 = 0; __pyx_t_16 = 0; __PYX_ERR(0, 5054, __pyx_L6_except_error) }
05055:
+05056: return b
{
__pyx_r = __pyx_v_b;
}
goto __pyx_L0;
05057:
05058:
+05059: cdef pyobj_built_t* _dataframe_columnar_build_bool_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_bool_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name) {
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
PyObject **__pyx_v_access;
PyObject *__pyx_v_cell;
PyObject *__pyx_v_cell_ref = 0;
uint8_t *__pyx_v_bits;
size_t __pyx_v_bytes;
size_t __pyx_v_i;
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_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;
}
05060: col_t* col,
05061: size_t row_count,
05062: object df_col_name) except NULL:
05063: """
05064: Walk a PyObject bool column once and pack the values into an
05065: Arrow LSB-first bitmap (one bit per row). Null cells are rejected —
05066: matches the row-path behaviour (QuestDB BOOLEAN has no null
05067: representation at the row level).
05068: """
+05069: cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
__pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+05070: if b == NULL:
__pyx_t_1 = (__pyx_v_b == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05071: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 5071, __pyx_L1_error)
+05072: b.row_count = row_count
__pyx_v_b->row_count = __pyx_v_row_count;
05073:
+05074: cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
__pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
05075: cdef PyObject* cell
05076: # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
05077: cdef object cell_ref
+05078: cdef uint8_t* bits = NULL
__pyx_v_bits = NULL;
+05079: cdef size_t bytes = (row_count + 7) // 8
__pyx_v_bytes = ((__pyx_v_row_count + 7) / 8);
05080: cdef size_t i
05081:
+05082: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_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:;
}
+05083: if bytes == 0:
__pyx_t_1 = (__pyx_v_bytes == 0);
if (__pyx_t_1) {
/* … */
}
+05084: bytes = 1
__pyx_v_bytes = 1;
+05085: bits = <uint8_t*>calloc(bytes, sizeof(uint8_t))
__pyx_v_bits = ((uint8_t *)calloc(__pyx_v_bytes, (sizeof(uint8_t))));
+05086: if bits == NULL:
__pyx_t_1 = (__pyx_v_bits == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05087: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 5087, __pyx_L4_error)
+05088: b.data = <void*>bits
__pyx_v_b->data = ((void *)__pyx_v_bits);
+05089: for i in range(row_count):
__pyx_t_5 = __pyx_v_row_count;
__pyx_t_6 = __pyx_t_5;
for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
__pyx_v_i = __pyx_t_7;
+05090: cell_ref = <object>access[i]
__pyx_t_8 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
__Pyx_INCREF(__pyx_t_8);
__Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_8);
__pyx_t_8 = 0;
+05091: cell = <PyObject*>cell_ref
__pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+05092: if PyBool_Check(cell):
__pyx_t_1 = PyBool_Check(__pyx_v_cell);
if (likely(__pyx_t_1)) {
/* … */
goto __pyx_L14;
}
+05093: if cell == Py_True:
__pyx_t_1 = (__pyx_v_cell == Py_True);
if (__pyx_t_1) {
/* … */
}
+05094: bits[i >> 3] |= <uint8_t>(1 << (i & 7))
__pyx_t_9 = (__pyx_v_i >> 3);
(__pyx_v_bits[__pyx_t_9]) = ((__pyx_v_bits[__pyx_t_9]) | ((uint8_t)(1 << (__pyx_v_i & 7))));
+05095: elif _dataframe_is_null_pyobj(cell):
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05096: raise QuestDBError(
__pyx_t_10 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5096, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_11);
+05097: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5097, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 5097, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+05098: f'Bad column {df_col_name!r} at row {i}: cannot insert '
__pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5098, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_14 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5098, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_15[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_15[1] = __pyx_t_12; __pyx_t_15[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_15[3] = __pyx_t_14; __pyx_t_15[4] = __pyx_mstate_global->__pyx_kp_u_cannot_insert_null_into_a_boole; __pyx_t_16 = 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, 5098, __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, 5096, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 5096, __pyx_L4_error)
05099: 'null into a boolean column.')
05100: else:
+05101: raise QuestDBError(
/*else*/ {
__pyx_t_11 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5101, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_18);
+05102: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 5102, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5102, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+05103: f'Bad column {df_col_name!r} at row {i}: expected bool, '
__pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 5103, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5103, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_14); /* … */ __pyx_t_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, 5103, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_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, 5101, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 5101, __pyx_L4_error) } __pyx_L14:; }
+05104: f'got {_fqn(type(<object>cell))}.')
__pyx_t_12 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5104, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_19 = __Pyx_PyUnicode_Unicode(__pyx_t_12); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5104, __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;
+05105: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_bool_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_18, &__pyx_t_12) < 0) __PYX_ERR(0, 5105, __pyx_L6_except_error)
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_12);
+05106: pyobj_built_free(b)
__pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+05107: raise
__Pyx_GIVEREF(__pyx_t_8); __Pyx_GIVEREF(__pyx_t_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, 5107, __pyx_L6_except_error) }
05108:
+05109: return b
{
__pyx_r = __pyx_v_b;
}
goto __pyx_L0;
05110:
05111:
+05112: cdef pyobj_built_t* _dataframe_columnar_build_uuid_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_uuid_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name) {
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
PyObject **__pyx_v_access;
PyObject *__pyx_v_cell;
PyObject *__pyx_v_cell_ref = 0;
uint8_t *__pyx_v_buf;
size_t __pyx_v_buf_bytes;
size_t __pyx_v_validity_bytes;
size_t __pyx_v_i;
PyObject *__pyx_v_be_bytes = 0;
PyObject *__pyx_v_uuid_cls = 0;
PyObject *__pyx_v_int_to_bytes = 0;
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_uuid_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_cell_ref);
__Pyx_XDECREF(__pyx_v_be_bytes);
__Pyx_XDECREF(__pyx_v_uuid_cls);
__Pyx_XDECREF(__pyx_v_int_to_bytes);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
05113: col_t* col,
05114: size_t row_count,
05115: object df_col_name) except NULL:
+05116: cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
__pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+05117: if b == NULL:
__pyx_t_1 = (__pyx_v_b == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05118: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 5118, __pyx_L1_error)
+05119: b.row_count = row_count
__pyx_v_b->row_count = __pyx_v_row_count;
05120:
+05121: cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
__pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
05122: cdef PyObject* cell
05123: # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
05124: cdef object cell_ref
+05125: cdef uint8_t* buf = NULL
__pyx_v_buf = NULL;
+05126: cdef size_t buf_bytes = row_count * 16 if row_count > 0 else 16
__pyx_t_1 = (__pyx_v_row_count > 0);
if (__pyx_t_1) {
__pyx_t_2 = (__pyx_v_row_count * 16);
} else {
__pyx_t_2 = 16;
}
__pyx_v_buf_bytes = __pyx_t_2;
+05127: cdef size_t validity_bytes = (row_count + 7) // 8
__pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
05128: cdef size_t i
05129: cdef bytes be_bytes
+05130: cdef object uuid_cls = _uuid.UUID
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_uuid_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5130, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_UUID); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5130, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_uuid_cls = __pyx_t_4; __pyx_t_4 = 0;
+05131: cdef object int_to_bytes = int.to_bytes
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)(&PyLong_Type)), __pyx_mstate_global->__pyx_n_u_to_bytes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5131, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_int_to_bytes = __pyx_t_4; __pyx_t_4 = 0;
05132:
+05133: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
goto __pyx_L1_error;
__pyx_L9_try_end:;
}
+05134: buf = <uint8_t*>calloc(buf_bytes, sizeof(uint8_t))
__pyx_v_buf = ((uint8_t *)calloc(__pyx_v_buf_bytes, (sizeof(uint8_t))));
+05135: if buf == NULL:
__pyx_t_1 = (__pyx_v_buf == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05136: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 5136, __pyx_L4_error)
+05137: b.data = <void*>buf
__pyx_v_b->data = ((void *)__pyx_v_buf);
+05138: if validity_bytes > 0:
__pyx_t_1 = (__pyx_v_validity_bytes > 0);
if (__pyx_t_1) {
/* … */
}
+05139: b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
__pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+05140: if b.validity == NULL:
__pyx_t_1 = (__pyx_v_b->validity == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05141: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 5141, __pyx_L4_error)
+05142: for i in range(row_count):
__pyx_t_2 = __pyx_v_row_count;
__pyx_t_8 = __pyx_t_2;
for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
__pyx_v_i = __pyx_t_9;
+05143: cell_ref = <object>access[i]
__pyx_t_4 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
__Pyx_INCREF(__pyx_t_4);
__Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_4);
__pyx_t_4 = 0;
+05144: cell = <PyObject*>cell_ref
__pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+05145: if isinstance(<object>cell, uuid_cls):
__pyx_t_1 = PyObject_IsInstance(((PyObject *)__pyx_v_cell), __pyx_v_uuid_cls); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 5145, __pyx_L4_error) if (__pyx_t_1) { /* … */ goto __pyx_L15; }
05146: # `qwp_numpy_s16` reads canonical RFC 4122 big-endian
05147: # rows and byte-swaps them into QWP wire order itself.
05148: # `int.to_bytes` is called unbound so that a replaced
05149: # `UUID.int` cannot narrow the result: it is always the
05150: # 16 bytes `UUID.bytes` would give, in one C-implemented
05151: # call plus one 16-byte memcpy per row.
+05152: be_bytes = int_to_bytes((<object>cell).int, 16, 'big')
__pyx_t_3 = NULL;
__Pyx_INCREF(__pyx_v_int_to_bytes);
__pyx_t_10 = __pyx_v_int_to_bytes;
__pyx_t_11 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cell), __pyx_mstate_global->__pyx_n_u_int); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5152, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_11);
__pyx_t_12 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_10))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_10);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_10);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_10, __pyx__function);
__pyx_t_12 = 0;
}
#endif
{
PyObject *__pyx_callargs[4] = {__pyx_t_3, __pyx_t_11, __pyx_mstate_global->__pyx_int_16, __pyx_mstate_global->__pyx_n_u_big};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_10, __pyx_callargs+__pyx_t_12, (4-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5152, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_4);
}
if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_4))) __PYX_ERR(0, 5152, __pyx_L4_error)
__Pyx_XDECREF_SET(__pyx_v_be_bytes, ((PyObject*)__pyx_t_4));
__pyx_t_4 = 0;
+05153: memcpy(buf + i * 16, PyBytes_AsString(be_bytes), 16)
__pyx_t_13 = PyBytes_AsString(__pyx_v_be_bytes); if (unlikely(__pyx_t_13 == ((void *)NULL))) __PYX_ERR(0, 5153, __pyx_L4_error) (void)(memcpy((__pyx_v_buf + (__pyx_v_i * 16)), __pyx_t_13, 16));
+05154: if b.validity != NULL:
__pyx_t_1 = (__pyx_v_b->validity != NULL);
if (__pyx_t_1) {
/* … */
}
+05155: _pyobj_set_validity_bit(b.validity, i)
__pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
+05156: elif _dataframe_is_null_pyobj(cell):
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
if (likely(__pyx_t_1)) {
/* … */
goto __pyx_L15;
}
+05157: b.has_nulls = True
__pyx_v_b->has_nulls = 1;
05158: else:
+05159: raise QuestDBError(
/*else*/ {
__pyx_t_10 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5159, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_11);
+05160: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5160, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5160, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+05161: f'Bad column {df_col_name!r} at row {i}: expected UUID, '
__pyx_t_3 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5161, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_15 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5161, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_15); /* … */ __pyx_t_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, 5161, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_12 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_11))) { __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11); assert(__pyx_t_10); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11); __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_11, __pyx__function); __pyx_t_12 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_10, __pyx_t_14, __pyx_t_16}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_12, (3-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5159, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 5159, __pyx_L4_error) } __pyx_L15:; }
+05162: f'got {_fqn(type(<object>cell))}.')
__pyx_t_16 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5162, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_17 = __Pyx_PyUnicode_Unicode(__pyx_t_16); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5162, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_18[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_18[1] = __pyx_t_3; __pyx_t_18[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_18[3] = __pyx_t_15; __pyx_t_18[4] = __pyx_mstate_global->__pyx_kp_u_expected_UUID_got; __pyx_t_18[5] = __pyx_t_17; __pyx_t_18[6] = __pyx_mstate_global->__pyx_kp_u__3;
05163:
+05164: 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) {
/* … */
}
+05165: free(b.validity)
free(__pyx_v_b->validity);
+05166: b.validity = NULL
__pyx_v_b->validity = NULL;
+05167: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_uuid_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_11, &__pyx_t_16) < 0) __PYX_ERR(0, 5167, __pyx_L6_except_error)
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_16);
+05168: pyobj_built_free(b)
__pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+05169: raise
__Pyx_GIVEREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_11); __Pyx_XGIVEREF(__pyx_t_16); __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_11, __pyx_t_16); __pyx_t_4 = 0; __pyx_t_11 = 0; __pyx_t_16 = 0; __PYX_ERR(0, 5169, __pyx_L6_except_error) }
05170:
+05171: return b
{
__pyx_r = __pyx_v_b;
}
goto __pyx_L0;
05172:
05173:
+05174: cdef pyobj_built_t* _dataframe_columnar_build_ipv4_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_ipv4_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name) {
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
PyObject **__pyx_v_access;
PyObject *__pyx_v_cell;
PyObject *__pyx_v_cell_ref = 0;
uint32_t *__pyx_v_values;
size_t __pyx_v_validity_bytes;
size_t __pyx_v_i;
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_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;
}
05175: col_t* col,
05176: size_t row_count,
05177: object df_col_name) except NULL:
+05178: cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
__pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+05179: if b == NULL:
__pyx_t_1 = (__pyx_v_b == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05180: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 5180, __pyx_L1_error)
+05181: b.row_count = row_count
__pyx_v_b->row_count = __pyx_v_row_count;
05182:
+05183: cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
__pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
05184: cdef PyObject* cell
05185: # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
05186: cdef object cell_ref
+05187: cdef uint32_t* values = NULL
__pyx_v_values = NULL;
+05188: cdef size_t validity_bytes = (row_count + 7) // 8
__pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
05189: cdef size_t i
+05190: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_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:;
}
+05191: values = <uint32_t*>calloc(row_count if row_count > 0 else 1,
__pyx_t_1 = (__pyx_v_row_count > 0);
if (__pyx_t_1) {
__pyx_t_5 = __pyx_v_row_count;
} else {
__pyx_t_5 = 1;
}
/* … */
__pyx_v_values = ((uint32_t *)calloc(__pyx_t_5, (sizeof(uint32_t))));
05192: sizeof(uint32_t))
+05193: if values == NULL:
__pyx_t_1 = (__pyx_v_values == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05194: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 5194, __pyx_L4_error)
+05195: b.data = <void*>values
__pyx_v_b->data = ((void *)__pyx_v_values);
+05196: if validity_bytes > 0:
__pyx_t_1 = (__pyx_v_validity_bytes > 0);
if (__pyx_t_1) {
/* … */
}
+05197: b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
__pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+05198: if b.validity == NULL:
__pyx_t_1 = (__pyx_v_b->validity == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05199: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 5199, __pyx_L4_error)
+05200: for i in range(row_count):
__pyx_t_5 = __pyx_v_row_count;
__pyx_t_6 = __pyx_t_5;
for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
__pyx_v_i = __pyx_t_7;
+05201: cell_ref = <object>access[i]
__pyx_t_8 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
__Pyx_INCREF(__pyx_t_8);
__Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_8);
__pyx_t_8 = 0;
+05202: cell = <PyObject*>cell_ref
__pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+05203: if _is_ipv4_address(<object>cell):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_ipv4_address(((PyObject *)__pyx_v_cell)); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 5203, __pyx_L4_error) if (__pyx_t_1) { /* … */ goto __pyx_L15; }
+05204: values[i] = <uint32_t>int(<object>cell)
__pyx_t_8 = __Pyx_PyNumber_Int(((PyObject *)__pyx_v_cell)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5204, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = __Pyx_PyLong_As_uint32_t(__pyx_t_8); if (unlikely((__pyx_t_9 == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 5204, __pyx_L4_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; (__pyx_v_values[__pyx_v_i]) = ((uint32_t)__pyx_t_9);
+05205: if b.validity != NULL:
__pyx_t_1 = (__pyx_v_b->validity != NULL);
if (__pyx_t_1) {
/* … */
}
+05206: _pyobj_set_validity_bit(b.validity, i)
__pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
+05207: elif _dataframe_is_null_pyobj(cell):
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
if (likely(__pyx_t_1)) {
/* … */
goto __pyx_L15;
}
+05208: b.has_nulls = True
__pyx_v_b->has_nulls = 1;
+05209: elif isinstance(<object>cell, _IPV4_INTERFACE):
__pyx_t_8 = __pyx_v_7questdb_7_client__IPV4_INTERFACE;
__Pyx_INCREF(__pyx_t_8);
__pyx_t_1 = PyObject_IsInstance(((PyObject *)__pyx_v_cell), __pyx_t_8); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 5209, __pyx_L4_error)
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(__pyx_t_1)) {
/* … */
}
+05210: raise QuestDBError(
__pyx_t_10 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5210, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_11);
+05211: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5211, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 5211, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+05212: f'Bad column {df_col_name!r} at row {i}: '
__pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5212, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_14 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5212, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_15[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_15[1] = __pyx_t_12; __pyx_t_15[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_15[3] = __pyx_t_14; __pyx_t_15[4] = __pyx_mstate_global->__pyx_kp_u__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, 5212, __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;
+05213: + _ipv4_interface_df_message(df_col_name))
__pyx_t_14 = __pyx_f_7questdb_7_client__ipv4_interface_df_message(__pyx_v_df_col_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5213, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_12 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_t_18, __pyx_t_14); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5213, __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, 5210, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 5210, __pyx_L4_error)
05214: else:
+05215: raise QuestDBError(
/*else*/ {
__pyx_t_11 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5215, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_12);
+05216: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 5216, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5216, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+05217: f'Bad column {df_col_name!r} at row {i}: expected '
__pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 5217, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5217, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_14); /* … */ __pyx_t_16 = 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, 5217, __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, 5215, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 5215, __pyx_L4_error) } __pyx_L15:; }
+05218: f'ipaddress.IPv4Address, got {_fqn(type(<object>cell))}.')
__pyx_t_18 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5218, __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, 5218, __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;
05219:
+05220: 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) {
/* … */
}
+05221: free(b.validity)
free(__pyx_v_b->validity);
+05222: b.validity = NULL
__pyx_v_b->validity = NULL;
+05223: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_ipv4_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_12, &__pyx_t_18) < 0) __PYX_ERR(0, 5223, __pyx_L6_except_error)
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_18);
+05224: pyobj_built_free(b)
__pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+05225: raise
__Pyx_GIVEREF(__pyx_t_8); __Pyx_GIVEREF(__pyx_t_12); __Pyx_XGIVEREF(__pyx_t_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, 5225, __pyx_L6_except_error) }
05226:
+05227: return b
{
__pyx_r = __pyx_v_b;
}
goto __pyx_L0;
05228:
05229:
+05230: cdef inline int64_t _days_from_civil(int y, int m, int d) noexcept nogil:
static CYTHON_INLINE int64_t __pyx_f_7questdb_7_client__days_from_civil(int __pyx_v_y, int __pyx_v_m, int __pyx_v_d) {
int __pyx_v_y_adj;
int __pyx_v_era;
int __pyx_v_yoe;
int __pyx_v_m_adj;
int __pyx_v_doy;
int __pyx_v_doe;
int64_t __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
+05231: cdef int y_adj = y - 1 if m <= 2 else y
__pyx_t_2 = (__pyx_v_m <= 2);
if (__pyx_t_2) {
__pyx_t_1 = (__pyx_v_y - 1);
} else {
__pyx_t_1 = __pyx_v_y;
}
__pyx_v_y_adj = __pyx_t_1;
+05232: cdef int era = (y_adj if y_adj >= 0 else y_adj - 399) // 400
__pyx_t_2 = (__pyx_v_y_adj >= 0);
if (__pyx_t_2) {
__pyx_t_1 = __pyx_v_y_adj;
} else {
__pyx_t_1 = (__pyx_v_y_adj - 0x18F);
}
__pyx_v_era = __Pyx_div_long(__pyx_t_1, 0x190, 1);
+05233: cdef int yoe = y_adj - era * 400
__pyx_v_yoe = (__pyx_v_y_adj - (__pyx_v_era * 0x190));
+05234: cdef int m_adj = m - 3 if m > 2 else m + 9
__pyx_t_2 = (__pyx_v_m > 2);
if (__pyx_t_2) {
__pyx_t_1 = (__pyx_v_m - 3);
} else {
__pyx_t_1 = (__pyx_v_m + 9);
}
__pyx_v_m_adj = __pyx_t_1;
+05235: cdef int doy = (153 * m_adj + 2) // 5 + d - 1
__pyx_v_doy = ((__Pyx_div_long(((0x99 * __pyx_v_m_adj) + 2), 5, 1) + __pyx_v_d) - 1);
+05236: cdef int doe = yoe * 365 + yoe // 4 - yoe // 100 + doy
__pyx_v_doe = ((((__pyx_v_yoe * 0x16D) + __Pyx_div_long(__pyx_v_yoe, 4, 1)) - __Pyx_div_long(__pyx_v_yoe, 0x64, 1)) + __pyx_v_doy);
+05237: return <int64_t>era * 146097 + <int64_t>doe - 719468
{
__pyx_r = (((((int64_t)__pyx_v_era) * 0x23AB1) + ((int64_t)__pyx_v_doe)) - 0xAFA6C);
}
goto __pyx_L0;
05238:
05239:
+05240: cdef pyobj_built_t* _dataframe_columnar_build_datetime_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_datetime_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name) {
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
PyObject **__pyx_v_access;
PyObject *__pyx_v_cell;
PyObject *__pyx_v_cell_ref = 0;
int64_t *__pyx_v_values;
size_t __pyx_v_validity_bytes;
size_t __pyx_v_i;
PyObject *__pyx_v_dt = 0;
PyObject *__pyx_v_epoch_aware = 0;
PyObject *__pyx_v_datetime_cls = 0;
PyObject *__pyx_v_delta = 0;
int __pyx_v_year;
int __pyx_v_month;
int __pyx_v_day;
int __pyx_v_hour;
int __pyx_v_minute;
int __pyx_v_second;
int __pyx_v_us;
int64_t __pyx_v_days;
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_XDECREF(__pyx_t_18);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_datetime_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_cell_ref);
__Pyx_XDECREF(__pyx_v_dt);
__Pyx_XDECREF(__pyx_v_epoch_aware);
__Pyx_XDECREF(__pyx_v_datetime_cls);
__Pyx_XDECREF(__pyx_v_delta);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
05241: col_t* col,
05242: size_t row_count,
05243: object df_col_name) except NULL:
+05244: cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
__pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+05245: if b == NULL:
__pyx_t_1 = (__pyx_v_b == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05246: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 5246, __pyx_L1_error)
+05247: b.row_count = row_count
__pyx_v_b->row_count = __pyx_v_row_count;
05248:
+05249: cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
__pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
05250: cdef PyObject* cell
05251: # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
05252: cdef object cell_ref
+05253: cdef int64_t* values = NULL
__pyx_v_values = NULL;
+05254: cdef size_t validity_bytes = (row_count + 7) // 8
__pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
05255: cdef size_t i
05256: cdef object dt
+05257: cdef object epoch_aware = datetime.datetime(
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5257, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5257, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* … */ __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_mstate_global->__pyx_tuple[3], __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5257, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_epoch_aware = __pyx_t_4; __pyx_t_4 = 0;
+05258: 1970, 1, 1, tzinfo=datetime.timezone.utc)
__pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5258, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5258, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_timezone); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5258, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_utc); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5258, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_tzinfo, __pyx_t_4) < (0)) __PYX_ERR(0, 5258, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+05259: cdef object datetime_cls = datetime.datetime
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5259, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5259, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_datetime_cls = __pyx_t_2; __pyx_t_2 = 0;
05260: cdef object delta
05261: cdef int year, month, day, hour, minute, second, us
05262: cdef int64_t days
05263:
+05264: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L1_error;
__pyx_L9_try_end:;
}
+05265: values = <int64_t*>calloc(row_count if row_count > 0 else 1,
__pyx_t_1 = (__pyx_v_row_count > 0);
if (__pyx_t_1) {
__pyx_t_9 = __pyx_v_row_count;
} else {
__pyx_t_9 = 1;
}
/* … */
__pyx_v_values = ((int64_t *)calloc(__pyx_t_9, (sizeof(int64_t))));
05266: sizeof(int64_t))
+05267: if values == NULL:
__pyx_t_1 = (__pyx_v_values == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05268: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 5268, __pyx_L4_error)
+05269: b.data = <void*>values
__pyx_v_b->data = ((void *)__pyx_v_values);
+05270: if validity_bytes > 0:
__pyx_t_1 = (__pyx_v_validity_bytes > 0);
if (__pyx_t_1) {
/* … */
}
+05271: b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
__pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+05272: if b.validity == NULL:
__pyx_t_1 = (__pyx_v_b->validity == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05273: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 5273, __pyx_L4_error)
+05274: for i in range(row_count):
__pyx_t_9 = __pyx_v_row_count;
__pyx_t_10 = __pyx_t_9;
for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
__pyx_v_i = __pyx_t_11;
+05275: cell_ref = <object>access[i]
__pyx_t_2 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
__Pyx_INCREF(__pyx_t_2);
__Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_2);
__pyx_t_2 = 0;
+05276: cell = <PyObject*>cell_ref
__pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+05277: if _dataframe_is_null_pyobj(cell):
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
if (__pyx_t_1) {
/* … */
goto __pyx_L15;
}
+05278: b.has_nulls = True
__pyx_v_b->has_nulls = 1;
+05279: elif isinstance(<object>cell, datetime_cls):
__pyx_t_1 = PyObject_IsInstance(((PyObject *)__pyx_v_cell), __pyx_v_datetime_cls); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 5279, __pyx_L4_error) if (likely(__pyx_t_1)) { /* … */ goto __pyx_L15; }
+05280: dt = <object>cell
__pyx_t_2 = ((PyObject *)__pyx_v_cell);
__Pyx_INCREF(__pyx_t_2);
__Pyx_XDECREF_SET(__pyx_v_dt, __pyx_t_2);
__pyx_t_2 = 0;
+05281: if dt.tzinfo is None:
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dt, __pyx_mstate_global->__pyx_n_u_tzinfo); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5281, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = (__pyx_t_2 == Py_None); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_1) { /* … */ goto __pyx_L16; }
05282: # Fast path: C-level field extraction + Howard
05283: # Hinnant days_from_civil; no Python timedelta /
05284: # int arithmetic per row.
+05285: year = PyDateTime_GET_YEAR(dt)
__pyx_v_year = PyDateTime_GET_YEAR(__pyx_v_dt);
+05286: month = PyDateTime_GET_MONTH(dt)
__pyx_v_month = PyDateTime_GET_MONTH(__pyx_v_dt);
+05287: day = PyDateTime_GET_DAY(dt)
__pyx_v_day = PyDateTime_GET_DAY(__pyx_v_dt);
+05288: hour = PyDateTime_DATE_GET_HOUR(dt)
__pyx_v_hour = PyDateTime_DATE_GET_HOUR(__pyx_v_dt);
+05289: minute = PyDateTime_DATE_GET_MINUTE(dt)
__pyx_v_minute = PyDateTime_DATE_GET_MINUTE(__pyx_v_dt);
+05290: second = PyDateTime_DATE_GET_SECOND(dt)
__pyx_v_second = PyDateTime_DATE_GET_SECOND(__pyx_v_dt);
+05291: us = PyDateTime_DATE_GET_MICROSECOND(dt)
__pyx_v_us = PyDateTime_DATE_GET_MICROSECOND(__pyx_v_dt);
+05292: days = _days_from_civil(year, month, day)
__pyx_v_days = __pyx_f_7questdb_7_client__days_from_civil(__pyx_v_year, __pyx_v_month, __pyx_v_day);
+05293: values[i] = (
(__pyx_v_values[__pyx_v_i]) = (((((__pyx_v_days * ((int64_t)0x141DD76000)) + (((int64_t)__pyx_v_hour) * ((int64_t)0xD693A400))) + (((int64_t)__pyx_v_minute) * 0x3938700)) + (((int64_t)__pyx_v_second) * 0xF4240)) + ((int64_t)__pyx_v_us));
05294: days * <int64_t>86_400_000_000
05295: + <int64_t>hour * <int64_t>3_600_000_000
05296: + <int64_t>minute * 60_000_000
05297: + <int64_t>second * 1_000_000
05298: + <int64_t>us)
05299: else:
+05300: delta = dt - epoch_aware
/*else*/ {
__pyx_t_2 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_dt, __pyx_v_epoch_aware); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5300, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_XDECREF_SET(__pyx_v_delta, __pyx_t_2);
__pyx_t_2 = 0;
+05301: values[i] = (
(__pyx_v_values[__pyx_v_i]) = (((((int64_t)__pyx_t_12) * ((int64_t)0x141DD76000)) + (((int64_t)__pyx_t_13) * 0xF4240)) + ((int64_t)__pyx_t_14));
}
__pyx_L16:;
+05302: <int64_t>delta.days * <int64_t>86_400_000_000
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_delta, __pyx_mstate_global->__pyx_n_u_days); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5302, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_12 = __Pyx_PyLong_As_int64_t(__pyx_t_2); if (unlikely((__pyx_t_12 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 5302, __pyx_L4_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+05303: + <int64_t>delta.seconds * 1_000_000
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_delta, __pyx_mstate_global->__pyx_n_u_seconds); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5303, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_13 = __Pyx_PyLong_As_int64_t(__pyx_t_2); if (unlikely((__pyx_t_13 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 5303, __pyx_L4_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+05304: + <int64_t>delta.microseconds)
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_delta, __pyx_mstate_global->__pyx_n_u_microseconds); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5304, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_14 = __Pyx_PyLong_As_int64_t(__pyx_t_2); if (unlikely((__pyx_t_14 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 5304, __pyx_L4_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+05305: if b.validity != NULL:
__pyx_t_1 = (__pyx_v_b->validity != NULL);
if (__pyx_t_1) {
/* … */
}
+05306: _pyobj_set_validity_bit(b.validity, i)
__pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
05307: else:
+05308: raise QuestDBError(
/*else*/ {
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5308, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_3);
+05309: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5309, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5309, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+05310: f'Bad column {df_col_name!r} at row {i}: expected '
__pyx_t_5 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5310, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_16 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5310, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_16); /* … */ __pyx_t_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, 5310, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __pyx_t_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, 5308, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 5308, __pyx_L4_error) } __pyx_L15:; }
+05311: f'datetime.datetime, got {_fqn(type(<object>cell))}.')
__pyx_t_17 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5311, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_18 = __Pyx_PyUnicode_Unicode(__pyx_t_17); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5311, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_19[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_19[1] = __pyx_t_5; __pyx_t_19[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_19[3] = __pyx_t_16; __pyx_t_19[4] = __pyx_mstate_global->__pyx_kp_u_expected_datetime_datetime_got; __pyx_t_19[5] = __pyx_t_18; __pyx_t_19[6] = __pyx_mstate_global->__pyx_kp_u__3;
05312:
+05313: 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) {
/* … */
}
+05314: free(b.validity)
free(__pyx_v_b->validity);
+05315: b.validity = NULL
__pyx_v_b->validity = NULL;
+05316: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_datetime_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_17) < 0) __PYX_ERR(0, 5316, __pyx_L6_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_17);
+05317: pyobj_built_free(b)
__pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+05318: raise
__Pyx_GIVEREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_3); __Pyx_XGIVEREF(__pyx_t_17); __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_3, __pyx_t_17); __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_17 = 0; __PYX_ERR(0, 5318, __pyx_L6_except_error) }
05319:
+05320: return b
{
__pyx_r = __pyx_v_b;
}
goto __pyx_L0;
05321:
05322:
+05323: cdef pyobj_built_t* _dataframe_columnar_build_bytes_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_bytes_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name) {
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
PyObject **__pyx_v_access;
PyObject *__pyx_v_cell;
PyObject *__pyx_v_cell_ref = 0;
Py_ssize_t __pyx_v_blob_len;
char const *__pyx_v_blob_buf;
PyObject *__pyx_v_py_cell = 0;
Py_buffer __pyx_v_view;
int __pyx_v_release_view;
size_t __pyx_v_validity_bytes;
size_t __pyx_v_bytes_cap;
uint8_t *__pyx_v_new_bytes;
size_t __pyx_v_bytes_used;
size_t __pyx_v_i;
PyObject *__pyx_v_exc = NULL;
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_XDECREF(__pyx_t_18);
__Pyx_XDECREF(__pyx_t_19);
__Pyx_XDECREF(__pyx_t_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;
}
05324: col_t* col,
05325: size_t row_count,
05326: object df_col_name) except NULL:
+05327: cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
__pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+05328: if b == NULL:
__pyx_t_1 = (__pyx_v_b == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05329: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 5329, __pyx_L1_error)
+05330: b.row_count = row_count
__pyx_v_b->row_count = __pyx_v_row_count;
05331:
+05332: cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
__pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
05333: cdef PyObject* cell
05334: # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
05335: cdef object cell_ref
05336: cdef Py_ssize_t blob_len
05337: cdef const char* blob_buf
05338: cdef object py_cell
05339: cdef Py_buffer view
05340: cdef bint release_view
+05341: cdef size_t validity_bytes = (row_count + 7) // 8
__pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
+05342: cdef size_t bytes_cap = 16
__pyx_v_bytes_cap = 16;
05343: cdef uint8_t* new_bytes
+05344: cdef size_t bytes_used = 0
__pyx_v_bytes_used = 0;
05345: cdef size_t i
05346:
+05347: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_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:;
}
+05348: b.str_offsets = <int32_t*>calloc(row_count + 1, sizeof(int32_t))
__pyx_v_b->str_offsets = ((int32_t *)calloc((__pyx_v_row_count + 1), (sizeof(int32_t))));
+05349: if b.str_offsets == NULL:
__pyx_t_1 = (__pyx_v_b->str_offsets == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05350: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 5350, __pyx_L4_error)
+05351: if validity_bytes > 0:
__pyx_t_1 = (__pyx_v_validity_bytes > 0);
if (__pyx_t_1) {
/* … */
}
+05352: b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
__pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+05353: if b.validity == NULL:
__pyx_t_1 = (__pyx_v_b->validity == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05354: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 5354, __pyx_L4_error)
+05355: b.str_bytes = <uint8_t*>malloc(bytes_cap)
__pyx_v_b->str_bytes = ((uint8_t *)malloc(__pyx_v_bytes_cap));
+05356: if b.str_bytes == NULL:
__pyx_t_1 = (__pyx_v_b->str_bytes == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05357: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 5357, __pyx_L4_error)
05358:
+05359: for i in range(row_count):
__pyx_t_5 = __pyx_v_row_count;
__pyx_t_6 = __pyx_t_5;
for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
__pyx_v_i = __pyx_t_7;
+05360: cell_ref = <object>access[i]
__pyx_t_8 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
__Pyx_INCREF(__pyx_t_8);
__Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_8);
__pyx_t_8 = 0;
+05361: cell = <PyObject*>cell_ref
__pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+05362: release_view = False
__pyx_v_release_view = 0;
+05363: try:
/*try:*/ {
+05364: if PyBytes_Check(<object>cell):
__pyx_t_1 = PyBytes_Check(((PyObject *)__pyx_v_cell));
if (__pyx_t_1) {
/* … */
goto __pyx_L21;
}
+05365: blob_len = PyBytes_GET_SIZE(<object>cell)
__pyx_v_blob_len = PyBytes_GET_SIZE(((PyObject *)__pyx_v_cell));
+05366: blob_buf = PyBytes_AsString(<object>cell)
__pyx_t_9 = PyBytes_AsString(((PyObject *)__pyx_v_cell)); if (unlikely(__pyx_t_9 == ((void *)NULL))) __PYX_ERR(0, 5366, __pyx_L19_error) __pyx_v_blob_buf = __pyx_t_9;
+05367: elif PyByteArray_Check(<object>cell):
__pyx_t_1 = PyByteArray_Check(((PyObject *)__pyx_v_cell));
if (__pyx_t_1) {
/* … */
goto __pyx_L21;
}
+05368: blob_len = PyByteArray_Size(<object>cell)
__pyx_v_blob_len = PyByteArray_Size(((PyObject *)__pyx_v_cell));
+05369: blob_buf = PyByteArray_AsString(<object>cell)
__pyx_v_blob_buf = PyByteArray_AsString(((PyObject *)__pyx_v_cell));
+05370: elif PyMemoryView_Check(<object>cell):
__pyx_t_1 = PyMemoryView_Check(((PyObject *)__pyx_v_cell));
if (__pyx_t_1) {
/* … */
goto __pyx_L21;
}
+05371: py_cell = <object>cell
__pyx_t_8 = ((PyObject *)__pyx_v_cell);
__Pyx_INCREF(__pyx_t_8);
__Pyx_XDECREF_SET(__pyx_v_py_cell, __pyx_t_8);
__pyx_t_8 = 0;
05372: # A released memoryview raises ValueError from the
05373: # `itemsize` and `c_contiguous` reads, not from
05374: # `PyObject_GetBuffer`, so those reads sit inside the
05375: # handler that names the column and the row.
+05376: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
goto __pyx_L29_try_end;
__pyx_L22_error:;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_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:;
}
+05377: if (py_cell.itemsize != 1
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_cell, __pyx_mstate_global->__pyx_n_u_itemsize); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5377, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_13 = (__Pyx_PyLong_BoolNeObjC(__pyx_t_8, __pyx_mstate_global->__pyx_int_1, 1, 0)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 5377, __pyx_L22_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (!__pyx_t_13) { } else { __pyx_t_1 = __pyx_t_13; goto __pyx_L31_bool_binop_done; } /* … */ if (unlikely(__pyx_t_1)) { /* … */ }
+05378: or not py_cell.c_contiguous):
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_cell, __pyx_mstate_global->__pyx_n_u_c_contiguous); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5378, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 5378, __pyx_L22_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_14 = (!__pyx_t_13); __pyx_t_1 = __pyx_t_14; __pyx_L31_bool_binop_done:;
+05379: raise QuestDBError(
__pyx_t_15 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5379, __pyx_L22_error)
__Pyx_GOTREF(__pyx_t_16);
+05380: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5380, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5380, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+05381: f'Bad column {df_col_name!r} at row {i}: '
__pyx_t_17 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5381, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_19 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5381, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_20[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_20[1] = __pyx_t_17; __pyx_t_20[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_20[3] = __pyx_t_19; __pyx_t_20[4] = __pyx_mstate_global->__pyx_kp_u_memoryview_BINARY_values_must_b; __pyx_t_21 = 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, 5381, __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, 5379, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 5379, __pyx_L22_error)
05382: 'memoryview BINARY values must be '
05383: 'C-contiguous with one-byte items.')
+05384: PyObject_GetBuffer(py_cell, &view, PyBUF_SIMPLE)
__pyx_t_22 = PyObject_GetBuffer(__pyx_v_py_cell, (&__pyx_v_view), PyBUF_SIMPLE); if (unlikely(__pyx_t_22 == ((int)-1))) __PYX_ERR(0, 5384, __pyx_L22_error)
+05385: 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, 5385, __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;
+05386: raise QuestDBError(
__pyx_t_15 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5386, __pyx_L38_error)
__Pyx_GOTREF(__pyx_t_19);
+05387: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5387, __pyx_L38_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_25 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 5387, __pyx_L38_error) __Pyx_GOTREF(__pyx_t_25); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+05388: f'Bad column {df_col_name!r} at row {i}: '
__pyx_t_17 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5388, __pyx_L38_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_26 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 5388, __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, 5388, __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, 5386, __pyx_L38_error) __Pyx_GOTREF(__pyx_t_18); }
+05389: 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, 5389, __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, 5386, __pyx_L38_error) }
+05390: release_view = True
__pyx_v_release_view = 1;
+05391: blob_len = view.len
__pyx_t_21 = __pyx_v_view.len;
__pyx_v_blob_len = __pyx_t_21;
+05392: blob_buf = <const char*>view.buf
__pyx_v_blob_buf = ((char const *)__pyx_v_view.buf);
+05393: elif _dataframe_is_null_pyobj(cell):
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
if (likely(__pyx_t_1)) {
/* … */
}
+05394: b.str_offsets[i + 1] = <int32_t>bytes_used
(__pyx_v_b->str_offsets[(__pyx_v_i + 1)]) = ((int32_t)__pyx_v_bytes_used);
+05395: b.has_nulls = True
__pyx_v_b->has_nulls = 1;
+05396: continue
goto __pyx_L16_continue;
05397: else:
+05398: raise QuestDBError(
/*else*/ {
__pyx_t_16 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5398, __pyx_L19_error)
__Pyx_GOTREF(__pyx_t_8);
+05399: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5399, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5399, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_19); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+05400: f'Bad column {df_col_name!r} at row {i}: expected '
__pyx_t_18 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5400, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_29 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 5400, __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, 5400, __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, 5398, __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, 5398, __pyx_L19_error) } __pyx_L21:;
05401: 'bytes, bytearray, or memoryview, '
+05402: 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, 5402, __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, 5402, __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;
05403:
+05404: if bytes_used + <size_t>blob_len > <size_t>2_147_483_647:
__pyx_t_1 = ((__pyx_v_bytes_used + ((size_t)__pyx_v_blob_len)) > ((size_t)0x7FFFFFFF));
if (unlikely(__pyx_t_1)) {
/* … */
}
+05405: raise QuestDBError(
__pyx_t_8 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 5405, __pyx_L19_error)
__Pyx_GOTREF(__pyx_t_25);
+05406: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5406, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5406, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+05407: f'Bad column {df_col_name!r}: column total bytes '
__pyx_t_19 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5407, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_39[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_39[1] = __pyx_t_19; __pyx_t_39[2] = __pyx_mstate_global->__pyx_kp_u_column_total_bytes_exceeds_the; __pyx_t_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, 5407, __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, 5405, __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, 5405, __pyx_L19_error)
05408: 'exceeds the QWP wire binary offset table '
05409: 'limit (2 GiB).')
+05410: while bytes_used + <size_t>blob_len > bytes_cap:
while (1) {
__pyx_t_1 = ((__pyx_v_bytes_used + ((size_t)__pyx_v_blob_len)) > __pyx_v_bytes_cap);
if (!__pyx_t_1) break;
+05411: bytes_cap *= 2
__pyx_v_bytes_cap = (__pyx_v_bytes_cap * 2);
+05412: new_bytes = <uint8_t*>realloc(b.str_bytes, bytes_cap)
__pyx_v_new_bytes = ((uint8_t *)realloc(__pyx_v_b->str_bytes, __pyx_v_bytes_cap));
+05413: if new_bytes == NULL:
__pyx_t_1 = (__pyx_v_new_bytes == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05414: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 5414, __pyx_L19_error)
+05415: b.str_bytes = new_bytes
__pyx_v_b->str_bytes = __pyx_v_new_bytes;
}
+05416: if blob_len > 0:
__pyx_t_1 = (__pyx_v_blob_len > 0);
if (__pyx_t_1) {
/* … */
}
+05417: memcpy(b.str_bytes + bytes_used, blob_buf, <size_t>blob_len)
(void)(memcpy((__pyx_v_b->str_bytes + __pyx_v_bytes_used), __pyx_v_blob_buf, ((size_t)__pyx_v_blob_len)));
+05418: bytes_used += <size_t>blob_len
__pyx_v_bytes_used = (__pyx_v_bytes_used + ((size_t)__pyx_v_blob_len));
+05419: b.str_offsets[i + 1] = <int32_t>bytes_used
(__pyx_v_b->str_offsets[(__pyx_v_i + 1)]) = ((int32_t)__pyx_v_bytes_used);
+05420: if b.validity != NULL:
__pyx_t_1 = (__pyx_v_b->validity != NULL);
if (__pyx_t_1) {
/* … */
}
}
+05421: _pyobj_set_validity_bit(b.validity, i)
__pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
05422: finally:
+05423: if release_view:
/*finally:*/ {
/*normal exit:*/{
if (__pyx_v_release_view) {
/* … */
}
goto __pyx_L20;
}
__pyx_L19_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_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:;
}
+05424: PyBuffer_Release(&view)
PyBuffer_Release((&__pyx_v_view)); /* … */ PyBuffer_Release((&__pyx_v_view)); /* … */ PyBuffer_Release((&__pyx_v_view));
05425:
+05426: b.str_bytes_len = bytes_used
__pyx_v_b->str_bytes_len = __pyx_v_bytes_used;
+05427: if not b.has_nulls and b.validity != NULL:
__pyx_t_14 = (!__pyx_v_b->has_nulls);
if (__pyx_t_14) {
} else {
__pyx_t_1 = __pyx_t_14;
goto __pyx_L58_bool_binop_done;
}
__pyx_t_14 = (__pyx_v_b->validity != NULL);
__pyx_t_1 = __pyx_t_14;
__pyx_L58_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+05428: free(b.validity)
free(__pyx_v_b->validity);
+05429: b.validity = NULL
__pyx_v_b->validity = NULL;
+05430: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_bytes_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_23, &__pyx_t_25, &__pyx_t_15) < 0) __PYX_ERR(0, 5430, __pyx_L6_except_error)
__Pyx_XGOTREF(__pyx_t_23);
__Pyx_XGOTREF(__pyx_t_25);
__Pyx_XGOTREF(__pyx_t_15);
+05431: pyobj_built_free(b)
__pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+05432: raise
__Pyx_GIVEREF(__pyx_t_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, 5432, __pyx_L6_except_error) }
05433:
+05434: return b
{
__pyx_r = __pyx_v_b;
}
goto __pyx_L0;
05435:
05436:
+05437: cdef pyobj_built_t* _dataframe_columnar_build_fsb_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_fsb_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name, size_t __pyx_v_width, PyObject *__pyx_v_type_name) {
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
PyObject **__pyx_v_access;
PyObject *__pyx_v_cell;
PyObject *__pyx_v_cell_ref = 0;
uint8_t *__pyx_v_buf;
size_t __pyx_v_buf_bytes;
size_t __pyx_v_validity_bytes;
size_t __pyx_v_i;
Py_ssize_t __pyx_v_blob_len;
char const *__pyx_v_blob_buf;
PyObject *__pyx_v_py_cell = 0;
Py_buffer __pyx_v_view;
int __pyx_v_release_view;
PyObject *__pyx_v_exc = NULL;
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_XDECREF(__pyx_t_18);
__Pyx_XDECREF(__pyx_t_19);
__Pyx_XDECREF(__pyx_t_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;
}
05438: col_t* col,
05439: size_t row_count,
05440: object df_col_name,
05441: size_t width,
05442: str type_name) except NULL:
05443: """
05444: Walk an object column of `bytes` claimed as UUID or LONG256 and
05445: produce `width` bytes per row + LSB-packed validity bitmap.
05446:
05447: ``to_pandas(dtype_backend='numpy_nullable')`` hands a fixed-size
05448: binary column back as object-dtype `bytes`, so the raw rows are
05449: already in the order the wire wants: canonical RFC 4122 big-endian
05450: for UUID, little-endian limbs for LONG256. Every non-null cell must
05451: be exactly `width` bytes — a column whose values no longer are is
05452: refused rather than written to a column of the claimed type.
05453: """
+05454: cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
__pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+05455: if b == NULL:
__pyx_t_1 = (__pyx_v_b == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05456: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 5456, __pyx_L1_error)
+05457: b.row_count = row_count
__pyx_v_b->row_count = __pyx_v_row_count;
05458:
+05459: cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
__pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
05460: cdef PyObject* cell
05461: # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
05462: cdef object cell_ref
+05463: cdef uint8_t* buf = NULL
__pyx_v_buf = NULL;
+05464: cdef size_t buf_bytes = row_count * width if row_count > 0 else width
__pyx_t_1 = (__pyx_v_row_count > 0);
if (__pyx_t_1) {
__pyx_t_2 = (__pyx_v_row_count * __pyx_v_width);
} else {
__pyx_t_2 = __pyx_v_width;
}
__pyx_v_buf_bytes = __pyx_t_2;
+05465: cdef size_t validity_bytes = (row_count + 7) // 8
__pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
05466: cdef size_t i
05467: cdef Py_ssize_t blob_len
05468: cdef const char* blob_buf
05469: cdef object py_cell
05470: cdef Py_buffer view
05471: cdef bint release_view
05472:
+05473: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_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:;
}
+05474: buf = <uint8_t*>calloc(buf_bytes, sizeof(uint8_t))
__pyx_v_buf = ((uint8_t *)calloc(__pyx_v_buf_bytes, (sizeof(uint8_t))));
+05475: if buf == NULL:
__pyx_t_1 = (__pyx_v_buf == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05476: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 5476, __pyx_L4_error)
+05477: b.data = <void*>buf
__pyx_v_b->data = ((void *)__pyx_v_buf);
+05478: if validity_bytes > 0:
__pyx_t_1 = (__pyx_v_validity_bytes > 0);
if (__pyx_t_1) {
/* … */
}
+05479: b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
__pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+05480: if b.validity == NULL:
__pyx_t_1 = (__pyx_v_b->validity == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05481: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 5481, __pyx_L4_error)
+05482: for i in range(row_count):
__pyx_t_2 = __pyx_v_row_count;
__pyx_t_6 = __pyx_t_2;
for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
__pyx_v_i = __pyx_t_7;
+05483: cell_ref = <object>access[i]
__pyx_t_8 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
__Pyx_INCREF(__pyx_t_8);
__Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_8);
__pyx_t_8 = 0;
+05484: cell = <PyObject*>cell_ref
__pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+05485: release_view = False
__pyx_v_release_view = 0;
+05486: try:
/*try:*/ {
+05487: if PyBytes_Check(<object>cell):
__pyx_t_1 = PyBytes_Check(((PyObject *)__pyx_v_cell));
if (__pyx_t_1) {
/* … */
goto __pyx_L20;
}
+05488: blob_len = PyBytes_GET_SIZE(<object>cell)
__pyx_v_blob_len = PyBytes_GET_SIZE(((PyObject *)__pyx_v_cell));
+05489: blob_buf = PyBytes_AsString(<object>cell)
__pyx_t_9 = PyBytes_AsString(((PyObject *)__pyx_v_cell)); if (unlikely(__pyx_t_9 == ((void *)NULL))) __PYX_ERR(0, 5489, __pyx_L18_error) __pyx_v_blob_buf = __pyx_t_9;
+05490: elif PyByteArray_Check(<object>cell):
__pyx_t_1 = PyByteArray_Check(((PyObject *)__pyx_v_cell));
if (__pyx_t_1) {
/* … */
goto __pyx_L20;
}
+05491: blob_len = PyByteArray_Size(<object>cell)
__pyx_v_blob_len = PyByteArray_Size(((PyObject *)__pyx_v_cell));
+05492: blob_buf = PyByteArray_AsString(<object>cell)
__pyx_v_blob_buf = PyByteArray_AsString(((PyObject *)__pyx_v_cell));
+05493: elif PyMemoryView_Check(<object>cell):
__pyx_t_1 = PyMemoryView_Check(((PyObject *)__pyx_v_cell));
if (__pyx_t_1) {
/* … */
goto __pyx_L20;
}
+05494: py_cell = <object>cell
__pyx_t_8 = ((PyObject *)__pyx_v_cell);
__Pyx_INCREF(__pyx_t_8);
__Pyx_XDECREF_SET(__pyx_v_py_cell, __pyx_t_8);
__pyx_t_8 = 0;
+05495: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
goto __pyx_L28_try_end;
__pyx_L21_error:;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_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:;
}
+05496: if (py_cell.itemsize != 1
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_cell, __pyx_mstate_global->__pyx_n_u_itemsize); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5496, __pyx_L21_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_13 = (__Pyx_PyLong_BoolNeObjC(__pyx_t_8, __pyx_mstate_global->__pyx_int_1, 1, 0)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 5496, __pyx_L21_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (!__pyx_t_13) { } else { __pyx_t_1 = __pyx_t_13; goto __pyx_L30_bool_binop_done; } /* … */ if (unlikely(__pyx_t_1)) { /* … */ }
+05497: or not py_cell.c_contiguous):
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_cell, __pyx_mstate_global->__pyx_n_u_c_contiguous); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5497, __pyx_L21_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 5497, __pyx_L21_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_14 = (!__pyx_t_13); __pyx_t_1 = __pyx_t_14; __pyx_L30_bool_binop_done:;
+05498: raise QuestDBError(
__pyx_t_15 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5498, __pyx_L21_error)
__Pyx_GOTREF(__pyx_t_16);
+05499: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5499, __pyx_L21_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5499, __pyx_L21_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+05500: f'Bad column {df_col_name!r} at row {i}: '
__pyx_t_17 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5500, __pyx_L21_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_19 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5500, __pyx_L21_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_20[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_20[1] = __pyx_t_17; __pyx_t_20[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_20[3] = __pyx_t_19; __pyx_t_20[4] = __pyx_mstate_global->__pyx_kp_u_memoryview_values_must_be_C_con; __pyx_t_21 = 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, 5500, __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, 5498, __pyx_L21_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 5498, __pyx_L21_error)
05501: 'memoryview values must be C-contiguous '
05502: 'with one-byte items.')
+05503: PyObject_GetBuffer(py_cell, &view, PyBUF_SIMPLE)
__pyx_t_22 = PyObject_GetBuffer(__pyx_v_py_cell, (&__pyx_v_view), PyBUF_SIMPLE); if (unlikely(__pyx_t_22 == ((int)-1))) __PYX_ERR(0, 5503, __pyx_L21_error)
+05504: 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, 5504, __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;
+05505: raise QuestDBError(
__pyx_t_15 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5505, __pyx_L37_error)
__Pyx_GOTREF(__pyx_t_19);
+05506: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5506, __pyx_L37_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_25 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 5506, __pyx_L37_error) __Pyx_GOTREF(__pyx_t_25); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+05507: f'Bad column {df_col_name!r} at row {i}: '
__pyx_t_17 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5507, __pyx_L37_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_26 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 5507, __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, 5507, __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, 5505, __pyx_L37_error) __Pyx_GOTREF(__pyx_t_18); }
+05508: 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, 5508, __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, 5505, __pyx_L37_error) }
+05509: release_view = True
__pyx_v_release_view = 1;
+05510: blob_len = view.len
__pyx_t_21 = __pyx_v_view.len;
__pyx_v_blob_len = __pyx_t_21;
+05511: blob_buf = <const char*>view.buf
__pyx_v_blob_buf = ((char const *)__pyx_v_view.buf);
+05512: elif _dataframe_is_null_pyobj(cell):
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
if (likely(__pyx_t_1)) {
/* … */
}
+05513: b.has_nulls = True
__pyx_v_b->has_nulls = 1;
+05514: continue
goto __pyx_L15_continue;
05515: else:
+05516: raise QuestDBError(
/*else*/ {
__pyx_t_16 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5516, __pyx_L18_error)
__Pyx_GOTREF(__pyx_t_8);
+05517: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5517, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5517, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_19); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+05518: f'Bad column {df_col_name!r} at row {i}: expected '
__pyx_t_18 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5518, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_29 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 5518, __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, 5518, __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, 5516, __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, 5516, __pyx_L18_error) } __pyx_L20:;
05519: 'bytes, bytearray, or memoryview, '
+05520: 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, 5520, __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, 5520, __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;
05521:
+05522: if <size_t>blob_len != width:
__pyx_t_1 = (((size_t)__pyx_v_blob_len) != __pyx_v_width);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05523: raise QuestDBError(
__pyx_t_8 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 5523, __pyx_L18_error)
__Pyx_GOTREF(__pyx_t_25);
+05524: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5524, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5524, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+05525: f'Bad column {df_col_name!r} at row {i}: a '
__pyx_t_19 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5525, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_15 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5525, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_15); /* … */ __pyx_t_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, 5525, __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, 5523, __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, 5523, __pyx_L18_error)
+05526: 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, 5526, __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, 5526, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_18);
+05527: 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, 5527, __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;
+05528: memcpy(buf + i * width, blob_buf, width)
(void)(memcpy((__pyx_v_buf + (__pyx_v_i * __pyx_v_width)), __pyx_v_blob_buf, __pyx_v_width));
+05529: if b.validity != NULL:
__pyx_t_1 = (__pyx_v_b->validity != NULL);
if (__pyx_t_1) {
/* … */
}
}
+05530: _pyobj_set_validity_bit(b.validity, i)
__pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
05531: finally:
+05532: if release_view:
/*finally:*/ {
/*normal exit:*/{
if (__pyx_v_release_view) {
/* … */
}
goto __pyx_L19;
}
__pyx_L18_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_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:;
}
+05533: PyBuffer_Release(&view)
PyBuffer_Release((&__pyx_v_view)); /* … */ PyBuffer_Release((&__pyx_v_view)); /* … */ PyBuffer_Release((&__pyx_v_view));
05534:
+05535: if not b.has_nulls and b.validity != NULL:
__pyx_t_14 = (!__pyx_v_b->has_nulls);
if (__pyx_t_14) {
} else {
__pyx_t_1 = __pyx_t_14;
goto __pyx_L53_bool_binop_done;
}
__pyx_t_14 = (__pyx_v_b->validity != NULL);
__pyx_t_1 = __pyx_t_14;
__pyx_L53_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+05536: free(b.validity)
free(__pyx_v_b->validity);
+05537: b.validity = NULL
__pyx_v_b->validity = NULL;
+05538: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_fsb_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_23, &__pyx_t_25, &__pyx_t_26) < 0) __PYX_ERR(0, 5538, __pyx_L6_except_error)
__Pyx_XGOTREF(__pyx_t_23);
__Pyx_XGOTREF(__pyx_t_25);
__Pyx_XGOTREF(__pyx_t_26);
+05539: pyobj_built_free(b)
__pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+05540: 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, 5540, __pyx_L6_except_error) }
05541:
+05542: return b
{
__pyx_r = __pyx_v_b;
}
goto __pyx_L0;
05543:
05544:
+05545: cdef void_int _dataframe_columnar_prebuild_pyobj(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_prebuild_pyobj(PyObject *__pyx_v_df, struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan) {
size_t __pyx_v_i;
struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col;
int __pyx_v_any_pyobj;
PyObject *__pyx_v_col_name = NULL;
PyObject *__pyx_v_oe = NULL;
PyObject *__pyx_v_ue = NULL;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_XDECREF(__pyx_t_18);
__Pyx_XDECREF(__pyx_t_19);
__Pyx_XDECREF(__pyx_t_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;
}
05546: object df,
05547: dataframe_plan_t* plan) except -1:
05548: """
05549: Walk every PyObject-sourced column once and stash typed buffers on
05550: `plan.pyobj_built`. Runs after `validate_plan` and before the chunk
05551: emission loop in `QuestDB.dataframe()`.
05552: """
05553: cdef size_t i
05554: cdef col_t* col
+05555: cdef bint any_pyobj = False
__pyx_v_any_pyobj = 0;
05556:
+05557: for i in range(plan.col_count):
__pyx_t_1 = __pyx_v_plan->col_count;
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_i = __pyx_t_3;
+05558: col = &plan.cols.d[i]
__pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_i]));
+05559: if _is_pyobj_source(col.setup.source):
__pyx_t_4 = __pyx_f_7questdb_7_client__is_pyobj_source(__pyx_v_col->setup->source);
if (__pyx_t_4) {
/* … */
}
}
__pyx_L4_break:;
+05560: any_pyobj = True
__pyx_v_any_pyobj = 1;
+05561: break
goto __pyx_L4_break;
+05562: if not any_pyobj:
__pyx_t_4 = (!__pyx_v_any_pyobj);
if (__pyx_t_4) {
/* … */
}
+05563: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
05564:
+05565: plan.pyobj_built = <pyobj_built_t**>calloc(
__pyx_v_plan->pyobj_built = ((struct __pyx_t_7questdb_7_client_pyobj_built_t **)calloc(__pyx_v_plan->col_count, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t *))));
05566: plan.col_count, sizeof(pyobj_built_t*))
+05567: if plan.pyobj_built == NULL:
__pyx_t_4 = (__pyx_v_plan->pyobj_built == NULL);
if (unlikely(__pyx_t_4)) {
/* … */
}
+05568: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 5568, __pyx_L1_error)
05569:
+05570: for i in range(plan.col_count):
__pyx_t_1 = __pyx_v_plan->col_count;
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_i = __pyx_t_3;
+05571: col = &plan.cols.d[i]
__pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_i]));
+05572: if not _is_pyobj_source(col.setup.source):
__pyx_t_4 = (!__pyx_f_7questdb_7_client__is_pyobj_source(__pyx_v_col->setup->source));
if (__pyx_t_4) {
/* … */
}
+05573: continue
goto __pyx_L8_continue;
+05574: col_name = df.columns[col.setup.orig_index]
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5574, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_GetItemInt(__pyx_t_5, __pyx_v_col->setup->orig_index, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5574, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF_SET(__pyx_v_col_name, __pyx_t_6); __pyx_t_6 = 0;
+05575: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
goto __pyx_L18_try_end;
__pyx_L11_error:;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
__pyx_L13_except_error:;
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
goto __pyx_L1_error;
__pyx_L18_try_end:;
}
__pyx_L8_continue:;
}
+05576: if col.setup.source == col_source_t.col_source_str_pyobj:
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_str_pyobj:
/* … */
break;
case __pyx_e_7questdb_7_client_col_source_int_pyobj:
+05577: plan.pyobj_built[i] = _dataframe_columnar_build_str_pyobj(
__pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_str_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5577, __pyx_L11_error)
(__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
05578: col, plan.row_count, col_name)
+05579: elif col.setup.source == col_source_t.col_source_int_pyobj:
break;
case __pyx_e_7questdb_7_client_col_source_float_pyobj:
+05580: if (col.setup.has_override
if (__pyx_v_col->setup->has_override) {
} else {
__pyx_t_4 = __pyx_v_col->setup->has_override;
goto __pyx_L20_bool_binop_done;
}
/* … */
if (__pyx_t_4) {
/* … */
goto __pyx_L19;
}
05581: and col.setup.override_dtype
+05582: == qwp_numpy_dtype.qwp_numpy_s32):
__pyx_t_11 = (__pyx_v_col->setup->override_dtype == qwp_numpy_s32);
__pyx_t_4 = __pyx_t_11;
__pyx_L20_bool_binop_done:;
+05583: plan.pyobj_built[i] = \
(__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
+05584: _dataframe_columnar_build_long256_pyobj(
__pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_long256_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5584, __pyx_L11_error)
05585: col, plan.row_count, col_name)
05586: else:
+05587: plan.pyobj_built[i] = _dataframe_columnar_build_int_pyobj(
/*else*/ {
/* … */
__pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_int_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5587, __pyx_L11_error)
/* … */
(__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
}
__pyx_L19:;
05588: col, plan.row_count, col_name)
+05589: elif col.setup.source == col_source_t.col_source_float_pyobj:
break;
case __pyx_e_7questdb_7_client_col_source_bool_pyobj:
+05590: plan.pyobj_built[i] = _dataframe_columnar_build_float_pyobj(
__pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_float_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5590, __pyx_L11_error)
(__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
05591: col, plan.row_count, col_name)
+05592: elif col.setup.source == col_source_t.col_source_bool_pyobj:
break;
case __pyx_e_7questdb_7_client_col_source_uuid_pyobj:
+05593: plan.pyobj_built[i] = _dataframe_columnar_build_bool_pyobj(
__pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_bool_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5593, __pyx_L11_error)
(__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
05594: col, plan.row_count, col_name)
+05595: elif col.setup.source == col_source_t.col_source_uuid_pyobj:
break;
case __pyx_e_7questdb_7_client_col_source_ipv4_pyobj:
+05596: plan.pyobj_built[i] = _dataframe_columnar_build_uuid_pyobj(
__pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_uuid_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5596, __pyx_L11_error)
(__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
05597: col, plan.row_count, col_name)
+05598: elif col.setup.source == col_source_t.col_source_ipv4_pyobj:
break;
case __pyx_e_7questdb_7_client_col_source_datetime_pyobj:
+05599: plan.pyobj_built[i] = _dataframe_columnar_build_ipv4_pyobj(
__pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_ipv4_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5599, __pyx_L11_error)
(__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
05600: col, plan.row_count, col_name)
+05601: elif col.setup.source == col_source_t.col_source_datetime_pyobj:
break;
case __pyx_e_7questdb_7_client_col_source_bytes_pyobj:
+05602: plan.pyobj_built[i] = _dataframe_columnar_build_datetime_pyobj(
__pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_datetime_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5602, __pyx_L11_error)
(__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
05603: col, plan.row_count, col_name)
+05604: elif col.setup.source == col_source_t.col_source_bytes_pyobj:
break;
default: break;
}
+05605: if (col.setup.has_override
if (__pyx_v_col->setup->has_override) {
} else {
__pyx_t_4 = __pyx_v_col->setup->has_override;
goto __pyx_L23_bool_binop_done;
}
/* … */
if (__pyx_t_4) {
/* … */
goto __pyx_L22;
}
05606: and col.setup.override_dtype
+05607: == qwp_numpy_dtype.qwp_numpy_s16):
__pyx_t_11 = (__pyx_v_col->setup->override_dtype == qwp_numpy_s16);
__pyx_t_4 = __pyx_t_11;
__pyx_L23_bool_binop_done:;
+05608: plan.pyobj_built[i] = _dataframe_columnar_build_fsb_pyobj(
__pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_fsb_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name, 16, __pyx_mstate_global->__pyx_n_u_UUID); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5608, __pyx_L11_error)
(__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
05609: col, plan.row_count, col_name, 16, 'UUID')
+05610: elif (col.setup.has_override
if (__pyx_v_col->setup->has_override) {
} else {
__pyx_t_4 = __pyx_v_col->setup->has_override;
goto __pyx_L25_bool_binop_done;
}
/* … */
if (__pyx_t_4) {
/* … */
goto __pyx_L22;
}
05611: and col.setup.override_dtype
+05612: == qwp_numpy_dtype.qwp_numpy_s32):
__pyx_t_11 = (__pyx_v_col->setup->override_dtype == qwp_numpy_s32);
__pyx_t_4 = __pyx_t_11;
__pyx_L25_bool_binop_done:;
+05613: plan.pyobj_built[i] = _dataframe_columnar_build_fsb_pyobj(
__pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_fsb_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name, 32, __pyx_mstate_global->__pyx_n_u_LONG256); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5613, __pyx_L11_error)
(__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
05614: col, plan.row_count, col_name, 32, 'LONG256')
05615: else:
+05616: plan.pyobj_built[i] = \
(__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
}
__pyx_L22:;
+05617: _dataframe_columnar_build_bytes_pyobj(
/*else*/ {
/* … */
__pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_bytes_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5617, __pyx_L11_error)
05618: col, plan.row_count, col_name)
+05619: except OverflowError as oe:
__pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_OverflowError)))); if (__pyx_t_12) { __Pyx_AddTraceback("questdb._client._dataframe_columnar_prebuild_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_13) < 0) __PYX_ERR(0, 5619, __pyx_L13_except_error) __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_5); __Pyx_XGOTREF(__pyx_t_13); __Pyx_INCREF(__pyx_t_5); __pyx_v_oe = __pyx_t_5; /*try:*/ { /* … */ /*finally:*/ { __pyx_L32_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_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; } } }
+05620: raise QuestDBError(
__pyx_t_15 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5620, __pyx_L32_error)
__Pyx_GOTREF(__pyx_t_16);
+05621: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5621, __pyx_L32_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5621, __pyx_L32_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+05622: f'Bad column {col_name!r}: {oe}') from oe
__pyx_t_17 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5622, __pyx_L32_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_19 = __Pyx_PyObject_FormatSimple(__pyx_v_oe, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5622, __pyx_L32_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_20[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_20[1] = __pyx_t_17; __pyx_t_20[2] = __pyx_mstate_global->__pyx_kp_u__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, 5622, __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, 5620, __pyx_L32_error) __Pyx_GOTREF(__pyx_t_14); } __Pyx_Raise(__pyx_t_14, 0, 0, __pyx_v_oe); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __PYX_ERR(0, 5620, __pyx_L32_error) }
+05623: except UnicodeEncodeError as ue:
__pyx_t_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, 5623, __pyx_L13_except_error) __Pyx_XGOTREF(__pyx_t_13); __Pyx_XGOTREF(__pyx_t_5); __Pyx_XGOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_t_5); __pyx_v_ue = __pyx_t_5; /*try:*/ { /* … */ /*finally:*/ { __pyx_L43_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_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;
+05624: 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, 5624, __pyx_L43_error)
__Pyx_GOTREF(__pyx_t_22);
+05625: QuestDBErrorCode.InvalidUtf8,
__Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5625, __pyx_L43_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_InvalidUtf8); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5625, __pyx_L43_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+05626: f'Bad column {col_name!r}: {ue}') from ue
__pyx_t_18 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5626, __pyx_L43_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_19 = __Pyx_PyObject_FormatSimple(__pyx_v_ue, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5626, __pyx_L43_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_20[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_20[1] = __pyx_t_18; __pyx_t_20[2] = __pyx_mstate_global->__pyx_kp_u__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, 5626, __pyx_L43_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __pyx_t_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, 5624, __pyx_L43_error) __Pyx_GOTREF(__pyx_t_14); } __Pyx_Raise(__pyx_t_14, 0, 0, __pyx_v_ue); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __PYX_ERR(0, 5624, __pyx_L43_error) }
05627:
05628:
+05629: cdef void_int _dataframe_columnar_append_pyobj_str(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_str(struct qwp_chunk *__pyx_v_chunk, struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_prebuilt, size_t __pyx_v_row_offset, size_t __pyx_v_row_count) {
struct line_sender_error *__pyx_v_err;
struct qwp_validity __pyx_v_validity;
struct qwp_validity const *__pyx_v_validity_ptr;
int __pyx_v_ok;
int32_t *__pyx_v_offsets;
size_t __pyx_v_bytes_len;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_append_pyobj_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
05630: qwp_chunk* chunk,
05631: col_t* col,
05632: pyobj_built_t* prebuilt,
05633: size_t row_offset,
05634: size_t row_count) except -1:
+05635: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
05636: cdef qwp_validity validity
+05637: cdef const qwp_validity* validity_ptr = NULL
__pyx_v_validity_ptr = NULL;
+05638: cdef bint ok = False
__pyx_v_ok = 0;
05639: cdef int32_t* offsets
05640: cdef size_t bytes_len
05641:
+05642: if prebuilt == NULL:
__pyx_t_1 = (__pyx_v_prebuilt == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05643: raise RuntimeError(
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_PyObject_str_column_missing_pre};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5643, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 5643, __pyx_L1_error)
05644: 'PyObject str column missing pre-built buffer; '
05645: 'prebuild phase did not run.')
+05646: if prebuilt.has_nulls:
if (__pyx_v_prebuilt->has_nulls) {
/* … */
}
+05647: if row_offset % 8 != 0:
__pyx_t_1 = ((__pyx_v_row_offset % 8) != 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05648: raise RuntimeError(
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_PyObject_str_column_with_nulls_r};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5648, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 5648, __pyx_L1_error)
05649: 'PyObject str column with nulls requires byte-aligned '
05650: 'chunk boundaries.')
+05651: validity.bits = prebuilt.validity + (row_offset // 8)
__pyx_v_validity.bits = (__pyx_v_prebuilt->validity + (__pyx_v_row_offset / 8));
+05652: validity.bit_len = row_count
__pyx_v_validity.bit_len = __pyx_v_row_count;
+05653: validity_ptr = &validity
__pyx_v_validity_ptr = (&__pyx_v_validity);
+05654: offsets = prebuilt.str_offsets + row_offset
__pyx_v_offsets = (__pyx_v_prebuilt->str_offsets + __pyx_v_row_offset);
+05655: bytes_len = prebuilt.str_bytes_len
__pyx_t_4 = __pyx_v_prebuilt->str_bytes_len; __pyx_v_bytes_len = __pyx_t_4;
+05656: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L8;
}
__pyx_L8:;
}
}
+05657: ok = qwp_chunk_column_str(
__pyx_v_ok = qwp_chunk_column_str(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, __pyx_v_offsets, __pyx_v_prebuilt->str_bytes, __pyx_v_bytes_len, __pyx_v_row_count, __pyx_v_validity_ptr, (&__pyx_v_err));
}
05658: chunk,
05659: col.name.buf,
05660: col.name.len,
05661: offsets,
05662: prebuilt.str_bytes,
05663: bytes_len,
05664: row_count,
05665: validity_ptr,
05666: &err)
+05667: if not ok:
__pyx_t_1 = (!__pyx_v_ok);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05668: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5668, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 5668, __pyx_L1_error)
05669:
05670:
+05671: cdef void_int _dataframe_columnar_append_pyobj_simple(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_simple(struct qwp_chunk *__pyx_v_chunk, struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_prebuilt, size_t __pyx_v_row_offset, size_t __pyx_v_row_count, size_t __pyx_v_elem_size, enum qwp_numpy_dtype __pyx_v_dtype) {
struct line_sender_error *__pyx_v_err;
struct qwp_validity __pyx_v_validity;
struct qwp_validity const *__pyx_v_validity_ptr;
int __pyx_v_ok;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_append_pyobj_simple", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
05672: qwp_chunk* chunk,
05673: col_t* col,
05674: pyobj_built_t* prebuilt,
05675: size_t row_offset,
05676: size_t row_count,
05677: size_t elem_size,
05678: qwp_numpy_dtype dtype) except -1:
+05679: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
05680: cdef qwp_validity validity
+05681: cdef const qwp_validity* validity_ptr = NULL
__pyx_v_validity_ptr = NULL;
+05682: cdef bint ok = False
__pyx_v_ok = 0;
05683:
+05684: if prebuilt == NULL:
__pyx_t_1 = (__pyx_v_prebuilt == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05685: raise RuntimeError('PyObject column missing pre-built buffer.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_PyObject_column_missing_pre_buil};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5685, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 5685, __pyx_L1_error)
+05686: if prebuilt.has_nulls:
if (__pyx_v_prebuilt->has_nulls) {
/* … */
}
+05687: if row_offset % 8 != 0:
__pyx_t_1 = ((__pyx_v_row_offset % 8) != 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05688: raise RuntimeError(
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_PyObject_column_with_nulls_requi};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5688, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 5688, __pyx_L1_error)
05689: 'PyObject column with nulls requires byte-aligned '
05690: 'chunk boundaries.')
+05691: validity.bits = prebuilt.validity + (row_offset // 8)
__pyx_v_validity.bits = (__pyx_v_prebuilt->validity + (__pyx_v_row_offset / 8));
+05692: validity.bit_len = row_count
__pyx_v_validity.bit_len = __pyx_v_row_count;
+05693: validity_ptr = &validity
__pyx_v_validity_ptr = (&__pyx_v_validity);
+05694: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L8;
}
__pyx_L8:;
}
}
+05695: ok = qwp_chunk_append_numpy_column(
__pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, __pyx_v_dtype, (((uint8_t const *)__pyx_v_prebuilt->data) + (__pyx_v_row_offset * __pyx_v_elem_size)), (__pyx_v_row_count * __pyx_v_elem_size), __pyx_v_row_count, __pyx_v_validity_ptr, NULL, (&__pyx_v_err));
}
05696: chunk,
05697: col.name.buf,
05698: col.name.len,
05699: dtype,
05700: (<const uint8_t*>prebuilt.data) + row_offset * elem_size,
05701: row_count * elem_size,
05702: row_count,
05703: validity_ptr,
05704: NULL,
05705: &err)
+05706: if not ok:
__pyx_t_1 = (!__pyx_v_ok);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05707: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5707, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 5707, __pyx_L1_error)
05708:
05709:
+05710: cdef void_int _dataframe_columnar_append_pyobj_bytes(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_bytes(struct qwp_chunk *__pyx_v_chunk, struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_prebuilt, size_t __pyx_v_row_offset, size_t __pyx_v_row_count) {
struct line_sender_error *__pyx_v_err;
struct qwp_validity __pyx_v_validity;
struct qwp_validity const *__pyx_v_validity_ptr;
int __pyx_v_ok;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_append_pyobj_bytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
05711: qwp_chunk* chunk,
05712: col_t* col,
05713: pyobj_built_t* prebuilt,
05714: size_t row_offset,
05715: size_t row_count) except -1:
+05716: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
05717: cdef qwp_validity validity
+05718: cdef const qwp_validity* validity_ptr = NULL
__pyx_v_validity_ptr = NULL;
+05719: cdef bint ok = False
__pyx_v_ok = 0;
05720:
+05721: if prebuilt == NULL:
__pyx_t_1 = (__pyx_v_prebuilt == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05722: raise RuntimeError('PyObject bytes column missing pre-built buffer.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_PyObject_bytes_column_missing_pr};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5722, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 5722, __pyx_L1_error)
+05723: if prebuilt.has_nulls:
if (__pyx_v_prebuilt->has_nulls) {
/* … */
}
+05724: if row_offset % 8 != 0:
__pyx_t_1 = ((__pyx_v_row_offset % 8) != 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05725: raise RuntimeError(
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_PyObject_bytes_column_with_nulls};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5725, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 5725, __pyx_L1_error)
05726: 'PyObject bytes column with nulls requires byte-aligned '
05727: 'chunk boundaries.')
+05728: validity.bits = prebuilt.validity + (row_offset // 8)
__pyx_v_validity.bits = (__pyx_v_prebuilt->validity + (__pyx_v_row_offset / 8));
+05729: validity.bit_len = row_count
__pyx_v_validity.bit_len = __pyx_v_row_count;
+05730: validity_ptr = &validity
__pyx_v_validity_ptr = (&__pyx_v_validity);
+05731: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L8;
}
__pyx_L8:;
}
}
+05732: ok = qwp_chunk_column_binary(
__pyx_v_ok = qwp_chunk_column_binary(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, (__pyx_v_prebuilt->str_offsets + __pyx_v_row_offset), __pyx_v_prebuilt->str_bytes, __pyx_v_prebuilt->str_bytes_len, __pyx_v_row_count, __pyx_v_validity_ptr, (&__pyx_v_err));
}
05733: chunk,
05734: col.name.buf,
05735: col.name.len,
05736: prebuilt.str_offsets + row_offset,
05737: prebuilt.str_bytes,
05738: prebuilt.str_bytes_len,
05739: row_count,
05740: validity_ptr,
05741: &err)
+05742: if not ok:
__pyx_t_1 = (!__pyx_v_ok);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05743: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5743, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 5743, __pyx_L1_error)
05744:
05745:
+05746: cdef void_int _dataframe_columnar_call_arrow_append(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(struct qwp_chunk *__pyx_v_chunk, struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_offset, size_t __pyx_v_row_count, struct __pyx_opt_args_7questdb_7_client__dataframe_columnar_call_arrow_append *__pyx_optional_args) {
enum qwp_symbol_mode __pyx_v_symbol_mode = __pyx_mstate_global->__pyx_k__32;
struct line_sender_error *__pyx_v_err;
int __pyx_v_ok;
struct qwp_arrow_import *__pyx_v_imported;
__pyx_t_7questdb_7_client_void_int __pyx_r;
if (__pyx_optional_args) {
if (__pyx_optional_args->__pyx_n > 0) {
__pyx_v_symbol_mode = __pyx_optional_args->symbol_mode;
}
}
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_call_arrow_append", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
struct __pyx_opt_args_7questdb_7_client__dataframe_columnar_call_arrow_append {
int __pyx_n;
enum qwp_symbol_mode symbol_mode;
};
05747: qwp_chunk* chunk,
05748: col_t* col,
05749: size_t row_offset,
05750: size_t row_count,
05751: qwp_symbol_mode symbol_mode
+05752: =qwp_symbol_mode_auto) except -1:
__pyx_mstate_global->__pyx_k__32 = qwp_symbol_mode_auto;
+05753: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+05754: cdef bint ok = False
__pyx_v_ok = 0;
+05755: cdef qwp_arrow_import* imported = col.setup.arrow_import
__pyx_t_1 = __pyx_v_col->setup->arrow_import; __pyx_v_imported = __pyx_t_1;
+05756: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L5;
}
__pyx_L5:;
}
}
+05757: if imported == NULL:
__pyx_t_2 = (__pyx_v_imported == NULL);
if (__pyx_t_2) {
/* … */
}
+05758: imported = qwp_arrow_import_new(
__pyx_v_imported = qwp_arrow_import_new((&(__pyx_v_col->setup->chunks.chunks[0])), (&__pyx_v_col->setup->arrow_schema), __pyx_v_symbol_mode, (&__pyx_v_err));
05759: &col.setup.chunks.chunks[0],
05760: &col.setup.arrow_schema,
05761: symbol_mode,
05762: &err)
+05763: if imported != NULL:
__pyx_t_2 = (__pyx_v_imported != NULL);
if (__pyx_t_2) {
/* … */
}
}
+05764: ok = qwp_chunk_append_arrow_import(
__pyx_v_ok = qwp_chunk_append_arrow_import(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, __pyx_v_imported, __pyx_v_row_offset, __pyx_v_row_count, (&__pyx_v_err));
05765: chunk,
05766: col.name.buf,
05767: col.name.len,
05768: imported,
05769: row_offset,
05770: row_count,
05771: &err)
+05772: col.setup.arrow_import = imported
__pyx_v_col->setup->arrow_import = __pyx_v_imported;
+05773: if not ok:
__pyx_t_2 = (!__pyx_v_ok);
if (unlikely(__pyx_t_2)) {
/* … */
}
+05774: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5774, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 5774, __pyx_L1_error)
+05775: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
05776:
05777:
+05778: cdef str _columnar_col_name(const col_t* col):
static PyObject *__pyx_f_7questdb_7_client__columnar_col_name(struct __pyx_t_7questdb_7_client_col_t const *__pyx_v_col) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client._columnar_col_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
05779: """A planned column's name as text, for a message naming it."""
+05780: if col.name.buf == NULL:
__pyx_t_1 = (__pyx_v_col->name.buf == NULL);
if (__pyx_t_1) {
/* … */
}
+05781: return '?'
{
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;
+05782: 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, 5782, __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;
05783: col.name.buf, <Py_ssize_t>col.name.len)
05784:
05785:
+05786: cdef void_int _dataframe_columnar_append_field(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_append_field(struct qwp_chunk *__pyx_v_chunk, struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_prebuilt, size_t __pyx_v_row_offset, size_t __pyx_v_row_count) {
struct line_sender_error *__pyx_v_err;
struct ArrowArray *__pyx_v_arr;
void const *__pyx_v_data;
struct qwp_validity __pyx_v_validity;
struct qwp_validity const *__pyx_v_validity_ptr;
int __pyx_v_ok;
enum qwp_numpy_dtype __pyx_v_numpy_dtype;
size_t __pyx_v_element_size;
struct qwp_numpy_extras __pyx_v_extras;
struct qwp_numpy_extras const *__pyx_v_extras_ptr;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_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;
}
05787: qwp_chunk* chunk,
05788: col_t* col,
05789: pyobj_built_t* prebuilt,
05790: size_t row_offset,
05791: size_t row_count) except -1:
+05792: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+05793: cdef ArrowArray* arr = &col.setup.chunks.chunks[0]
__pyx_v_arr = (&(__pyx_v_col->setup->chunks.chunks[0]));
05794: cdef ArrowArray* dictionary
+05795: cdef const void* data = NULL
__pyx_v_data = NULL;
05796: cdef int32_t* offsets
05797: cdef int32_t* dict_offsets
05798: cdef size_t bytes_len
05799: cdef size_t dict_offsets_len
05800: cdef size_t dict_bytes_len
05801: cdef qwp_validity validity
+05802: cdef const qwp_validity* validity_ptr = NULL
__pyx_v_validity_ptr = NULL;
+05803: cdef bint ok = False
__pyx_v_ok = 0;
05804:
05805: cdef qwp_numpy_dtype numpy_dtype
05806: cdef size_t element_size
05807: cdef qwp_numpy_extras extras
05808: cdef const qwp_numpy_extras* extras_ptr
05809:
05810: # Generic Arrow passthrough owns its complete layout: the native importer
05811: # validates and reads the parent buffers and child tree. In particular, a
05812: # FixedSizeList legitimately has no buffers[1]. Dispatch it before any
05813: # direct-encoder validity or value-buffer read on this side.
+05814: if col.setup.target == col_target_t.col_target_column_arrow:
__pyx_t_1 = (__pyx_v_col->setup->target == __pyx_e_7questdb_7_client_col_target_column_arrow);
if (__pyx_t_1) {
/* … */
}
+05815: _dataframe_columnar_call_arrow_append(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(__pyx_v_chunk, __pyx_v_col, __pyx_v_row_offset, __pyx_v_row_count, NULL); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 5815, __pyx_L1_error)
05816: chunk, col, row_offset, row_count)
+05817: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
05818:
05819: # pyarrow allocates exactly `n_buffers` pointers, so reading the
05820: # value buffer of a column that has fewer reads past the
05821: # allocation. The planner turns such a column away, and saying so
05822: # here keeps that a property of this read rather than of the checks
05823: # upstream of it.
+05824: if arr.buffers == NULL or arr.n_buffers < 2:
__pyx_t_3 = (__pyx_v_arr->buffers == NULL);
if (!__pyx_t_3) {
} else {
__pyx_t_1 = __pyx_t_3;
goto __pyx_L5_bool_binop_done;
}
__pyx_t_3 = (__pyx_v_arr->n_buffers < 2);
__pyx_t_1 = __pyx_t_3;
__pyx_L5_bool_binop_done:;
if (unlikely(__pyx_t_1)) {
/* … */
}
+05825: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5825, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
+05826: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5826, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5826, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+05827: f'Bad column {_columnar_col_name(col)!r}: it arrived '
__pyx_t_7 = __pyx_f_7questdb_7_client__columnar_col_name(__pyx_v_col); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5827, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_9 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_t_7), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5827, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* … */ __pyx_t_11 = 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, 5827, __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, 5825, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 5825, __pyx_L1_error)
+05828: f'with {arr.n_buffers} Arrow buffers, too few to read '
__pyx_t_7 = __Pyx_PyUnicode_From_int64_t(__pyx_v_arr->n_buffers, 0, ' ', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5828, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_10[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_10[1] = __pyx_t_9; __pyx_t_10[2] = __pyx_mstate_global->__pyx_kp_u_it_arrived_with; __pyx_t_10[3] = __pyx_t_7; __pyx_t_10[4] = __pyx_mstate_global->__pyx_kp_u_Arrow_buffers_too_few_to_read_v;
05829: f'values from.')
+05830: data = arr.buffers[1]
__pyx_v_data = (__pyx_v_arr->buffers[1]);
+05831: validity_ptr = _dataframe_columnar_validity(
__pyx_t_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, 5831, __pyx_L1_error) __pyx_v_validity_ptr = __pyx_t_15;
05832: arr, row_offset, row_count, &validity)
05833:
+05834: if col.setup.target == col_target_t.col_target_column_bool:
switch (__pyx_v_col->setup->target) {
case __pyx_e_7questdb_7_client_col_target_column_bool:
/* … */
break;
case __pyx_e_7questdb_7_client_col_target_column_i64:
+05835: if col.setup.source == col_source_t.col_source_bool_pyobj:
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_bool_pyobj:
/* … */
break;
case __pyx_e_7questdb_7_client_col_source_bool_numpy:
+05836: if prebuilt == NULL:
__pyx_t_1 = (__pyx_v_prebuilt == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05837: raise RuntimeError(
__pyx_t_6 = NULL;
__pyx_t_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, 5837, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 5837, __pyx_L1_error)
05838: 'PyObject bool column missing pre-built bitmap.')
+05839: if row_offset % 8 != 0:
__pyx_t_1 = ((__pyx_v_row_offset % 8) != 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05840: raise RuntimeError(
__pyx_t_6 = NULL;
__pyx_t_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, 5840, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 5840, __pyx_L1_error)
05841: 'PyObject bool column requires byte-aligned chunk boundaries.')
+05842: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L11;
}
__pyx_L11:;
}
}
+05843: ok = qwp_chunk_column_bool(
__pyx_v_ok = qwp_chunk_column_bool(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, (((uint8_t const *)__pyx_v_prebuilt->data) + (__pyx_v_row_offset / 8)), __pyx_v_row_count, NULL, (&__pyx_v_err));
}
05844: chunk,
05845: col.name.buf,
05846: col.name.len,
05847: (<const uint8_t*>prebuilt.data) + (row_offset // 8),
05848: row_count,
05849: NULL,
05850: &err)
+05851: elif col.setup.source == col_source_t.col_source_bool_numpy:
break;
default:
05852: # NumPy bool is byte-per-row; Rust packs to LSB-bitmap
05853: # inside qwp_chunk_append_numpy_column.
+05854: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L14;
}
__pyx_L14:;
}
}
+05855: ok = qwp_chunk_append_numpy_column(
__pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, qwp_numpy_bool, (((uint8_t const *)__pyx_v_data) + __pyx_v_row_offset), __pyx_v_row_count, __pyx_v_row_count, __pyx_v_validity_ptr, NULL, (&__pyx_v_err));
}
05856: chunk,
05857: col.name.buf,
05858: col.name.len,
05859: qwp_numpy_dtype.qwp_numpy_bool,
05860: (<const uint8_t*>data) + row_offset,
05861: row_count,
05862: row_count,
05863: validity_ptr,
05864: NULL,
05865: &err)
05866: else:
+05867: raise RuntimeError('Unsupported columnar bool source.')
__pyx_t_6 = NULL;
__pyx_t_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, 5867, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 5867, __pyx_L1_error)
break;
}
+05868: elif col.setup.target == col_target_t.col_target_column_i64:
break;
case __pyx_e_7questdb_7_client_col_target_column_f64:
+05869: if col.setup.source == col_source_t.col_source_int_pyobj:
__pyx_t_1 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_int_pyobj);
if (__pyx_t_1) {
/* … */
goto __pyx_L15;
}
+05870: if prebuilt == NULL:
__pyx_t_1 = (__pyx_v_prebuilt == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05871: raise RuntimeError(
__pyx_t_6 = NULL;
__pyx_t_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, 5871, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 5871, __pyx_L1_error)
05872: 'PyObject int column missing pre-built buffer.')
+05873: if prebuilt.has_nulls and row_offset % 8 != 0:
if (__pyx_v_prebuilt->has_nulls) {
} else {
__pyx_t_1 = __pyx_v_prebuilt->has_nulls;
goto __pyx_L18_bool_binop_done;
}
__pyx_t_3 = ((__pyx_v_row_offset % 8) != 0);
__pyx_t_1 = __pyx_t_3;
__pyx_L18_bool_binop_done:;
if (unlikely(__pyx_t_1)) {
/* … */
}
+05874: raise RuntimeError(
__pyx_t_6 = NULL;
__pyx_t_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, 5874, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 5874, __pyx_L1_error)
05875: 'PyObject int column with nulls requires byte-aligned '
05876: 'chunk boundaries.')
+05877: if prebuilt.has_nulls:
if (__pyx_v_prebuilt->has_nulls) {
/* … */
goto __pyx_L20;
}
+05878: validity.bits = prebuilt.validity + (row_offset // 8)
__pyx_v_validity.bits = (__pyx_v_prebuilt->validity + (__pyx_v_row_offset / 8));
+05879: validity.bit_len = row_count
__pyx_v_validity.bit_len = __pyx_v_row_count;
+05880: validity_ptr = &validity
__pyx_v_validity_ptr = (&__pyx_v_validity);
05881: else:
+05882: validity_ptr = NULL
/*else*/ {
__pyx_v_validity_ptr = NULL;
}
__pyx_L20:;
05883: # A round-trip claim decides the slot width the prebuild
05884: # wrote: IPV4 and CHAR narrow it, `long256` widens it to 32
05885: # raw bytes, and GEOHASH keeps the int64 slot and carries
05886: # its precision in `extras`. Without a claim the column is
05887: # an int64 LONG.
+05888: numpy_dtype = qwp_numpy_dtype.qwp_numpy_i64
__pyx_v_numpy_dtype = qwp_numpy_i64;
+05889: element_size = 8
__pyx_v_element_size = 8;
+05890: extras_ptr = NULL
__pyx_v_extras_ptr = NULL;
+05891: if col.setup.has_override:
if (__pyx_v_col->setup->has_override) {
/* … */
}
+05892: numpy_dtype = col.setup.override_dtype
__pyx_t_16 = __pyx_v_col->setup->override_dtype;
__pyx_v_numpy_dtype = __pyx_t_16;
+05893: if numpy_dtype == qwp_numpy_dtype.qwp_numpy_u32_ipv4:
switch (__pyx_v_numpy_dtype) {
case qwp_numpy_u32_ipv4:
/* … */
break;
case qwp_numpy_u16_char:
+05894: element_size = 4
__pyx_v_element_size = 4;
+05895: elif numpy_dtype == qwp_numpy_dtype.qwp_numpy_u16_char:
break;
case qwp_numpy_s32:
+05896: element_size = 2
__pyx_v_element_size = 2;
+05897: elif numpy_dtype == qwp_numpy_dtype.qwp_numpy_s32:
break;
case qwp_numpy_geohash_i64:
+05898: element_size = 32
__pyx_v_element_size = 32;
+05899: elif numpy_dtype == qwp_numpy_dtype.qwp_numpy_geohash_i64:
break;
default: break;
}
+05900: memset(&extras, 0, sizeof(qwp_numpy_extras))
(void)(memset((&__pyx_v_extras), 0, (sizeof(struct qwp_numpy_extras))));
+05901: extras.geohash_bits = col.setup.override_geohash_bits
__pyx_t_17 = __pyx_v_col->setup->override_geohash_bits;
__pyx_v_extras.geohash_bits = __pyx_t_17;
+05902: extras_ptr = &extras
__pyx_v_extras_ptr = (&__pyx_v_extras);
+05903: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L24;
}
__pyx_L24:;
}
}
+05904: ok = qwp_chunk_append_numpy_column(
__pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, __pyx_v_numpy_dtype, (((uint8_t const *)__pyx_v_prebuilt->data) + (__pyx_v_row_offset * __pyx_v_element_size)), (__pyx_v_row_count * __pyx_v_element_size), __pyx_v_row_count, __pyx_v_validity_ptr, __pyx_v_extras_ptr, (&__pyx_v_err));
}
05905: chunk,
05906: col.name.buf,
05907: col.name.len,
05908: numpy_dtype,
05909: (<const uint8_t*>prebuilt.data) + row_offset * element_size,
05910: row_count * element_size,
05911: row_count,
05912: validity_ptr,
05913: extras_ptr,
05914: &err)
05915: else:
05916: # Rust widens narrow ints to a sentinel-safe wire (i8/i16 → INT,
05917: # i32/u32/u64 → LONG); see questdb-rs NumpyDtype::*WidenTo*.
+05918: if col.setup.source in (
/*else*/ {
/* … */
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_i64_numpy:
/* … */
break;
case __pyx_e_7questdb_7_client_col_source_i8_numpy:
+05919: col_source_t.col_source_i64_numpy,
case __pyx_e_7questdb_7_client_col_source_i64_arrow:
05920: col_source_t.col_source_i64_arrow):
+05921: numpy_dtype = qwp_numpy_dtype.qwp_numpy_i64
__pyx_v_numpy_dtype = qwp_numpy_i64;
+05922: element_size = 8
__pyx_v_element_size = 8;
+05923: elif col.setup.source == col_source_t.col_source_i8_numpy:
break;
case __pyx_e_7questdb_7_client_col_source_i16_numpy:
+05924: numpy_dtype = qwp_numpy_dtype.qwp_numpy_i8
__pyx_v_numpy_dtype = qwp_numpy_i8;
+05925: element_size = 1
__pyx_v_element_size = 1;
+05926: elif col.setup.source == col_source_t.col_source_i16_numpy:
break;
case __pyx_e_7questdb_7_client_col_source_i32_numpy:
+05927: numpy_dtype = qwp_numpy_dtype.qwp_numpy_i16
__pyx_v_numpy_dtype = qwp_numpy_i16;
+05928: element_size = 2
__pyx_v_element_size = 2;
+05929: elif col.setup.source == col_source_t.col_source_i32_numpy:
break;
case __pyx_e_7questdb_7_client_col_source_u8_numpy:
+05930: numpy_dtype = qwp_numpy_dtype.qwp_numpy_i32
__pyx_v_numpy_dtype = qwp_numpy_i32;
+05931: element_size = 4
__pyx_v_element_size = 4;
+05932: elif col.setup.source == col_source_t.col_source_u8_numpy:
break;
case __pyx_e_7questdb_7_client_col_source_u16_numpy:
+05933: numpy_dtype = qwp_numpy_dtype.qwp_numpy_u8
__pyx_v_numpy_dtype = qwp_numpy_u8;
+05934: element_size = 1
__pyx_v_element_size = 1;
+05935: elif col.setup.source == col_source_t.col_source_u16_numpy:
break;
case __pyx_e_7questdb_7_client_col_source_u32_numpy:
+05936: numpy_dtype = qwp_numpy_dtype.qwp_numpy_u16
__pyx_v_numpy_dtype = qwp_numpy_u16;
+05937: element_size = 2
__pyx_v_element_size = 2;
+05938: elif col.setup.source in (
break;
case __pyx_e_7questdb_7_client_col_source_u64_numpy:
+05939: col_source_t.col_source_u32_numpy,
case __pyx_e_7questdb_7_client_col_source_u32_arrow:
05940: col_source_t.col_source_u32_arrow):
+05941: numpy_dtype = qwp_numpy_dtype.qwp_numpy_u32
__pyx_v_numpy_dtype = qwp_numpy_u32;
+05942: element_size = 4
__pyx_v_element_size = 4;
+05943: elif col.setup.source == col_source_t.col_source_u64_numpy:
break;
default:
+05944: numpy_dtype = qwp_numpy_dtype.qwp_numpy_u64
__pyx_v_numpy_dtype = qwp_numpy_u64;
+05945: element_size = 8
__pyx_v_element_size = 8;
05946: else:
+05947: raise RuntimeError('Unsupported columnar int source.')
__pyx_t_6 = NULL;
__pyx_t_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, 5947, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 5947, __pyx_L1_error)
break;
}
+05948: extras_ptr = NULL
__pyx_v_extras_ptr = NULL;
+05949: if col.setup.has_override:
if (__pyx_v_col->setup->has_override) {
/* … */
}
+05950: numpy_dtype = col.setup.override_dtype
__pyx_t_16 = __pyx_v_col->setup->override_dtype;
__pyx_v_numpy_dtype = __pyx_t_16;
+05951: if (numpy_dtype
switch (__pyx_v_numpy_dtype) {
case qwp_numpy_geohash_i8:
/* … */
break;
default: break;
}
+05952: == qwp_numpy_dtype.qwp_numpy_geohash_i8
case qwp_numpy_geohash_i16:
05953: or numpy_dtype
+05954: == qwp_numpy_dtype.qwp_numpy_geohash_i16
case qwp_numpy_geohash_i32:
05955: or numpy_dtype
+05956: == qwp_numpy_dtype.qwp_numpy_geohash_i32
case qwp_numpy_geohash_i64:
05957: or numpy_dtype
05958: == qwp_numpy_dtype.qwp_numpy_geohash_i64):
+05959: memset(&extras, 0, sizeof(qwp_numpy_extras))
(void)(memset((&__pyx_v_extras), 0, (sizeof(struct qwp_numpy_extras))));
+05960: extras.geohash_bits = col.setup.override_geohash_bits
__pyx_t_17 = __pyx_v_col->setup->override_geohash_bits;
__pyx_v_extras.geohash_bits = __pyx_t_17;
+05961: extras_ptr = &extras
__pyx_v_extras_ptr = (&__pyx_v_extras);
+05962: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L28;
}
__pyx_L28:;
}
}
}
__pyx_L15:;
+05963: ok = qwp_chunk_append_numpy_column(
__pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, __pyx_v_numpy_dtype, (((uint8_t const *)__pyx_v_data) + (__pyx_v_row_offset * __pyx_v_element_size)), (__pyx_v_row_count * __pyx_v_element_size), __pyx_v_row_count, __pyx_v_validity_ptr, __pyx_v_extras_ptr, (&__pyx_v_err));
}
05964: chunk,
05965: col.name.buf,
05966: col.name.len,
05967: numpy_dtype,
05968: (<const uint8_t*>data) + row_offset * element_size,
05969: row_count * element_size,
05970: row_count,
05971: validity_ptr,
05972: extras_ptr,
05973: &err)
+05974: elif col.setup.target == col_target_t.col_target_column_f64:
break;
case __pyx_e_7questdb_7_client_col_target_column_ts:
+05975: if col.setup.source in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_f64_numpy:
/* … */
break;
case __pyx_e_7questdb_7_client_col_source_f32_numpy:
+05976: col_source_t.col_source_f64_numpy,
case __pyx_e_7questdb_7_client_col_source_f64_arrow:
05977: col_source_t.col_source_f64_arrow):
+05978: numpy_dtype = qwp_numpy_dtype.qwp_numpy_f64
__pyx_v_numpy_dtype = qwp_numpy_f64;
+05979: element_size = 8
__pyx_v_element_size = 8;
+05980: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L31;
}
__pyx_L31:;
}
}
+05981: ok = qwp_chunk_append_numpy_column(
__pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, __pyx_v_numpy_dtype, (((uint8_t const *)__pyx_v_data) + (__pyx_v_row_offset * __pyx_v_element_size)), (__pyx_v_row_count * __pyx_v_element_size), __pyx_v_row_count, __pyx_v_validity_ptr, NULL, (&__pyx_v_err));
}
05982: chunk,
05983: col.name.buf,
05984: col.name.len,
05985: numpy_dtype,
05986: (<const uint8_t*>data) + row_offset * element_size,
05987: row_count * element_size,
05988: row_count,
05989: validity_ptr,
05990: NULL,
05991: &err)
+05992: elif col.setup.source == col_source_t.col_source_f32_numpy:
break;
case __pyx_e_7questdb_7_client_col_source_float_pyobj:
05993: # numpy f32 maps directly to a FLOAT column on the wire; the
05994: # source stride is 4 bytes per row.
+05995: numpy_dtype = qwp_numpy_dtype.qwp_numpy_f32
__pyx_v_numpy_dtype = qwp_numpy_f32;
+05996: element_size = 4
__pyx_v_element_size = 4;
+05997: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L34;
}
__pyx_L34:;
}
}
+05998: ok = qwp_chunk_append_numpy_column(
__pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, __pyx_v_numpy_dtype, (((uint8_t const *)__pyx_v_data) + (__pyx_v_row_offset * __pyx_v_element_size)), (__pyx_v_row_count * __pyx_v_element_size), __pyx_v_row_count, __pyx_v_validity_ptr, NULL, (&__pyx_v_err));
}
05999: chunk,
06000: col.name.buf,
06001: col.name.len,
06002: numpy_dtype,
06003: (<const uint8_t*>data) + row_offset * element_size,
06004: row_count * element_size,
06005: row_count,
06006: validity_ptr,
06007: NULL,
06008: &err)
+06009: elif col.setup.source == col_source_t.col_source_float_pyobj:
break;
default:
+06010: if prebuilt == NULL:
__pyx_t_1 = (__pyx_v_prebuilt == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+06011: raise RuntimeError(
__pyx_t_6 = NULL;
__pyx_t_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, 6011, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 6011, __pyx_L1_error)
06012: 'PyObject float column missing pre-built buffer.')
+06013: if prebuilt.has_nulls and row_offset % 8 != 0:
if (__pyx_v_prebuilt->has_nulls) {
} else {
__pyx_t_1 = __pyx_v_prebuilt->has_nulls;
goto __pyx_L37_bool_binop_done;
}
__pyx_t_3 = ((__pyx_v_row_offset % 8) != 0);
__pyx_t_1 = __pyx_t_3;
__pyx_L37_bool_binop_done:;
if (unlikely(__pyx_t_1)) {
/* … */
}
+06014: raise RuntimeError(
__pyx_t_6 = NULL;
__pyx_t_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, 6014, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 6014, __pyx_L1_error)
06015: 'PyObject float column with nulls requires byte-aligned '
06016: 'chunk boundaries.')
+06017: if prebuilt.has_nulls:
if (__pyx_v_prebuilt->has_nulls) {
/* … */
goto __pyx_L39;
}
+06018: validity.bits = prebuilt.validity + (row_offset // 8)
__pyx_v_validity.bits = (__pyx_v_prebuilt->validity + (__pyx_v_row_offset / 8));
+06019: validity.bit_len = row_count
__pyx_v_validity.bit_len = __pyx_v_row_count;
+06020: validity_ptr = &validity
__pyx_v_validity_ptr = (&__pyx_v_validity);
06021: else:
+06022: validity_ptr = NULL
/*else*/ {
__pyx_v_validity_ptr = NULL;
}
__pyx_L39:;
+06023: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L42;
}
__pyx_L42:;
}
}
+06024: ok = qwp_chunk_append_numpy_column(
__pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, qwp_numpy_f64, (((uint8_t const *)__pyx_v_prebuilt->data) + (__pyx_v_row_offset * 8)), (__pyx_v_row_count * 8), __pyx_v_row_count, __pyx_v_validity_ptr, NULL, (&__pyx_v_err));
}
06025: chunk,
06026: col.name.buf,
06027: col.name.len,
06028: qwp_numpy_dtype.qwp_numpy_f64,
06029: (<const uint8_t*>prebuilt.data) + row_offset * 8,
06030: row_count * 8,
06031: row_count,
06032: validity_ptr,
06033: NULL,
06034: &err)
06035: else:
+06036: raise RuntimeError('Unsupported columnar float source.')
__pyx_t_6 = NULL;
__pyx_t_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, 6036, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 6036, __pyx_L1_error)
break;
}
+06037: elif col.setup.target == col_target_t.col_target_column_ts:
break;
case __pyx_e_7questdb_7_client_col_target_column_i8:
+06038: if col.setup.source == col_source_t.col_source_dt64ns_numpy:
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_dt64ns_numpy:
/* … */
break;
case __pyx_e_7questdb_7_client_col_source_dt64us_numpy:
+06039: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L45;
}
__pyx_L45:;
}
}
+06040: ok = qwp_chunk_append_numpy_column(
__pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, qwp_numpy_datetime64_ns, (((uint8_t const *)__pyx_v_data) + (__pyx_v_row_offset * 8)), (__pyx_v_row_count * 8), __pyx_v_row_count, __pyx_v_validity_ptr, NULL, (&__pyx_v_err));
}
06041: chunk,
06042: col.name.buf,
06043: col.name.len,
06044: qwp_numpy_dtype.qwp_numpy_datetime64_ns,
06045: (<const uint8_t*>data) + row_offset * 8,
06046: row_count * 8,
06047: row_count,
06048: validity_ptr,
06049: NULL,
06050: &err)
+06051: elif col.setup.source == col_source_t.col_source_dt64us_numpy:
break;
case __pyx_e_7questdb_7_client_col_source_dt64ns_tz_arrow:
+06052: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L48;
}
__pyx_L48:;
}
}
+06053: ok = qwp_chunk_append_numpy_column(
__pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, qwp_numpy_datetime64_us, (((uint8_t const *)__pyx_v_data) + (__pyx_v_row_offset * 8)), (__pyx_v_row_count * 8), __pyx_v_row_count, __pyx_v_validity_ptr, NULL, (&__pyx_v_err));
}
06054: chunk,
06055: col.name.buf,
06056: col.name.len,
06057: qwp_numpy_dtype.qwp_numpy_datetime64_us,
06058: (<const uint8_t*>data) + row_offset * 8,
06059: row_count * 8,
06060: row_count,
06061: validity_ptr,
06062: NULL,
06063: &err)
+06064: elif col.setup.source in (
break;
case __pyx_e_7questdb_7_client_col_source_datetime_pyobj:
+06065: col_source_t.col_source_dt64ns_tz_arrow,
case __pyx_e_7questdb_7_client_col_source_dt64us_tz_arrow:
06066: col_source_t.col_source_dt64us_tz_arrow):
+06067: _dataframe_columnar_call_arrow_append(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(__pyx_v_chunk, __pyx_v_col, __pyx_v_row_offset, __pyx_v_row_count, NULL); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6067, __pyx_L1_error)
06068: chunk, col, row_offset, row_count)
+06069: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+06070: elif col.setup.source == col_source_t.col_source_datetime_pyobj:
break;
default:
+06071: _dataframe_columnar_append_pyobj_simple(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_simple(__pyx_v_chunk, __pyx_v_col, __pyx_v_prebuilt, __pyx_v_row_offset, __pyx_v_row_count, 8, qwp_numpy_datetime64_us); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6071, __pyx_L1_error)
06072: chunk, col, prebuilt, row_offset, row_count, 8,
06073: qwp_numpy_dtype.qwp_numpy_datetime64_us)
+06074: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
06075: else:
+06076: raise RuntimeError('Unsupported columnar timestamp field source.')
__pyx_t_6 = NULL;
__pyx_t_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, 6076, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 6076, __pyx_L1_error)
break;
}
+06077: elif col.setup.target in (
break;
case __pyx_e_7questdb_7_client_col_target_column_uuid:
+06078: col_target_t.col_target_column_i8,
case __pyx_e_7questdb_7_client_col_target_column_i16:
+06079: col_target_t.col_target_column_i16,
case __pyx_e_7questdb_7_client_col_target_column_i32:
+06080: col_target_t.col_target_column_i32,
case __pyx_e_7questdb_7_client_col_target_column_f32:
06081: col_target_t.col_target_column_f32):
+06082: _dataframe_columnar_call_arrow_append(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(__pyx_v_chunk, __pyx_v_col, __pyx_v_row_offset, __pyx_v_row_count, NULL); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6082, __pyx_L1_error)
06083: chunk, col, row_offset, row_count)
+06084: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+06085: elif col.setup.target == col_target_t.col_target_column_uuid:
break;
case __pyx_e_7questdb_7_client_col_target_column_ipv4:
+06086: if col.setup.source == col_source_t.col_source_uuid_pyobj:
__pyx_t_1 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_uuid_pyobj);
if (__pyx_t_1) {
/* … */
}
+06087: _dataframe_columnar_append_pyobj_simple(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_simple(__pyx_v_chunk, __pyx_v_col, __pyx_v_prebuilt, __pyx_v_row_offset, __pyx_v_row_count, 16, qwp_numpy_s16); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6087, __pyx_L1_error)
06088: chunk, col, prebuilt, row_offset, row_count, 16,
06089: qwp_numpy_dtype.qwp_numpy_s16)
+06090: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+06091: _dataframe_columnar_call_arrow_append(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(__pyx_v_chunk, __pyx_v_col, __pyx_v_row_offset, __pyx_v_row_count, NULL); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6091, __pyx_L1_error)
06092: chunk, col, row_offset, row_count)
+06093: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+06094: elif col.setup.target == col_target_t.col_target_column_ipv4:
break;
case __pyx_e_7questdb_7_client_col_target_column_binary:
+06095: if col.setup.source == col_source_t.col_source_ipv4_pyobj:
__pyx_t_1 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_ipv4_pyobj);
if (__pyx_t_1) {
/* … */
}
+06096: _dataframe_columnar_append_pyobj_simple(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_simple(__pyx_v_chunk, __pyx_v_col, __pyx_v_prebuilt, __pyx_v_row_offset, __pyx_v_row_count, 4, qwp_numpy_u32_ipv4); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6096, __pyx_L1_error)
06097: chunk, col, prebuilt, row_offset, row_count, 4,
06098: qwp_numpy_dtype.qwp_numpy_u32_ipv4)
+06099: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+06100: _dataframe_columnar_call_arrow_append(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(__pyx_v_chunk, __pyx_v_col, __pyx_v_row_offset, __pyx_v_row_count, NULL); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6100, __pyx_L1_error)
06101: chunk, col, row_offset, row_count)
+06102: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+06103: elif col.setup.target == col_target_t.col_target_column_binary:
break;
case __pyx_e_7questdb_7_client_col_target_column_str:
+06104: if col.setup.source == col_source_t.col_source_bytes_pyobj:
__pyx_t_1 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_bytes_pyobj);
if (__pyx_t_1) {
/* … */
}
06105: # A UUID or LONG256 round-trip claim turns the same object
06106: # column into fixed-width rows instead of an offsets table.
+06107: if (col.setup.has_override
if (__pyx_v_col->setup->has_override) {
} else {
__pyx_t_1 = __pyx_v_col->setup->has_override;
goto __pyx_L53_bool_binop_done;
}
/* … */
if (__pyx_t_1) {
/* … */
}
06108: and col.setup.override_dtype
+06109: == qwp_numpy_dtype.qwp_numpy_s16):
__pyx_t_3 = (__pyx_v_col->setup->override_dtype == qwp_numpy_s16);
__pyx_t_1 = __pyx_t_3;
__pyx_L53_bool_binop_done:;
+06110: _dataframe_columnar_append_pyobj_simple(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_simple(__pyx_v_chunk, __pyx_v_col, __pyx_v_prebuilt, __pyx_v_row_offset, __pyx_v_row_count, 16, qwp_numpy_s16); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6110, __pyx_L1_error)
06111: chunk, col, prebuilt, row_offset, row_count, 16,
06112: qwp_numpy_dtype.qwp_numpy_s16)
+06113: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+06114: if (col.setup.has_override
if (__pyx_v_col->setup->has_override) {
} else {
__pyx_t_1 = __pyx_v_col->setup->has_override;
goto __pyx_L56_bool_binop_done;
}
/* … */
if (__pyx_t_1) {
/* … */
}
06115: and col.setup.override_dtype
+06116: == qwp_numpy_dtype.qwp_numpy_s32):
__pyx_t_3 = (__pyx_v_col->setup->override_dtype == qwp_numpy_s32);
__pyx_t_1 = __pyx_t_3;
__pyx_L56_bool_binop_done:;
+06117: _dataframe_columnar_append_pyobj_simple(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_simple(__pyx_v_chunk, __pyx_v_col, __pyx_v_prebuilt, __pyx_v_row_offset, __pyx_v_row_count, 32, qwp_numpy_s32); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6117, __pyx_L1_error)
06118: chunk, col, prebuilt, row_offset, row_count, 32,
06119: qwp_numpy_dtype.qwp_numpy_s32)
+06120: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+06121: _dataframe_columnar_append_pyobj_bytes(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_bytes(__pyx_v_chunk, __pyx_v_col, __pyx_v_prebuilt, __pyx_v_row_offset, __pyx_v_row_count); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6121, __pyx_L1_error)
06122: chunk, col, prebuilt, row_offset, row_count)
+06123: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+06124: if col.setup.source == col_source_t.col_source_fsb_claimed_arrow:
__pyx_t_1 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_fsb_claimed_arrow);
if (likely(__pyx_t_1)) {
/* … */
goto __pyx_L58;
}
06125: # The Arrow value buffer is already packed 16- or 32-byte
06126: # rows, the layout the claimed kind's NumPy dtype reads, so
06127: # it goes out as it stands with the column's own validity.
06128: # The plan checks have held it to one zero-offset array.
+06129: if strncmp(col.setup.arrow_schema.format,
if (__pyx_t_1) {
/* … */
goto __pyx_L59;
}
+06130: _ARROW_FMT_FSB16, 5) == 0:
__pyx_t_1 = (strncmp(__pyx_v_col->setup->arrow_schema.format, __pyx_v_7questdb_7_client__ARROW_FMT_FSB16, 5) == 0);
+06131: numpy_dtype = qwp_numpy_dtype.qwp_numpy_s16
__pyx_v_numpy_dtype = qwp_numpy_s16;
+06132: element_size = 16
__pyx_v_element_size = 16;
+06133: elif strncmp(col.setup.arrow_schema.format,
if (likely(__pyx_t_1)) {
/* … */
goto __pyx_L59;
}
+06134: _ARROW_FMT_FSB32, 5) == 0:
__pyx_t_1 = (strncmp(__pyx_v_col->setup->arrow_schema.format, __pyx_v_7questdb_7_client__ARROW_FMT_FSB32, 5) == 0);
+06135: numpy_dtype = qwp_numpy_dtype.qwp_numpy_s32
__pyx_v_numpy_dtype = qwp_numpy_s32;
+06136: element_size = 32
__pyx_v_element_size = 32;
06137: else:
+06138: raise RuntimeError(
/*else*/ {
__pyx_t_6 = NULL;
__pyx_t_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, 6138, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 6138, __pyx_L1_error)
}
__pyx_L59:;
06139: 'Claimed fixed-size binary column is neither 16 nor '
06140: '32 bytes wide.')
+06141: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L62;
}
__pyx_L62:;
}
}
+06142: ok = qwp_chunk_append_numpy_column(
__pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, __pyx_v_numpy_dtype, (((uint8_t const *)__pyx_v_data) + (__pyx_v_row_offset * __pyx_v_element_size)), (__pyx_v_row_count * __pyx_v_element_size), __pyx_v_row_count, __pyx_v_validity_ptr, NULL, (&__pyx_v_err));
}
06143: chunk,
06144: col.name.buf,
06145: col.name.len,
06146: numpy_dtype,
06147: (<const uint8_t*>data) + row_offset * element_size,
06148: row_count * element_size,
06149: row_count,
06150: validity_ptr,
06151: NULL,
06152: &err)
06153: else:
+06154: raise RuntimeError('Unsupported columnar binary field source.')
/*else*/ {
__pyx_t_6 = NULL;
__pyx_t_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, 6154, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 6154, __pyx_L1_error)
}
__pyx_L58:;
+06155: elif col.setup.target == col_target_t.col_target_column_str:
break;
case __pyx_e_7questdb_7_client_col_target_symbol:
+06156: if col.setup.source == col_source_t.col_source_str_pyobj:
__pyx_t_1 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_str_pyobj);
if (__pyx_t_1) {
/* … */
}
+06157: _dataframe_columnar_append_pyobj_str(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_str(__pyx_v_chunk, __pyx_v_col, __pyx_v_prebuilt, __pyx_v_row_offset, __pyx_v_row_count); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6157, __pyx_L1_error)
06158: chunk, col, prebuilt, row_offset, row_count)
+06159: return 0 # err already raised inside on failure
{
__pyx_r = 0;
}
goto __pyx_L0;
+06160: if col.setup.source in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_str_i8_cat:
/* … */
break;
default: break;
}
+06161: col_source_t.col_source_str_i8_cat,
case __pyx_e_7questdb_7_client_col_source_str_i16_cat:
+06162: col_source_t.col_source_str_i16_cat,
case __pyx_e_7questdb_7_client_col_source_str_i32_cat:
06163: col_source_t.col_source_str_i32_cat):
+06164: _dataframe_columnar_call_arrow_append(
__pyx_t_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, 6164, __pyx_L1_error)
06165: chunk, col, row_offset, row_count,
06166: qwp_symbol_mode_not_symbol)
+06167: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+06168: _dataframe_columnar_call_arrow_append(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(__pyx_v_chunk, __pyx_v_col, __pyx_v_row_offset, __pyx_v_row_count, NULL); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6168, __pyx_L1_error)
06169: chunk, col, row_offset, row_count)
+06170: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+06171: elif col.setup.target == col_target_t.col_target_symbol:
break;
case __pyx_e_7questdb_7_client_col_target_column_decimal:
+06172: _dataframe_columnar_call_arrow_append(
__pyx_t_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, 6172, __pyx_L1_error)
06173: chunk, col, row_offset, row_count,
06174: qwp_symbol_mode_symbol)
+06175: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+06176: elif col.setup.target == col_target_t.col_target_column_decimal:
break;
default:
+06177: _dataframe_columnar_call_arrow_append(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(__pyx_v_chunk, __pyx_v_col, __pyx_v_row_offset, __pyx_v_row_count, NULL); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6177, __pyx_L1_error)
06178: chunk, col, row_offset, row_count)
+06179: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
06180: else:
+06181: raise RuntimeError('Unsupported columnar field target.')
__pyx_t_6 = NULL;
__pyx_t_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, 6181, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 6181, __pyx_L1_error)
break;
}
06182:
+06183: if not ok:
__pyx_t_1 = (!__pyx_v_ok);
if (unlikely(__pyx_t_1)) {
/* … */
}
+06184: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 6184, __pyx_L1_error)
06185:
06186:
+06187: cdef void_int _dataframe_columnar_append_at(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_append_at(struct qwp_chunk *__pyx_v_chunk, struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_prebuilt, size_t __pyx_v_row_offset, size_t __pyx_v_row_count) {
struct line_sender_error *__pyx_v_err;
int64_t const *__pyx_v_data;
int __pyx_v_ok;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_append_at", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
06188: qwp_chunk* chunk,
06189: col_t* col,
06190: pyobj_built_t* prebuilt,
06191: size_t row_offset,
06192: size_t row_count) except -1:
+06193: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
06194: cdef const int64_t* data
+06195: cdef bint ok = False
__pyx_v_ok = 0;
06196:
+06197: if col.setup.source == col_source_t.col_source_datetime_pyobj:
__pyx_t_1 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_datetime_pyobj);
if (__pyx_t_1) {
/* … */
}
+06198: if prebuilt == NULL:
__pyx_t_1 = (__pyx_v_prebuilt == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+06199: raise RuntimeError(
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_PyObject_datetime_designated_TS};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6199, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 6199, __pyx_L1_error)
06200: 'PyObject datetime designated TS missing pre-built buffer.')
+06201: if prebuilt.has_nulls:
if (unlikely(__pyx_v_prebuilt->has_nulls)) {
/* … */
}
+06202: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6202, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+06203: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6203, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6203, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_4 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_4 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_Designated_timestamp_column_cann}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6202, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 6202, __pyx_L1_error)
06204: 'Designated timestamp column cannot contain nulls.')
+06205: data = <const int64_t*>prebuilt.data
__pyx_v_data = ((int64_t const *)__pyx_v_prebuilt->data);
+06206: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L8;
}
__pyx_L8:;
}
}
+06207: ok = qwp_chunk_at_micros(
__pyx_v_ok = qwp_chunk_at_micros(__pyx_v_chunk, (__pyx_v_data + __pyx_v_row_offset), __pyx_v_row_count, (&__pyx_v_err));
}
06208: chunk,
06209: data + row_offset,
06210: row_count,
06211: &err)
+06212: if not ok:
__pyx_t_1 = (!__pyx_v_ok);
if (unlikely(__pyx_t_1)) {
/* … */
}
+06213: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6213, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 6213, __pyx_L1_error)
+06214: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
06215:
+06216: data = <const int64_t*>(col.setup.chunks.chunks[0].buffers[1])
__pyx_v_data = ((int64_t const *)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
06217:
+06218: if col.setup.source in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_dt64ns_numpy:
/* … */
break;
case __pyx_e_7questdb_7_client_col_source_dt64us_numpy:
+06219: col_source_t.col_source_dt64ns_numpy,
case __pyx_e_7questdb_7_client_col_source_dt64ns_tz_arrow:
06220: col_source_t.col_source_dt64ns_tz_arrow):
+06221: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L12;
}
__pyx_L12:;
}
}
+06222: ok = qwp_chunk_at_nanos(
__pyx_v_ok = qwp_chunk_at_nanos(__pyx_v_chunk, (__pyx_v_data + __pyx_v_row_offset), __pyx_v_row_count, (&__pyx_v_err));
}
06223: chunk,
06224: data + row_offset,
06225: row_count,
06226: &err)
+06227: elif col.setup.source in (
break;
case __pyx_e_7questdb_7_client_col_source_dt64ms_tz_arrow:
+06228: col_source_t.col_source_dt64us_numpy,
case __pyx_e_7questdb_7_client_col_source_dt64us_tz_arrow:
06229: col_source_t.col_source_dt64us_tz_arrow):
+06230: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L15;
}
__pyx_L15:;
}
}
+06231: ok = qwp_chunk_at_micros(
__pyx_v_ok = qwp_chunk_at_micros(__pyx_v_chunk, (__pyx_v_data + __pyx_v_row_offset), __pyx_v_row_count, (&__pyx_v_err));
}
06232: chunk,
06233: data + row_offset,
06234: row_count,
06235: &err)
+06236: elif col.setup.source == col_source_t.col_source_dt64ms_tz_arrow:
break;
case __pyx_e_7questdb_7_client_col_source_dt64s_tz_arrow:
+06237: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L18;
}
__pyx_L18:;
}
}
+06238: ok = qwp_chunk_at_millis(
__pyx_v_ok = qwp_chunk_at_millis(__pyx_v_chunk, (__pyx_v_data + __pyx_v_row_offset), __pyx_v_row_count, (&__pyx_v_err));
}
06239: chunk,
06240: data + row_offset,
06241: row_count,
06242: &err)
+06243: elif col.setup.source == col_source_t.col_source_dt64s_tz_arrow:
break;
default:
+06244: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L21;
}
__pyx_L21:;
}
}
+06245: ok = qwp_chunk_at_seconds(
__pyx_v_ok = qwp_chunk_at_seconds(__pyx_v_chunk, (__pyx_v_data + __pyx_v_row_offset), __pyx_v_row_count, (&__pyx_v_err));
}
06246: chunk,
06247: data + row_offset,
06248: row_count,
06249: &err)
06250: else:
+06251: raise RuntimeError('Unsupported columnar designated timestamp source.')
__pyx_t_5 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Unsupported_columnar_designated};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6251, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 6251, __pyx_L1_error)
break;
}
06252:
+06253: if not ok:
__pyx_t_1 = (!__pyx_v_ok);
if (unlikely(__pyx_t_1)) {
/* … */
}
+06254: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6254, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 6254, __pyx_L1_error)
06255:
06256:
06257: # What `_geohash_override_dtype` answers with besides a
06258: # `qwp_numpy_dtype` slot.
+06259: cdef int _GEOHASH_DTYPE_NONE = -1
__pyx_v_7questdb_7_client__GEOHASH_DTYPE_NONE = -1;
+06260: cdef int _GEOHASH_DTYPE_UNSIGNED = -2
__pyx_v_7questdb_7_client__GEOHASH_DTYPE_UNSIGNED = -2;
06261:
06262:
+06263: cdef int _geohash_override_dtype(col_source_t source) noexcept:
static int __pyx_f_7questdb_7_client__geohash_override_dtype(enum __pyx_t_7questdb_7_client_col_source_t __pyx_v_source) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
06264: """The GEOHASH slot a column of this source goes out in,
06265: ``_GEOHASH_DTYPE_UNSIGNED`` for an unsigned integer column, or
06266: ``_GEOHASH_DTYPE_NONE`` for anything else.
06267:
06268: A GEOHASH rides on a signed integer: `qwp_numpy_dtype` names only
06269: signed geohash slots. An unsigned column whose claim fits its width
06270: has already been given the signed type of the same width by
06271: `_dataframe_reinterpret_unsigned_geohash`, so an unsigned column
06272: here holds a claim wider than it can carry. It gets its own answer
06273: so that the dropped claim is reported rather than left silent.
06274: """
+06275: if (source == col_source_t.col_source_u8_numpy
switch (__pyx_v_source) {
case __pyx_e_7questdb_7_client_col_source_u8_numpy:
case __pyx_e_7questdb_7_client_col_source_u16_numpy:
/* … */
break;
default: break;
}
+06276: or source == col_source_t.col_source_u16_numpy
case __pyx_e_7questdb_7_client_col_source_u32_numpy:
+06277: or source == col_source_t.col_source_u32_numpy
case __pyx_e_7questdb_7_client_col_source_u64_numpy:
06278: or source == col_source_t.col_source_u64_numpy):
+06279: return _GEOHASH_DTYPE_UNSIGNED
{
__pyx_r = __pyx_v_7questdb_7_client__GEOHASH_DTYPE_UNSIGNED;
}
goto __pyx_L0;
+06280: if source == col_source_t.col_source_i8_numpy:
__pyx_t_1 = (__pyx_v_source == __pyx_e_7questdb_7_client_col_source_i8_numpy);
if (__pyx_t_1) {
/* … */
}
+06281: return <int>qwp_numpy_dtype.qwp_numpy_geohash_i8
{
__pyx_r = ((int)qwp_numpy_geohash_i8);
}
goto __pyx_L0;
+06282: if source == col_source_t.col_source_i16_numpy:
__pyx_t_1 = (__pyx_v_source == __pyx_e_7questdb_7_client_col_source_i16_numpy);
if (__pyx_t_1) {
/* … */
}
+06283: return <int>qwp_numpy_dtype.qwp_numpy_geohash_i16
{
__pyx_r = ((int)qwp_numpy_geohash_i16);
}
goto __pyx_L0;
+06284: if source == col_source_t.col_source_i32_numpy:
__pyx_t_1 = (__pyx_v_source == __pyx_e_7questdb_7_client_col_source_i32_numpy);
if (__pyx_t_1) {
/* … */
}
+06285: return <int>qwp_numpy_dtype.qwp_numpy_geohash_i32
{
__pyx_r = ((int)qwp_numpy_geohash_i32);
}
goto __pyx_L0;
+06286: if (source == col_source_t.col_source_i64_numpy
switch (__pyx_v_source) {
case __pyx_e_7questdb_7_client_col_source_i64_numpy:
case __pyx_e_7questdb_7_client_col_source_i64_arrow:
/* … */
break;
default: break;
}
+06287: or source == col_source_t.col_source_i64_arrow
case __pyx_e_7questdb_7_client_col_source_int_pyobj:
06288: or source == col_source_t.col_source_int_pyobj):
06289: # An object column of Python ints — what a masked pandas dtype
06290: # becomes — is widened to the 64-bit geohash; the claim carries
06291: # the precision, so the storage width no longer has to.
06292: #
06293: # `i64_arrow` is here because it is the one Arrow integer width
06294: # that resolves to `col_target_column_i64` and so reaches the
06295: # wire as a raw buffer the append call names a dtype for. The
06296: # narrower Arrow widths take their own targets and go to the
06297: # native importer as Arrow arrays, which carry no type hint;
06298: # `_dataframe_normalize_claimed_arrow` reshapes those instead.
+06299: return <int>qwp_numpy_dtype.qwp_numpy_geohash_i64
{
__pyx_r = ((int)qwp_numpy_geohash_i64);
}
goto __pyx_L0;
+06300: return _GEOHASH_DTYPE_NONE
{
__pyx_r = __pyx_v_7questdb_7_client__GEOHASH_DTYPE_NONE;
}
goto __pyx_L0;
06301:
06302:
+06303: cdef int _geohash_dtype_max_bits(int gh) noexcept:
static int __pyx_f_7questdb_7_client__geohash_dtype_max_bits(int __pyx_v_gh) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
06304: """The widest precision a GEOHASH slot of this width can hold.
06305:
06306: Signed carriers preserve their raw two's-complement bits, so their
06307: sign bit is available to a byte-aligned GEOHASH. The 64-bit slot
06308: stops at 60 because that is the widest GEOHASH QuestDB has.
06309:
06310: `_attrs_override_fits` states the same four numbers against Arrow
06311: types.
06312: """
+06313: if gh == <int>qwp_numpy_dtype.qwp_numpy_geohash_i8:
__pyx_t_1 = (__pyx_v_gh == ((int)qwp_numpy_geohash_i8));
if (__pyx_t_1) {
/* … */
}
+06314: return 8
{
__pyx_r = 8;
}
goto __pyx_L0;
+06315: if gh == <int>qwp_numpy_dtype.qwp_numpy_geohash_i16:
__pyx_t_1 = (__pyx_v_gh == ((int)qwp_numpy_geohash_i16));
if (__pyx_t_1) {
/* … */
}
+06316: return 16
{
__pyx_r = 16;
}
goto __pyx_L0;
+06317: if gh == <int>qwp_numpy_dtype.qwp_numpy_geohash_i32:
__pyx_t_1 = (__pyx_v_gh == ((int)qwp_numpy_geohash_i32));
if (__pyx_t_1) {
/* … */
}
+06318: return 32
{
__pyx_r = 32;
}
goto __pyx_L0;
+06319: if gh == <int>qwp_numpy_dtype.qwp_numpy_geohash_i64:
__pyx_t_1 = (__pyx_v_gh == ((int)qwp_numpy_geohash_i64));
if (__pyx_t_1) {
/* … */
}
+06320: return 60
{
__pyx_r = 60;
}
goto __pyx_L0;
+06321: return -1
{
__pyx_r = -1;
}
goto __pyx_L0;
06322:
06323:
+06324: cdef object _dataframe_normalize_nullable(object df):
static PyObject *__pyx_f_7questdb_7_client__dataframe_normalize_nullable(PyObject *__pyx_v_df) {
PyObject *__pyx_v_masked_base = 0;
PyObject *__pyx_v_convert = NULL;
PyObject *__pyx_v_pos = NULL;
PyObject *__pyx_v_dtype = NULL;
PyObject *__pyx_v_out = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_AddTraceback("questdb._client._dataframe_normalize_nullable", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_masked_base);
__Pyx_XDECREF(__pyx_v_convert);
__Pyx_XDECREF(__pyx_v_pos);
__Pyx_XDECREF(__pyx_v_dtype);
__Pyx_XDECREF(__pyx_v_out);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+06325: if not _is_pandas_dataframe_object(df):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_df); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6325, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+06326: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06327: _dataframe_may_import_deps()
__pyx_t_3 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6327, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06328: cdef object masked_base = _pandas_masked_dtype()
__pyx_t_3 = __pyx_f_7questdb_7_client__pandas_masked_dtype(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6328, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_masked_base = __pyx_t_3; __pyx_t_3 = 0;
+06329: convert = []
__pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6329, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_convert = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0;
+06330: for pos, dtype in enumerate(df.dtypes):
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_0); __pyx_t_3 = __pyx_mstate_global->__pyx_int_0; __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6330, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) { __pyx_t_5 = __pyx_t_4; __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = 0; __pyx_t_7 = NULL; } else { __pyx_t_6 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6330, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6330, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; for (;;) { if (likely(!__pyx_t_7)) { if (likely(PyList_CheckExact(__pyx_t_5))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_5); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6330, __pyx_L1_error) #endif if (__pyx_t_6 >= __pyx_temp) break; } __pyx_t_4 = __Pyx_PyList_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, 6330, __pyx_L1_error) #endif if (__pyx_t_6 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_4 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_6)); #else __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_5, __pyx_t_6); #endif ++__pyx_t_6; } if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6330, __pyx_L1_error) } else { __pyx_t_4 = __pyx_t_7(__pyx_t_5); if (unlikely(!__pyx_t_4)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 6330, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_4); __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_4); __pyx_t_4 = 0; __Pyx_INCREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_pos, __pyx_t_3); __pyx_t_4 = __Pyx_PyLong_AddObjC(__pyx_t_3, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6330, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = __pyx_t_4; __pyx_t_4 = 0; /* … */ } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
06331: # pyarrow-backed strings keep their Arrow buffers (resolved as
06332: # str_utf8_arrow), so an all-null column survives as a null VARCHAR
06333: # instead of collapsing to a skipped all-null object column.
+06334: if isinstance(dtype, masked_base):
__pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_v_masked_base); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 6334, __pyx_L1_error) if (__pyx_t_2) { /* … */ goto __pyx_L6; }
+06335: convert.append(pos)
__pyx_t_8 = __Pyx_PyList_Append(__pyx_v_convert, __pyx_v_pos); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 6335, __pyx_L1_error)
+06336: elif (isinstance(dtype, _PANDAS.StringDtype)
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PANDAS, __pyx_mstate_global->__pyx_n_u_StringDtype); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6336, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_4); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 6336, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_1) { } else { __pyx_t_2 = __pyx_t_1; goto __pyx_L7_bool_binop_done; } /* … */ if (__pyx_t_2) { /* … */ } __pyx_L6:;
+06337: and getattr(dtype, 'storage', None) != 'pyarrow'):
__pyx_t_4 = __Pyx_GetAttr3(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_storage, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6337, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_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, 6337, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_2 = __pyx_t_1; __pyx_L7_bool_binop_done:;
+06338: convert.append(pos)
__pyx_t_8 = __Pyx_PyList_Append(__pyx_v_convert, __pyx_v_pos); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 6338, __pyx_L1_error)
+06339: if not convert:
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_convert);
if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 6339, __pyx_L1_error)
__pyx_t_2 = (__pyx_temp != 0);
}
__pyx_t_1 = (!__pyx_t_2);
if (__pyx_t_1) {
/* … */
}
+06340: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06341: out = df.copy(deep=False)
__pyx_t_5 = __pyx_v_df; __Pyx_INCREF(__pyx_t_5); #if CYTHON_VECTORCALL #endif __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, 6341, __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, 6341, __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; #if CYTHON_VECTORCALL #endif __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6341, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_v_out = __pyx_t_3; __pyx_t_3 = 0;
+06342: for pos in convert:
__pyx_t_3 = __pyx_v_convert; __Pyx_INCREF(__pyx_t_3); __pyx_t_6 = 0; for (;;) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6342, __pyx_L1_error) #endif if (__pyx_t_6 >= __pyx_temp) break; } __pyx_t_4 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_3, __pyx_t_6, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_6; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6342, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_XDECREF_SET(__pyx_v_pos, __pyx_t_4); __pyx_t_4 = 0; /* … */ } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06343: _dataframe_set_column(out, df, pos, df.iloc[:, pos].astype(object))
__pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 6343, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6343, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 6343, __pyx_L1_error); __Pyx_INCREF(__pyx_v_pos); __Pyx_GIVEREF(__pyx_v_pos); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_pos) != (0)) __PYX_ERR(0, 6343, __pyx_L1_error); __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6343, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_5 = __pyx_t_12; __Pyx_INCREF(__pyx_t_5); __pyx_t_9 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_builtin_object}; __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6343, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_13 = __pyx_f_7questdb_7_client__dataframe_set_column(__pyx_v_out, __pyx_v_df, __pyx_v_pos, __pyx_t_4); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6343, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+06344: out.attrs = dict(df.attrs)
__pyx_t_4 = NULL; __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_attrs); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6344, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_9 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_12}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(&PyDict_Type), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6344, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } if (__Pyx_PyObject_SetAttrStr(__pyx_v_out, __pyx_mstate_global->__pyx_n_u_attrs, __pyx_t_3) < (0)) __PYX_ERR(0, 6344, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06345: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
06346:
06347:
+06348: cdef void_int _dataframe_set_column(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_set_column(PyObject *__pyx_v_out, PyObject *__pyx_v_df, PyObject *__pyx_v_pos, PyObject *__pyx_v_value) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._dataframe_set_column", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
06349: object out, object df, object pos, object value) except -1:
06350: # `out[name] = value` trips pandas' chained-assignment refcount
06351: # heuristic when called from Cython (the shallow copy looks like a
06352: # temporary), spamming FutureWarnings under pandas >= 2.2 warn-CoW
06353: # and erroring under `-W error`. Positional `isetitem` performs the
06354: # same block replacement without the heuristic; pandas < 1.5 lacks
06355: # it but also lacks the warning, so plain setitem stays correct.
+06356: if hasattr(out, 'isetitem'):
__pyx_t_1 = __Pyx_HasAttr(__pyx_v_out, __pyx_mstate_global->__pyx_n_u_isetitem); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 6356, __pyx_L1_error) if (__pyx_t_1) { /* … */ goto __pyx_L3; }
+06357: out.isetitem(pos, value)
__pyx_t_3 = __pyx_v_out;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_pos, __pyx_v_value};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_isetitem, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6357, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
06358: else:
+06359: out[df.columns[pos]] = value
/*else*/ {
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6359, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_v_pos); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6359, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely((PyObject_SetItem(__pyx_v_out, __pyx_t_3, __pyx_v_value) < 0))) __PYX_ERR(0, 6359, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
}
__pyx_L3:;
06360:
06361:
+06362: cdef object _dataframe_normalize_at_timestamp(object df, object at):
static PyObject *__pyx_f_7questdb_7_client__dataframe_normalize_at_timestamp(PyObject *__pyx_v_df, PyObject *__pyx_v_at) {
PyObject *__pyx_v_dtype = 0;
PyObject *__pyx_v_new_dtype = 0;
PyObject *__pyx_v_out = 0;
PyObject *__pyx_v_at_name = 0;
PyObject *__pyx_v_pos = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_AddTraceback("questdb._client._dataframe_normalize_at_timestamp", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_dtype);
__Pyx_XDECREF(__pyx_v_new_dtype);
__Pyx_XDECREF(__pyx_v_out);
__Pyx_XDECREF(__pyx_v_at_name);
__Pyx_XDECREF(__pyx_v_pos);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
06363: # tz-aware (DatetimeTZ) ms/s designated-`at` columns can't reach the
06364: # columnar resolver's source override (the shared classifier rejects
06365: # non-ns/us tz units first), so widen them to us here. ArrowDtype ms/s
06366: # is widened to micros in Rust by the millis/seconds designated-ts FFI.
06367: cdef object dtype, new_dtype, out, at_name
+06368: if not _is_pandas_dataframe_object(df):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_df); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6368, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+06369: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06370: if isinstance(at, str):
__pyx_t_2 = PyUnicode_Check(__pyx_v_at);
if (__pyx_t_2) {
/* … */
goto __pyx_L4;
}
+06371: at_name = at
__Pyx_INCREF(__pyx_v_at);
__pyx_v_at_name = __pyx_v_at;
+06372: elif isinstance(at, int) and not isinstance(at, bool):
__pyx_t_1 = PyLong_Check(__pyx_v_at); if (__pyx_t_1) { } else { __pyx_t_2 = __pyx_t_1; goto __pyx_L5_bool_binop_done; } __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_at, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); __pyx_t_3 = (!__pyx_t_1); __pyx_t_2 = __pyx_t_3; __pyx_L5_bool_binop_done:; if (__pyx_t_2) { /* … */ goto __pyx_L4; }
+06373: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
goto __pyx_L12_try_end;
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
goto __pyx_L1_error;
__pyx_L10_except_return:;
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
goto __pyx_L0;
__pyx_L12_try_end:;
}
+06374: at_name = df.columns[at]
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6374, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_v_at); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6374, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_at_name = __pyx_t_8; __pyx_t_8 = 0;
+06375: except Exception:
__pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception)))); if (__pyx_t_9) { __Pyx_ErrRestore(0,0,0);
+06376: return df
{
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;
+06377: if not isinstance(at_name, str):
__pyx_t_2 = PyUnicode_Check(__pyx_v_at_name);
__pyx_t_3 = (!__pyx_t_2);
if (__pyx_t_3) {
/* … */
}
+06378: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
06379: else:
+06380: 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:;
+06381: _dataframe_may_import_deps()
__pyx_t_8 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6381, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+06382: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L21_try_end;
__pyx_L16_error:;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L18_except_error:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_5, __pyx_t_4);
goto __pyx_L1_error;
__pyx_L20_try_return:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_5, __pyx_t_4);
goto __pyx_L0;
__pyx_L19_except_return:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_5, __pyx_t_4);
goto __pyx_L0;
__pyx_L21_try_end:;
}
+06383: if at_name not in df.columns:
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6383, __pyx_L16_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_at_name, __pyx_t_8, Py_NE)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6383, __pyx_L16_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (__pyx_t_3) { /* … */ }
+06384: return df
{
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;
+06385: dtype = df[at_name].dtype
__pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_df, __pyx_v_at_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6385, __pyx_L16_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6385, __pyx_L16_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_v_dtype = __pyx_t_7; __pyx_t_7 = 0;
+06386: except Exception:
__pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception)))); if (__pyx_t_9) { __Pyx_ErrRestore(0,0,0);
+06387: return df
{
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;
+06388: if not isinstance(dtype, _PANDAS.DatetimeTZDtype) or dtype.unit not in ('s', 'ms'):
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PANDAS, __pyx_mstate_global->__pyx_n_u_DatetimeTZDtype); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6388, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_7); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 6388, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_1 = (!__pyx_t_2); if (!__pyx_t_1) { } else { __pyx_t_3 = __pyx_t_1; goto __pyx_L26_bool_binop_done; } __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_unit); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6388, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_2 = (__Pyx_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, 6388, __pyx_L1_error) if (__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L28_bool_binop_done; } __pyx_t_2 = __Pyx_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, 6388, __pyx_L1_error) __pyx_t_1 = __pyx_t_2; __pyx_L28_bool_binop_done:; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_2 = __pyx_t_1; __pyx_t_3 = __pyx_t_2; __pyx_L26_bool_binop_done:; if (__pyx_t_3) { /* … */ }
+06389: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06390: new_dtype = _PANDAS.DatetimeTZDtype('us', dtype.tz)
__pyx_t_8 = __pyx_v_7questdb_7_client__PANDAS; __Pyx_INCREF(__pyx_t_8); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_tz); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 6390, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_11 = 0; { PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_mstate_global->__pyx_n_u_us, __pyx_t_10}; __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_DatetimeTZDtype, __pyx_callargs+__pyx_t_11, (3-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6390, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_v_new_dtype = __pyx_t_7; __pyx_t_7 = 0;
+06391: pos = df.columns.get_loc(at_name)
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6391, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_10 = __pyx_t_8; __Pyx_INCREF(__pyx_t_10); __pyx_t_11 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_v_at_name}; __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get_loc, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6391, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_v_pos = __pyx_t_7; __pyx_t_7 = 0;
+06392: if getattr(pos, '__index__', None) is None:
__pyx_t_7 = __Pyx_GetAttr3(__pyx_v_pos, __pyx_mstate_global->__pyx_n_u_index_2, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6392, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_3 = (__pyx_t_7 == Py_None); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (__pyx_t_3) { /* … */ }
06393: # Duplicate at-column names: leave the frame for the planner
06394: # to reject.
+06395: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06396: out = df.copy(deep=False)
__pyx_t_8 = __pyx_v_df; __Pyx_INCREF(__pyx_t_8); #if CYTHON_VECTORCALL #endif __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, 6396, __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, 6396, __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; #if CYTHON_VECTORCALL #endif __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6396, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_v_out = __pyx_t_7; __pyx_t_7 = 0;
+06397: _dataframe_set_column(out, df, pos, df.iloc[:, pos].astype(new_dtype))
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6397, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6397, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 6397, __pyx_L1_error); __Pyx_INCREF(__pyx_v_pos); __Pyx_GIVEREF(__pyx_v_pos); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_v_pos) != (0)) __PYX_ERR(0, 6397, __pyx_L1_error); __pyx_t_13 = __Pyx_PyObject_GetItem(__pyx_t_8, __pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 6397, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_10 = __pyx_t_13; __Pyx_INCREF(__pyx_t_10); __pyx_t_11 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_v_new_dtype}; __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6397, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_t_14 = __pyx_f_7questdb_7_client__dataframe_set_column(__pyx_v_out, __pyx_v_df, __pyx_v_pos, __pyx_t_7); if (unlikely(__pyx_t_14 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6397, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+06398: out.attrs = dict(df.attrs)
__pyx_t_13 = NULL; __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_attrs); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 6398, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_11 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_10}; __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)(&PyDict_Type), __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6398, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } if (__Pyx_PyObject_SetAttrStr(__pyx_v_out, __pyx_mstate_global->__pyx_n_u_attrs, __pyx_t_7) < (0)) __PYX_ERR(0, 6398, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+06399: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
06400:
06401:
+06402: cdef object _claimed_arrow_col_reshape_dtype(
static PyObject *__pyx_f_7questdb_7_client__claimed_arrow_col_reshape_dtype(PyObject *__pyx_v_types, PyObject *__pyx_v_raw_ty, PyObject *__pyx_v_ty, PyObject *__pyx_v_kind, PyObject *__pyx_v_series) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._claimed_arrow_col_reshape_dtype", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
06403: object types, object raw_ty, object ty, str kind, object series):
06404: """The dtype an Arrow-backed claimed column has to be copied to for
06405: the manual planner to honour its claim, or None where the column
06406: carries it as it stands.
06407:
06408: An integer claim reaches the wire as the NumPy dtype named in the
06409: append call, so it only lands on columns the planner sends as raw
06410: buffers. A column handed to the native Arrow importer instead
06411: carries no type hint, and `qwp_chunk_append_arrow_column` takes no
06412: per-column type override, so those are the ones that need
06413: reshaping.
06414:
06415: The matching NumPy width is the copy to make where the claim has
06416: one: it keeps the column a raw buffer and costs a memcpy, where
06417: object dtype costs a boxed Python int per row -- about 100 times
06418: more for a column of any size. The caller downgrades a NumPy width
06419: to object for a column holding a null, which a NumPy integer dtype
06420: cannot express.
06421:
06422: UUID on a bare 16-byte column and LONG256 on a 32-byte one depend
06423: on the column's layout, which is why `series` is passed in. The
06424: classifier reads those two claims itself and sends the Arrow value
06425: buffer as it stands, so a column that is one zero-offset array
06426: needs no copy and gets None; any other layout gets object, the
06427: fallback `_dataframe_normalize_claimed_arrow` describes.
06428:
06429: `_attrs_override_fits` has already held each kind to the Arrow
06430: types listed here, so the widths not named are the ones it rejects.
06431: """
+06432: if kind == 'ipv4':
__pyx_t_1 = __Pyx_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, 6432, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
06433: # uint32 resolves to the i64 target and goes out as a raw
06434: # buffer, claim and all.
+06435: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06436: 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, 6436, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
06437: # int64 does the same. int8/16/32 take the narrow BYTE/SHORT/INT
06438: # targets, which reach the importer as Arrow arrays; the same
06439: # width in NumPy takes the i64 target and the raw-buffer route.
+06440: if types.is_int64(ty):
__pyx_t_3 = __pyx_v_types;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_int64, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6440, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6440, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_1) {
/* … */
}
+06441: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06442: if types.is_int8(ty):
__pyx_t_3 = __pyx_v_types;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_int8, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6442, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6442, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_1) {
/* … */
}
+06443: return 'int8'
{
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;
+06444: if types.is_int16(ty):
__pyx_t_3 = __pyx_v_types;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_int16, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6444, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6444, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_1) {
/* … */
}
+06445: return 'int16'
{
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;
+06446: 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;
+06447: 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, 6447, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
06448: # An Arrow uint16 column goes to the importer, which has no CHAR
06449: # hint to read; NumPy uint16 takes the raw-buffer route.
+06450: return 'uint16'
{
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;
+06451: 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, 6451, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
06452: # A `pa.uuid()` column states its own type to the importer and
06453: # already lands as UUID.
+06454: if (isinstance(raw_ty, _PYARROW.lib.BaseExtensionType)
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_lib); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6454, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_BaseExtensionType); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6454, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = PyObject_IsInstance(__pyx_v_raw_ty, __pyx_t_3); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 6454, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_5) { } else { __pyx_t_1 = __pyx_t_5; goto __pyx_L11_bool_binop_done; } /* … */ if (__pyx_t_1) { /* … */ }
+06455: and raw_ty.extension_name == _ARROW_EXT_UUID):
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_raw_ty, __pyx_mstate_global->__pyx_n_u_extension_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6455, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_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, 6455, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_1 = __pyx_t_5; __pyx_L11_bool_binop_done:;
+06456: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
06457: # UUID on a bare 16-byte column and LONG256 on a 32-byte one: the
06458: # planner sends the Arrow value buffer as it stands when there is
06459: # one buffer to send, and object dtype is the fallback for the rest.
06460: # `_dataframe_normalize_claimed_arrow` sets out what that costs.
+06461: if _arrow_col_is_one_zero_offset_buffer(series):
__pyx_t_1 = __pyx_f_7questdb_7_client__arrow_col_is_one_zero_offset_buffer(__pyx_v_series); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 6461, __pyx_L1_error)
if (__pyx_t_1) {
/* … */
}
+06462: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06463: 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;
06464:
06465:
+06466: cdef bint _arrow_col_is_one_zero_offset_buffer(object series) except -1:
static int __pyx_f_7questdb_7_client__arrow_col_is_one_zero_offset_buffer(PyObject *__pyx_v_series) {
PyObject *__pyx_v_array = 0;
PyObject *__pyx_v_buffers = 0;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._arrow_col_is_one_zero_offset_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_array);
__Pyx_XDECREF(__pyx_v_buffers);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
06467: """Whether the planner can send this Arrow-backed column's value
06468: buffer as it stands.
06469:
06470: The planner's direct encoders address `buffers[1]` and the validity
06471: bitmap from their first byte, and take one array for the whole
06472: column, so `_dataframe_columnar_plan_failures` refuses any other
06473: layout with "v1 requires one contiguous zero-offset buffer". This
06474: asks the same question of the arrays the planner will export: it
06475: reads them through the same `pa.Array.from_pandas` call
06476: `_dataframe_series_to_arrow_chunks` makes, which for an `ArrowDtype`
06477: column hands back the arrays pandas holds without copying them.
06478: """
+06479: cdef object array = _PYARROW.Array.from_pandas(series)
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_Array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6479, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __pyx_t_3; __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_series}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_pandas, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6479, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_array = __pyx_t_1; __pyx_t_1 = 0;
06480: cdef object buffers
+06481: if isinstance(array, _PYARROW.ChunkedArray):
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_ChunkedArray); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6481, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = PyObject_IsInstance(__pyx_v_array, __pyx_t_1); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 6481, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_5) { /* … */ }
+06482: if array.num_chunks != 1:
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_array, __pyx_mstate_global->__pyx_n_u_num_chunks); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6482, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = (__Pyx_PyLong_BoolNeObjC(__pyx_t_1, __pyx_mstate_global->__pyx_int_1, 1, 0)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 6482, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_5) { /* … */ }
+06483: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+06484: array = array.chunk(0)
__pyx_t_3 = __pyx_v_array;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_int_0};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_chunk, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6484, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF_SET(__pyx_v_array, __pyx_t_1);
__pyx_t_1 = 0;
+06485: if array.offset != 0:
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_array, __pyx_mstate_global->__pyx_n_u_offset); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6485, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = (__Pyx_PyLong_BoolNeObjC(__pyx_t_1, __pyx_mstate_global->__pyx_int_0, 0, 0)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 6485, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_5) { /* … */ }
+06486: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+06487: buffers = array.buffers()
__pyx_t_3 = __pyx_v_array; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_buffers, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6487, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_buffers = __pyx_t_1; __pyx_t_1 = 0;
+06488: return (len(buffers) >= 2
__pyx_t_6 = PyObject_Length(__pyx_v_buffers); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 6488, __pyx_L1_error) __pyx_t_7 = (__pyx_t_6 >= 2); if (__pyx_t_7) { } else { __pyx_t_5 = __pyx_t_7; goto __pyx_L6_bool_binop_done; }
+06489: and buffers[1] is not None
__pyx_t_1 = __Pyx_GetItemInt(__pyx_v_buffers, 1, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6489, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = (__pyx_t_1 != Py_None); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_7) { } else { __pyx_t_5 = __pyx_t_7; goto __pyx_L6_bool_binop_done; }
+06490: and (array.null_count == 0 or buffers[0] is not None))
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_array, __pyx_mstate_global->__pyx_n_u_null_count); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6490, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = (__Pyx_PyLong_BoolEqObjC(__pyx_t_1, __pyx_mstate_global->__pyx_int_0, 0, 0)); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 6490, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (!__pyx_t_7) { } else { __pyx_t_5 = __pyx_t_7; goto __pyx_L6_bool_binop_done; } __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_buffers, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6490, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = (__pyx_t_1 != Py_None); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = __pyx_t_7; __pyx_L6_bool_binop_done:; { __pyx_r = __pyx_t_5; } goto __pyx_L0;
06491:
06492:
+06493: cdef int _geohash_slot_for_width(Py_ssize_t width) noexcept:
static int __pyx_f_7questdb_7_client__geohash_slot_for_width(Py_ssize_t __pyx_v_width) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
06494: """The signed GEOHASH slot of this many bytes, or
06495: ``_GEOHASH_DTYPE_NONE``."""
+06496: if width == 1:
__pyx_t_1 = (__pyx_v_width == 1);
if (__pyx_t_1) {
/* … */
}
+06497: return <int>qwp_numpy_dtype.qwp_numpy_geohash_i8
{
__pyx_r = ((int)qwp_numpy_geohash_i8);
}
goto __pyx_L0;
+06498: if width == 2:
__pyx_t_1 = (__pyx_v_width == 2);
if (__pyx_t_1) {
/* … */
}
+06499: return <int>qwp_numpy_dtype.qwp_numpy_geohash_i16
{
__pyx_r = ((int)qwp_numpy_geohash_i16);
}
goto __pyx_L0;
+06500: if width == 4:
__pyx_t_1 = (__pyx_v_width == 4);
if (__pyx_t_1) {
/* … */
}
+06501: return <int>qwp_numpy_dtype.qwp_numpy_geohash_i32
{
__pyx_r = ((int)qwp_numpy_geohash_i32);
}
goto __pyx_L0;
+06502: if width == 8:
__pyx_t_1 = (__pyx_v_width == 8);
if (__pyx_t_1) {
/* … */
}
+06503: return <int>qwp_numpy_dtype.qwp_numpy_geohash_i64
{
__pyx_r = ((int)qwp_numpy_geohash_i64);
}
goto __pyx_L0;
+06504: return _GEOHASH_DTYPE_NONE
{
__pyx_r = __pyx_v_7questdb_7_client__GEOHASH_DTYPE_NONE;
}
goto __pyx_L0;
06505:
06506:
+06507: cdef object _geohash_override_bits(object schema_overrides, object name):
static PyObject *__pyx_f_7questdb_7_client__geohash_override_bits(PyObject *__pyx_v_schema_overrides, PyObject *__pyx_v_name) {
PyObject *__pyx_v_override = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client._geohash_override_bits", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_override);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
06508: """The precision `schema_overrides` gives this column as a GEOHASH,
06509: or ``None`` when it leaves the column out or names another kind.
06510:
06511: The overrides are validated by the time this runs, so a GEOHASH
06512: entry is always a ``('geohash', bits)`` pair.
06513: """
06514: cdef object override
+06515: if not schema_overrides:
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_schema_overrides); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6515, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+06516: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06517: override = schema_overrides.get(name)
__pyx_t_4 = __pyx_v_schema_overrides; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_name}; __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6517, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_v_override = __pyx_t_3; __pyx_t_3 = 0;
+06518: if isinstance(override, tuple) and override[0] == 'geohash':
__pyx_t_1 = PyTuple_Check(__pyx_v_override); if (__pyx_t_1) { } else { __pyx_t_2 = __pyx_t_1; goto __pyx_L5_bool_binop_done; } __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_override, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6518, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_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, 6518, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_2 = __pyx_t_1; __pyx_L5_bool_binop_done:; if (__pyx_t_2) { /* … */ }
+06519: return override[1]
__pyx_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, 6519, __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;
+06520: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
06521:
06522:
+06523: cdef object _pyarrow_signed_int_type(Py_ssize_t width):
static PyObject *__pyx_f_7questdb_7_client__pyarrow_signed_int_type(Py_ssize_t __pyx_v_width) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._pyarrow_signed_int_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_gb_7questdb_7_client_39_dataframe_reinterpret_unsigned_geohash_2generator6(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
06524: """The signed pyarrow integer type of this many bytes."""
+06525: if width == 1:
__pyx_t_1 = (__pyx_v_width == 1);
if (__pyx_t_1) {
/* … */
}
+06526: return _PYARROW.int8()
__pyx_t_3 = __pyx_v_7questdb_7_client__PYARROW;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_int8, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6526, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_2;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_2 = 0;
goto __pyx_L0;
+06527: if width == 2:
__pyx_t_1 = (__pyx_v_width == 2);
if (__pyx_t_1) {
/* … */
}
+06528: return _PYARROW.int16()
__pyx_t_3 = __pyx_v_7questdb_7_client__PYARROW;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_int16, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6528, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_2;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_2 = 0;
goto __pyx_L0;
+06529: if width == 4:
__pyx_t_1 = (__pyx_v_width == 4);
if (__pyx_t_1) {
/* … */
}
+06530: return _PYARROW.int32()
__pyx_t_3 = __pyx_v_7questdb_7_client__PYARROW;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_int32, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6530, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_2;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_2 = 0;
goto __pyx_L0;
+06531: 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, 6531, __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;
06532:
06533:
+06534: cdef object _dataframe_reinterpret_unsigned_geohash(
static PyObject *__pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash(PyObject *__pyx_v_df, PyObject *__pyx_v_schema_overrides) {
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_8___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash *__pyx_cur_scope;
PyObject *__pyx_v_names_geohash = 0;
PyObject *__pyx_gb_7questdb_7_client_39_dataframe_reinterpret_unsigned_geohash_2generator6 = 0;
PyObject *__pyx_r = NULL;
__pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_8___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_8___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_8___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash, __pyx_mstate_global->__pyx_empty_tuple, NULL);
if (unlikely(!__pyx_cur_scope)) {
__pyx_cur_scope = ((struct __pyx_obj_7questdb_7_client___pyx_scope_struct_8___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash *)Py_None);
__Pyx_INCREF(Py_None);
__PYX_ERR(0, 6534, __pyx_L1_error)
} else {
__Pyx_GOTREF((PyObject *)__pyx_cur_scope);
}
__pyx_cur_scope->__pyx_v_schema_overrides = __pyx_v_schema_overrides;
__Pyx_INCREF(__pyx_cur_scope->__pyx_v_schema_overrides);
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_schema_overrides);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client._dataframe_reinterpret_unsigned_geohash", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_names_geohash);
__Pyx_XDECREF(__pyx_gb_7questdb_7_client_39_dataframe_reinterpret_unsigned_geohash_2generator6);
__Pyx_DECREF((PyObject *)__pyx_cur_scope);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_8___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash {
PyObject_HEAD
PyObject *__pyx_v_schema_overrides;
};
06535: object df, object schema_overrides):
06536: """A copy of the frame in which each unsigned integer column bound
06537: for GEOHASH is the signed integer of the same width, holding the
06538: same bits.
06539:
06540: Both write routes carry a GEOHASH only on a signed integer, and the
06541: native Arrow importer refuses an unsigned column outright, so these
06542: columns are given the signed type before either route looks at the
06543: frame. A GEOHASH value is its bit pattern, so the server receives
06544: exactly the bits the unsigned column held. Arrow columns become
06545: views of each chunk, so no data is copied. A NumPy column of a
06546: pandas frame is viewed as signed too, but pandas copies the view
06547: into a new block when it is set back into the frame. An 8- or
06548: 16-bit polars column on polars older than 1.39 refuses to
06549: reinterpret, so it is copied by a wrapping cast (see
06550: `_polars_reinterpret_unsigned_geohash`).
06551:
06552: A column is bound for GEOHASH when `schema_overrides` names it
06553: ``('geohash', bits)``, or when it carries a GEOHASH claim in
06554: ``df.attrs['questdb']`` and `schema_overrides` does not name it:
06555: the override outranks the claim. The claim is how a frame saved
06556: from version 5.0 of this client arrives, since its plain
06557: `to_pandas()` returned a GEOHASH column as an unsigned NumPy
06558: integer, and `convert_dtypes(dtype_backend='pyarrow')` turns that
06559: into an unsigned Arrow column. An override can name an unsigned
06560: column in any frame that takes overrides, so pyarrow and polars
06561: frames are covered too. A one-shot stream, such as a
06562: `RecordBatchReader`, is read only as the write goes, so its
06563: columns keep their own type.
06564:
06565: Only a claim the column's width can carry is taken this way. A
06566: column whose claim is dropped goes out as its own type, so its
06567: values have to stay as they are. An override is taken at any
06568: precision: one too wide for the column is refused by the importer,
06569: which names the range the column can hold. An override of another
06570: kind leaves the column alone, since 'ipv4' and 'char' need the
06571: unsigned type to apply.
06572: """
+06573: cdef object names_geohash = None
__Pyx_INCREF(Py_None);
__pyx_v_names_geohash = Py_None;
+06574: if _is_pandas_dataframe_object(df):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_df); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6574, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+06575: return _pandas_reinterpret_unsigned_geohash(df, schema_overrides)
__pyx_t_2 = __pyx_cur_scope->__pyx_v_schema_overrides;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_3 = __pyx_f_7questdb_7_client__pandas_reinterpret_unsigned_geohash(__pyx_v_df, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6575, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_3;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_3 = 0;
goto __pyx_L0;
+06576: if schema_overrides:
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_schema_overrides); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6576, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
06577: names_geohash = any(
+06578: _geohash_override_bits(schema_overrides, name) is not None
static PyObject *__pyx_pf_7questdb_7_client_39_dataframe_reinterpret_unsigned_geohash_genexpr(PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_9_genexpr *__pyx_cur_scope;
PyObject *__pyx_r = NULL;
__pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_9_genexpr *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_9_genexpr(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_9_genexpr, __pyx_mstate_global->__pyx_empty_tuple, NULL);
if (unlikely(!__pyx_cur_scope)) {
__pyx_cur_scope = ((struct __pyx_obj_7questdb_7_client___pyx_scope_struct_9_genexpr *)Py_None);
__Pyx_INCREF(Py_None);
__PYX_ERR(0, 6578, __pyx_L1_error)
} else {
__Pyx_GOTREF((PyObject *)__pyx_cur_scope);
}
__pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_8___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash *) __pyx_self;
__Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_outer_scope);
__Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_outer_scope);
__pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
__Pyx_INCREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
{
__pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7questdb_7_client_39_dataframe_reinterpret_unsigned_geohash_2generator6, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[6]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_dataframe_reinterpret_unsigned, __pyx_mstate_global->__pyx_n_u_questdb__client); if (unlikely(!gen)) __PYX_ERR(0, 6578, __pyx_L1_error)
__Pyx_DECREF(__pyx_cur_scope);
__Pyx_RefNannyFinishContext();
return (PyObject *) gen;
}
/* function exit code */
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client._dataframe_reinterpret_unsigned_geohash.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__Pyx_DECREF((PyObject *)__pyx_cur_scope);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_gb_7questdb_7_client_39_dataframe_reinterpret_unsigned_geohash_2generator6(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("genexpr", 0);
__pyx_L3_first_run:;
if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 6578, __pyx_L1_error)
/* … */
if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_schema_overrides)) { __Pyx_RaiseClosureNameError("schema_overrides"); __PYX_ERR(0, 6578, __pyx_L1_error) }
__pyx_t_4 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_schema_overrides;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_5 = __pyx_f_7questdb_7_client__geohash_override_bits(__pyx_t_4, __pyx_cur_scope->__pyx_v_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6578, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_6 = (__pyx_t_5 != Py_None);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (__pyx_t_6) {
/* … */
{
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, 6578, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_2 = __Pyx_Generator_GetInlinedResult(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6578, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF_SET(__pyx_v_names_geohash, __pyx_t_2);
__pyx_t_2 = 0;
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_9_genexpr {
PyObject_HEAD
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_8___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash *__pyx_outer_scope;
PyObject *__pyx_genexpr_arg_0;
PyObject *__pyx_v_name;
};
+06579: for name in schema_overrides)
if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 6579, __pyx_L1_error) }
if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_genexpr_arg_0)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_genexpr_arg_0)) {
__pyx_t_1 = __pyx_cur_scope->__pyx_genexpr_arg_0; __Pyx_INCREF(__pyx_t_1);
__pyx_t_2 = 0;
__pyx_t_3 = NULL;
} else {
__pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_genexpr_arg_0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6579, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6579, __pyx_L1_error)
}
for (;;) {
if (likely(!__pyx_t_3)) {
if (likely(PyList_CheckExact(__pyx_t_1))) {
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
#if !CYTHON_ASSUME_SAFE_SIZE
if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6579, __pyx_L1_error)
#endif
if (__pyx_t_2 >= __pyx_temp) break;
}
__pyx_t_4 = __Pyx_PyList_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, 6579, __pyx_L1_error)
#endif
if (__pyx_t_2 >= __pyx_temp) break;
}
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
__pyx_t_4 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2));
#else
__pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2);
#endif
++__pyx_t_2;
}
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6579, __pyx_L1_error)
} else {
__pyx_t_4 = __pyx_t_3(__pyx_t_1);
if (unlikely(!__pyx_t_4)) {
PyObject* exc_type = PyErr_Occurred();
if (exc_type) {
if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 6579, __pyx_L1_error)
PyErr_Clear();
}
break;
}
}
__Pyx_GOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_name);
__Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_name, __pyx_t_4);
__Pyx_GIVEREF(__pyx_t_4);
__pyx_t_4 = 0;
/* … */
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/*else*/ {
+06580: if not names_geohash:
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_names_geohash); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6580, __pyx_L1_error) __pyx_t_4 = (!__pyx_t_1); if (__pyx_t_4) { /* … */ }
+06581: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06582: if _is_polars_dataframe_or_lazy(df):
__pyx_t_4 = __pyx_f_7questdb_7_client__is_polars_dataframe_or_lazy(__pyx_v_df); if (unlikely(__pyx_t_4 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6582, __pyx_L1_error) if (__pyx_t_4) { /* … */ }
+06583: return _polars_reinterpret_unsigned_geohash(df, schema_overrides)
__pyx_t_2 = __pyx_cur_scope->__pyx_v_schema_overrides;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_3 = __pyx_f_7questdb_7_client__polars_reinterpret_unsigned_geohash(__pyx_v_df, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6583, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_3;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_3 = 0;
goto __pyx_L0;
06584: # Checked by module before pyarrow is asked, so a frame of another
06585: # kind never makes this import pyarrow.
+06586: if (type(df).__module__.startswith('pyarrow')
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_df)), __pyx_mstate_global->__pyx_n_u_module); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6586, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = __pyx_t_5; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_n_u_pyarrow}; __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_startswith, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6586, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6586, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_1) { } else { __pyx_t_4 = __pyx_t_1; goto __pyx_L8_bool_binop_done; } /* … */ if (__pyx_t_4) { /* … */ }
+06587: and _dataframe_try_import_pyarrow()
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_try_import_pyarrow(); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6587, __pyx_L1_error) if (__pyx_t_1) { } else { __pyx_t_4 = __pyx_t_1; goto __pyx_L8_bool_binop_done; }
+06588: and isinstance(df, (_PYARROW.Table, _PYARROW.RecordBatch))):
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_Table); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6588, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_RecordBatch); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6588, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = PyObject_IsInstance(__pyx_v_df, __pyx_t_3); if (!__pyx_t_7) { } else { __pyx_t_1 = __pyx_t_7; goto __pyx_L11_bool_binop_done; } __pyx_t_7 = PyObject_IsInstance(__pyx_v_df, __pyx_t_5); __pyx_t_1 = __pyx_t_7; __pyx_L11_bool_binop_done:; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_4 = __pyx_t_1; __pyx_L8_bool_binop_done:;
+06589: return _pyarrow_reinterpret_unsigned_geohash(df, schema_overrides)
__pyx_t_3 = __pyx_cur_scope->__pyx_v_schema_overrides;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_5 = __pyx_f_7questdb_7_client__pyarrow_reinterpret_unsigned_geohash(__pyx_v_df, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6589, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_5;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_5 = 0;
goto __pyx_L0;
+06590: 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;
06591:
06592:
+06593: cdef object _pandas_reinterpret_unsigned_geohash(
static PyObject *__pyx_f_7questdb_7_client__pandas_reinterpret_unsigned_geohash(PyObject *__pyx_v_df, PyObject *__pyx_v_schema_overrides) {
PyObject *__pyx_v_cols_meta = 0;
PyObject *__pyx_v_arrow_dtype = 0;
PyObject *__pyx_v_dtype = 0;
PyObject *__pyx_v_meta = 0;
PyObject *__pyx_v_bits = 0;
PyObject *__pyx_v_ty = 0;
PyObject *__pyx_v_col = 0;
PyObject *__pyx_v_chunked = 0;
PyObject *__pyx_v_out = 0;
PyObject *__pyx_v_convert = 0;
Py_ssize_t __pyx_v_width;
int __pyx_v_slot;
int __pyx_v_overridden;
PyObject *__pyx_v_pos = NULL;
PyObject *__pyx_v_name = NULL;
PyObject *__pyx_9genexpr19__pyx_v_chunk = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_XDECREF(__pyx_t_18);
__Pyx_XDECREF(__pyx_t_19);
__Pyx_AddTraceback("questdb._client._pandas_reinterpret_unsigned_geohash", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_cols_meta);
__Pyx_XDECREF(__pyx_v_arrow_dtype);
__Pyx_XDECREF(__pyx_v_dtype);
__Pyx_XDECREF(__pyx_v_meta);
__Pyx_XDECREF(__pyx_v_bits);
__Pyx_XDECREF(__pyx_v_ty);
__Pyx_XDECREF(__pyx_v_col);
__Pyx_XDECREF(__pyx_v_chunked);
__Pyx_XDECREF(__pyx_v_out);
__Pyx_XDECREF(__pyx_v_convert);
__Pyx_XDECREF(__pyx_v_pos);
__Pyx_XDECREF(__pyx_v_name);
__Pyx_XDECREF(__pyx_9genexpr19__pyx_v_chunk);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
06594: object df, object schema_overrides):
06595: """`_dataframe_reinterpret_unsigned_geohash` for a pandas frame."""
06596: cdef object cols_meta, arrow_dtype, dtype, meta, bits, ty, col
06597: cdef object chunked, out
06598: cdef list convert
06599: cdef Py_ssize_t width
06600: cdef int slot
06601: cdef bint overridden
+06602: cols_meta = _roundtrip_columns_meta(df)
__pyx_t_1 = __pyx_f_7questdb_7_client__roundtrip_columns_meta(__pyx_v_df); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6602, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_cols_meta = __pyx_t_1; __pyx_t_1 = 0;
+06603: if not cols_meta and not schema_overrides:
__pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_cols_meta); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6603, __pyx_L1_error) __pyx_t_4 = (!__pyx_t_3); if (__pyx_t_4) { } else { __pyx_t_2 = __pyx_t_4; goto __pyx_L4_bool_binop_done; } __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_schema_overrides); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 6603, __pyx_L1_error) __pyx_t_3 = (!__pyx_t_4); __pyx_t_2 = __pyx_t_3; __pyx_L4_bool_binop_done:; if (__pyx_t_2) { /* … */ }
+06604: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06605: _dataframe_may_import_deps()
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6605, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+06606: arrow_dtype = getattr(_PANDAS, 'ArrowDtype', None)
__pyx_t_1 = __pyx_v_7questdb_7_client__PANDAS; __Pyx_INCREF(__pyx_t_1); __pyx_t_5 = __Pyx_GetAttr3(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ArrowDtype, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6606, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_arrow_dtype = __pyx_t_5; __pyx_t_5 = 0;
+06607: convert = []
__pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6607, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_v_convert = ((PyObject*)__pyx_t_5); __pyx_t_5 = 0;
06608: # Walked by position rather than by label: `dtypes[name]` on a frame
06609: # with duplicate column names hands back a Series, not a dtype.
+06610: for pos, (name, dtype) in enumerate(zip(df.columns, df.dtypes)):
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_0); __pyx_t_5 = __pyx_mstate_global->__pyx_int_0; __pyx_t_6 = NULL; __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6610, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6610, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = 1; { PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_7, __pyx_t_8}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_zip, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6610, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { __pyx_t_8 = __pyx_t_1; __Pyx_INCREF(__pyx_t_8); __pyx_t_10 = 0; __pyx_t_11 = NULL; } else { __pyx_t_10 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6610, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_11 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_8); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6610, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; for (;;) { if (likely(!__pyx_t_11)) { if (likely(PyList_CheckExact(__pyx_t_8))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_8); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6610, __pyx_L1_error) #endif if (__pyx_t_10 >= __pyx_temp) break; } __pyx_t_1 = __Pyx_PyList_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, 6610, __pyx_L1_error) #endif if (__pyx_t_10 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_10)); #else __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_8, __pyx_t_10); #endif ++__pyx_t_10; } if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6610, __pyx_L1_error) } else { __pyx_t_1 = __pyx_t_11(__pyx_t_8); if (unlikely(!__pyx_t_1)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 6610, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_1); if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 6610, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); __Pyx_INCREF(__pyx_t_7); __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_6); } else { __pyx_t_7 = __Pyx_PyList_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6610, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_7); __pyx_t_6 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6610, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_6); } #else __pyx_t_7 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6610, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6610, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_12 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6610, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_13 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_12); index = 0; __pyx_t_7 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_7)) goto __pyx_L8_unpacking_failed; __Pyx_GOTREF(__pyx_t_7); index = 1; __pyx_t_6 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_6)) goto __pyx_L8_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_12), 2) < (0)) __PYX_ERR(0, 6610, __pyx_L1_error) __pyx_t_13 = NULL; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; goto __pyx_L9_unpacking_done; __pyx_L8_unpacking_failed:; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_13 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 6610, __pyx_L1_error) __pyx_L9_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_6); __pyx_t_6 = 0; __Pyx_INCREF(__pyx_t_5); __Pyx_XDECREF_SET(__pyx_v_pos, __pyx_t_5); __pyx_t_1 = __Pyx_PyLong_AddObjC(__pyx_t_5, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6610, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = __pyx_t_1; __pyx_t_1 = 0; /* … */ __pyx_L6_continue:; } __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+06611: overridden = bool(schema_overrides) and name in schema_overrides
__pyx_t_6 = NULL;
__pyx_t_9 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_schema_overrides};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6611, __pyx_L1_error)
__Pyx_GOTREF((PyObject *)__pyx_t_1);
}
__pyx_t_3 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_t_1)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6611, __pyx_L1_error)
__Pyx_DECREF((PyObject *)__pyx_t_1); __pyx_t_1 = 0;
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L10_bool_binop_done;
}
__pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_name, __pyx_v_schema_overrides, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6611, __pyx_L1_error)
__pyx_t_2 = __pyx_t_3;
__pyx_L10_bool_binop_done:;
__pyx_v_overridden = __pyx_t_2;
+06612: if overridden:
if (__pyx_v_overridden) {
/* … */
goto __pyx_L12;
}
+06613: bits = _geohash_override_bits(schema_overrides, name)
__pyx_t_1 = __pyx_f_7questdb_7_client__geohash_override_bits(__pyx_v_schema_overrides, __pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6613, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_bits, __pyx_t_1); __pyx_t_1 = 0;
+06614: if bits is None:
__pyx_t_2 = (__pyx_v_bits == Py_None);
if (__pyx_t_2) {
/* … */
}
+06615: continue
goto __pyx_L6_continue;
06616: else:
+06617: meta = cols_meta.get(name) if cols_meta else None
/*else*/ {
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_cols_meta); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6617, __pyx_L1_error)
if (__pyx_t_2) {
__pyx_t_7 = __pyx_v_cols_meta;
__Pyx_INCREF(__pyx_t_7);
__pyx_t_9 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_name};
__pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6617, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
}
__pyx_t_1 = __pyx_t_6;
__pyx_t_6 = 0;
} else {
__Pyx_INCREF(Py_None);
__pyx_t_1 = Py_None;
}
__Pyx_XDECREF_SET(__pyx_v_meta, __pyx_t_1);
__pyx_t_1 = 0;
+06618: if _roundtrip_kind(meta) != 'geohash':
__pyx_t_1 = __pyx_f_7questdb_7_client__roundtrip_kind(__pyx_v_meta); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6618, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_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, 6618, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* … */ }
+06619: continue
goto __pyx_L6_continue;
+06620: bits = meta.get('precision_bits') or 0
__pyx_t_7 = __pyx_v_meta;
__Pyx_INCREF(__pyx_t_7);
__pyx_t_9 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_n_u_precision_bits};
__pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6620, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
}
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6620, __pyx_L1_error)
if (!__pyx_t_2) {
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
} else {
__Pyx_INCREF(__pyx_t_6);
__pyx_t_1 = __pyx_t_6;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
goto __pyx_L15_bool_binop_done;
}
__pyx_t_6 = __Pyx_PyLong_From_long(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6620, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_1 = __pyx_t_6;
__pyx_t_6 = 0;
__pyx_L15_bool_binop_done:;
__Pyx_XDECREF_SET(__pyx_v_bits, __pyx_t_1);
__pyx_t_1 = 0;
}
__pyx_L12:;
+06621: if arrow_dtype is not None and isinstance(dtype, arrow_dtype):
__pyx_t_3 = (__pyx_v_arrow_dtype != Py_None);
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L18_bool_binop_done;
}
__pyx_t_3 = PyObject_IsInstance(__pyx_v_dtype, __pyx_v_arrow_dtype); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 6621, __pyx_L1_error)
__pyx_t_2 = __pyx_t_3;
__pyx_L18_bool_binop_done:;
if (__pyx_t_2) {
/* … */
goto __pyx_L17;
}
+06622: if not _dataframe_try_import_pyarrow():
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_try_import_pyarrow(); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6622, __pyx_L1_error) __pyx_t_3 = (!__pyx_t_2); if (__pyx_t_3) { /* … */ }
+06623: continue
goto __pyx_L6_continue;
+06624: ty = dtype.pyarrow_dtype
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_pyarrow_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6624, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_ty, __pyx_t_1); __pyx_t_1 = 0;
+06625: if not _PYARROW.types.is_unsigned_integer(ty):
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6625, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = __pyx_t_7; __Pyx_INCREF(__pyx_t_6); __pyx_t_9 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_ty}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_unsigned_integer, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6625, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6625, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = (!__pyx_t_3); if (__pyx_t_2) { /* … */ }
+06626: continue
goto __pyx_L6_continue;
+06627: width = ty.bit_width // 8
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_ty, __pyx_mstate_global->__pyx_n_u_bit_width); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6627, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = __Pyx_PyLong_FloorDivideObjC(__pyx_t_1, __pyx_mstate_global->__pyx_int_8, 8, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6627, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_14 = __Pyx_PyIndex_AsSsize_t(__pyx_t_7); if (unlikely((__pyx_t_14 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 6627, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_width = __pyx_t_14;
+06628: elif isinstance(dtype, numpy.dtype) and dtype.kind == 'u':
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_numpy); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6628, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6628, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_3 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_1); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 6628, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_3) { } else { __pyx_t_2 = __pyx_t_3; goto __pyx_L22_bool_binop_done; } __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_kind); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6628, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = (__Pyx_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, 6628, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = __pyx_t_3; __pyx_L22_bool_binop_done:; if (__pyx_t_2) { /* … */ goto __pyx_L17; }
+06629: width = dtype.itemsize
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6629, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_14 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_14 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 6629, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_width = __pyx_t_14;
06630: else:
+06631: continue
/*else*/ {
goto __pyx_L6_continue;
}
__pyx_L17:;
+06632: slot = _geohash_slot_for_width(width)
__pyx_v_slot = __pyx_f_7questdb_7_client__geohash_slot_for_width(__pyx_v_width);
+06633: if slot == _GEOHASH_DTYPE_NONE:
__pyx_t_2 = (__pyx_v_slot == __pyx_v_7questdb_7_client__GEOHASH_DTYPE_NONE);
if (__pyx_t_2) {
/* … */
}
+06634: continue
goto __pyx_L6_continue;
06635: # An override is taken at any precision, a claim only at one the
06636: # width can carry; see `_dataframe_reinterpret_unsigned_geohash`.
+06637: if not overridden and (
__pyx_t_3 = (!__pyx_v_overridden);
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L26_bool_binop_done;
}
/* … */
if (__pyx_t_2) {
/* … */
}
+06638: not _is_integral_not_bool(bits)
__pyx_t_3 = __pyx_f_7questdb_7_client__is_integral_not_bool(__pyx_v_bits); if (unlikely(__pyx_t_3 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6638, __pyx_L1_error) __pyx_t_4 = (!__pyx_t_3); if (!__pyx_t_4) { } else { __pyx_t_2 = __pyx_t_4; goto __pyx_L26_bool_binop_done; }
+06639: or not 1 <= int(bits) <= _geohash_dtype_max_bits(slot)):
__pyx_t_1 = __Pyx_PyNumber_Int(__pyx_v_bits); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6639, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_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, 6639, __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, 6639, __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, 6639, __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:;
+06640: continue
goto __pyx_L6_continue;
+06641: convert.append((pos, width))
__pyx_t_1 = PyLong_FromSsize_t(__pyx_v_width); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6641, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6641, __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, 6641, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_1); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1) != (0)) __PYX_ERR(0, 6641, __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, 6641, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+06642: if not convert:
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_convert);
if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 6642, __pyx_L1_error)
__pyx_t_2 = (__pyx_temp != 0);
}
__pyx_t_3 = (!__pyx_t_2);
if (__pyx_t_3) {
/* … */
}
+06643: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06644: out = df.copy(deep=False)
__pyx_t_8 = __pyx_v_df; __Pyx_INCREF(__pyx_t_8); #if CYTHON_VECTORCALL #endif __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, 6644, __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, 6644, __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; #if CYTHON_VECTORCALL #endif __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6644, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } __pyx_v_out = __pyx_t_5; __pyx_t_5 = 0;
+06645: for pos, width in convert:
__pyx_t_5 = __pyx_v_convert; __Pyx_INCREF(__pyx_t_5); __pyx_t_10 = 0; for (;;) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_5); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6645, __pyx_L1_error) #endif if (__pyx_t_10 >= __pyx_temp) break; } __pyx_t_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, 6645, __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, 6645, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0); __Pyx_INCREF(__pyx_t_8); __pyx_t_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, 6645, __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, 6645, __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, 6645, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6645, __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, 6645, __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, 6645, __pyx_L1_error) __pyx_t_13 = NULL; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L34_unpacking_done; __pyx_L33_unpacking_failed:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_13 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 6645, __pyx_L1_error) __pyx_L34_unpacking_done:; } __pyx_t_14 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_14 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 6645, __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;
+06646: 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, 6646, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6646, __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, 6646, __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, 6646, __pyx_L1_error); __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6646, __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;
+06647: if arrow_dtype is not None and isinstance(col.dtype, arrow_dtype):
__pyx_t_2 = (__pyx_v_arrow_dtype != Py_None);
if (__pyx_t_2) {
} else {
__pyx_t_3 = __pyx_t_2;
goto __pyx_L36_bool_binop_done;
}
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_col, __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6647, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_2 = PyObject_IsInstance(__pyx_t_8, __pyx_v_arrow_dtype); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 6647, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_3 = __pyx_t_2;
__pyx_L36_bool_binop_done:;
if (__pyx_t_3) {
/* … */
goto __pyx_L35;
}
+06648: ty = _pyarrow_signed_int_type(width)
__pyx_t_8 = __pyx_f_7questdb_7_client__pyarrow_signed_int_type(__pyx_v_width); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6648, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_XDECREF_SET(__pyx_v_ty, __pyx_t_8); __pyx_t_8 = 0;
+06649: chunked = col.array.__arrow_array__()
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_col, __pyx_mstate_global->__pyx_n_u_array); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6649, __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, 6649, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_XDECREF_SET(__pyx_v_chunked, __pyx_t_8); __pyx_t_8 = 0;
+06650: _dataframe_set_column(
__pyx_t_20 = __pyx_f_7questdb_7_client__dataframe_set_column(__pyx_v_out, __pyx_v_df, __pyx_v_pos, __pyx_t_8); if (unlikely(__pyx_t_20 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6650, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
06651: out, df, pos,
+06652: _PANDAS.arrays.ArrowExtensionArray(_PYARROW.chunked_array(
__pyx_t_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, 6652, __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 */ /* … */ #endif __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[18]; if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 6652, __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, 6652, __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; #if CYTHON_VECTORCALL #endif __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6652, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); } __pyx_t_9 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_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, 6652, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); }
+06653: [chunk.view(ty) for chunk in chunked.chunks],
__pyx_t_16 = PyList_New(0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 6653, __pyx_L40_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_chunked, __pyx_mstate_global->__pyx_n_u_chunks); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 6653, __pyx_L40_error) __Pyx_GOTREF(__pyx_t_17); if (likely(PyList_CheckExact(__pyx_t_17)) || PyTuple_CheckExact(__pyx_t_17)) { __pyx_t_18 = __pyx_t_17; __Pyx_INCREF(__pyx_t_18); __pyx_t_14 = 0; __pyx_t_11 = NULL; } else { __pyx_t_14 = -1; __pyx_t_18 = PyObject_GetIter(__pyx_t_17); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 6653, __pyx_L40_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_11 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_18); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6653, __pyx_L40_error) } __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; for (;;) { if (likely(!__pyx_t_11)) { if (likely(PyList_CheckExact(__pyx_t_18))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_18); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6653, __pyx_L40_error) #endif if (__pyx_t_14 >= __pyx_temp) break; } __pyx_t_17 = __Pyx_PyList_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, 6653, __pyx_L40_error) #endif if (__pyx_t_14 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_17 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_18, __pyx_t_14)); #else __pyx_t_17 = __Pyx_PySequence_ITEM(__pyx_t_18, __pyx_t_14); #endif ++__pyx_t_14; } if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 6653, __pyx_L40_error) } else { __pyx_t_17 = __pyx_t_11(__pyx_t_18); if (unlikely(!__pyx_t_17)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 6653, __pyx_L40_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_17); __Pyx_XDECREF_SET(__pyx_9genexpr19__pyx_v_chunk, __pyx_t_17); __pyx_t_17 = 0; __pyx_t_19 = __pyx_9genexpr19__pyx_v_chunk; __Pyx_INCREF(__pyx_t_19); __pyx_t_9 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_19, __pyx_v_ty}; __pyx_t_17 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_view, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0; if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 6653, __pyx_L40_error) __Pyx_GOTREF(__pyx_t_17); } __Pyx_GIVEREF(__pyx_t_17); if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_t_16, __pyx_t_17))) __PYX_ERR(0, 6653, __pyx_L40_error) __pyx_t_17 = 0; } __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_XDECREF(__pyx_9genexpr19__pyx_v_chunk); __pyx_9genexpr19__pyx_v_chunk = 0; goto __pyx_L44_exit_scope; __pyx_L40_error:; __Pyx_XDECREF(__pyx_9genexpr19__pyx_v_chunk); __pyx_9genexpr19__pyx_v_chunk = 0; goto __pyx_L1_error; __pyx_L44_exit_scope:; } /* exit inner scope */
+06654: type=ty)))
#if CYTHON_VECTORCALL
06655: else:
+06656: _dataframe_set_column(
/*else*/ {
/* … */
__pyx_t_20 = __pyx_f_7questdb_7_client__dataframe_set_column(__pyx_v_out, __pyx_v_df, __pyx_v_pos, __pyx_t_8); if (unlikely(__pyx_t_20 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6656, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
__pyx_L35:;
+06657: out, df, pos, col.to_numpy().view(f'int{width * 8}'))
__pyx_t_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, 6657, __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, 6657, __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, 6657, __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, 6657, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
}
+06658: out.attrs = dict(df.attrs)
__pyx_t_8 = NULL; __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_attrs); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_9 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_6}; __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(&PyDict_Type), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } if (__Pyx_PyObject_SetAttrStr(__pyx_v_out, __pyx_mstate_global->__pyx_n_u_attrs, __pyx_t_5) < (0)) __PYX_ERR(0, 6658, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+06659: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
06660:
06661:
+06662: cdef object _pyarrow_reinterpret_unsigned_geohash(
static PyObject *__pyx_f_7questdb_7_client__pyarrow_reinterpret_unsigned_geohash(PyObject *__pyx_v_table, PyObject *__pyx_v_schema_overrides) {
PyObject *__pyx_v_schema = 0;
PyObject *__pyx_v_columns = 0;
PyObject *__pyx_v_field = 0;
PyObject *__pyx_v_ty = 0;
PyObject *__pyx_v_col = 0;
Py_ssize_t __pyx_v_i;
Py_ssize_t __pyx_v_width;
PyObject *__pyx_9genexpr20__pyx_v_chunk = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_AddTraceback("questdb._client._pyarrow_reinterpret_unsigned_geohash", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_schema);
__Pyx_XDECREF(__pyx_v_columns);
__Pyx_XDECREF(__pyx_v_field);
__Pyx_XDECREF(__pyx_v_ty);
__Pyx_XDECREF(__pyx_v_col);
__Pyx_XDECREF(__pyx_9genexpr20__pyx_v_chunk);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
06663: object table, object schema_overrides):
06664: """`_dataframe_reinterpret_unsigned_geohash` for a pyarrow `Table`
06665: or `RecordBatch`.
06666:
06667: Each retyped field keeps its name, nullability and metadata, and
06668: the schema keeps its own metadata, so everything the importer reads
06669: from them arrives as it was.
06670: """
+06671: cdef object schema = table.schema
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_table, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6671, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_schema = __pyx_t_1; __pyx_t_1 = 0;
+06672: cdef object columns = None
__Pyx_INCREF(Py_None);
__pyx_v_columns = Py_None;
06673: cdef object field, ty, col
06674: cdef Py_ssize_t i, width
+06675: for i in range(len(schema)):
__pyx_t_2 = PyObject_Length(__pyx_v_schema); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 6675, __pyx_L1_error) __pyx_t_3 = __pyx_t_2; for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { __pyx_v_i = __pyx_t_4;
+06676: field = schema.field(i)
__pyx_t_5 = __pyx_v_schema;
__Pyx_INCREF(__pyx_t_5);
__pyx_t_6 = PyLong_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6676, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_field, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6676, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_XDECREF_SET(__pyx_v_field, __pyx_t_1);
__pyx_t_1 = 0;
+06677: if _geohash_override_bits(schema_overrides, field.name) is None:
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = __pyx_f_7questdb_7_client__geohash_override_bits(__pyx_v_schema_overrides, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_8 = (__pyx_t_6 == Py_None); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (__pyx_t_8) { /* … */ }
+06678: continue
goto __pyx_L3_continue;
+06679: if not _PYARROW.types.is_unsigned_integer(field.type):
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6679, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_1 = __pyx_t_5; __Pyx_INCREF(__pyx_t_1); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_type); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6679, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_7 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_9}; __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_unsigned_integer, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6679, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); } __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 6679, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_10 = (!__pyx_t_8); if (__pyx_t_10) { /* … */ }
+06680: continue
goto __pyx_L3_continue;
+06681: width = field.type.bit_width // 8
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_type); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6681, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_bit_width); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6681, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyLong_FloorDivideObjC(__pyx_t_5, __pyx_mstate_global->__pyx_int_8, 8, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6681, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 6681, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_width = __pyx_t_11;
+06682: if _geohash_slot_for_width(width) == _GEOHASH_DTYPE_NONE:
__pyx_t_10 = (__pyx_f_7questdb_7_client__geohash_slot_for_width(__pyx_v_width) == __pyx_v_7questdb_7_client__GEOHASH_DTYPE_NONE);
if (__pyx_t_10) {
/* … */
}
+06683: continue
goto __pyx_L3_continue;
+06684: ty = _pyarrow_signed_int_type(width)
__pyx_t_6 = __pyx_f_7questdb_7_client__pyarrow_signed_int_type(__pyx_v_width); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6684, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_XDECREF_SET(__pyx_v_ty, __pyx_t_6); __pyx_t_6 = 0;
+06685: if columns is None:
__pyx_t_10 = (__pyx_v_columns == Py_None);
if (__pyx_t_10) {
/* … */
}
+06686: columns = list(table.columns)
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_table, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6686, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PySequence_ListKeepNew(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6686, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF_SET(__pyx_v_columns, __pyx_t_5); __pyx_t_5 = 0;
+06687: col = columns[i]
__pyx_t_5 = __Pyx_GetItemInt(__pyx_v_columns, __pyx_v_i, Py_ssize_t, 1, PyLong_FromSsize_t, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6687, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_XDECREF_SET(__pyx_v_col, __pyx_t_5); __pyx_t_5 = 0;
+06688: if isinstance(col, _PYARROW.ChunkedArray):
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_ChunkedArray); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6688, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_10 = PyObject_IsInstance(__pyx_v_col, __pyx_t_5); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 6688, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_10) { /* … */ goto __pyx_L9; }
+06689: columns[i] = _PYARROW.chunked_array(
__pyx_t_6 = __pyx_v_7questdb_7_client__PYARROW;
__Pyx_INCREF(__pyx_t_6);
{ /* enter inner scope */
/* … */
#endif
__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[18];
if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6689, __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, 6689, __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;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6689, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
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, 6689, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+06690: [chunk.view(ty) for chunk in col.chunks], type=ty)
__pyx_t_9 = PyList_New(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6690, __pyx_L12_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_col, __pyx_mstate_global->__pyx_n_u_chunks); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6690, __pyx_L12_error) __Pyx_GOTREF(__pyx_t_1); if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { __pyx_t_12 = __pyx_t_1; __Pyx_INCREF(__pyx_t_12); __pyx_t_11 = 0; __pyx_t_13 = NULL; } else { __pyx_t_11 = -1; __pyx_t_12 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6690, __pyx_L12_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_13 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 6690, __pyx_L12_error) } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; for (;;) { if (likely(!__pyx_t_13)) { if (likely(PyList_CheckExact(__pyx_t_12))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_12); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6690, __pyx_L12_error) #endif if (__pyx_t_11 >= __pyx_temp) break; } __pyx_t_1 = __Pyx_PyList_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, 6690, __pyx_L12_error) #endif if (__pyx_t_11 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_12, __pyx_t_11)); #else __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_12, __pyx_t_11); #endif ++__pyx_t_11; } if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6690, __pyx_L12_error) } else { __pyx_t_1 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_1)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 6690, __pyx_L12_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_9genexpr20__pyx_v_chunk, __pyx_t_1); __pyx_t_1 = 0; __pyx_t_14 = __pyx_9genexpr20__pyx_v_chunk; __Pyx_INCREF(__pyx_t_14); __pyx_t_7 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_14, __pyx_v_ty}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_view, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6690, __pyx_L12_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_GIVEREF(__pyx_t_1); if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_t_9, __pyx_t_1))) __PYX_ERR(0, 6690, __pyx_L12_error) __pyx_t_1 = 0; } __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_XDECREF(__pyx_9genexpr20__pyx_v_chunk); __pyx_9genexpr20__pyx_v_chunk = 0; goto __pyx_L16_exit_scope; __pyx_L12_error:; __Pyx_XDECREF(__pyx_9genexpr20__pyx_v_chunk); __pyx_9genexpr20__pyx_v_chunk = 0; goto __pyx_L1_error; __pyx_L16_exit_scope:; } /* exit inner scope */ #if CYTHON_VECTORCALL
06691: else:
+06692: columns[i] = col.view(ty)
/*else*/ {
__pyx_t_12 = __pyx_v_col;
__Pyx_INCREF(__pyx_t_12);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_v_ty};
__pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_view, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6692, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
if (unlikely((__Pyx_SetItemInt(__pyx_v_columns, __pyx_v_i, __pyx_t_5, Py_ssize_t, 1, PyLong_FromSsize_t, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 6692, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
}
__pyx_L9:;
+06693: schema = schema.set(i, field.with_type(ty))
__pyx_t_12 = __pyx_v_schema;
__Pyx_INCREF(__pyx_t_12);
__pyx_t_9 = PyLong_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6693, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__pyx_t_1 = __pyx_v_field;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_ty};
__pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_with_type, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6693, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
}
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_12, __pyx_t_9, __pyx_t_6};
__pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_set, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6693, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
__Pyx_DECREF_SET(__pyx_v_schema, __pyx_t_5);
__pyx_t_5 = 0;
__pyx_L3_continue:;
}
+06694: if columns is None:
__pyx_t_10 = (__pyx_v_columns == Py_None);
if (__pyx_t_10) {
/* … */
}
+06695: return table
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_table);
__pyx_r = __pyx_v_table;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06696: return type(table).from_arrays(columns, schema=schema)
__pyx_t_6 = ((PyObject *)Py_TYPE(__pyx_v_table)); __Pyx_INCREF(__pyx_t_6); #if CYTHON_VECTORCALL #endif __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[20]; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6696, __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, 6696, __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; #if CYTHON_VECTORCALL #endif __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6696, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_5; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_5 = 0; goto __pyx_L0;
06697:
06698:
+06699: cdef object _polars_reinterpret_unsigned_geohash(
static PyObject *__pyx_f_7questdb_7_client__polars_reinterpret_unsigned_geohash(PyObject *__pyx_v_df, PyObject *__pyx_v_schema_overrides) {
PyObject *__pyx_v_schema = 0;
PyObject *__pyx_v_name = 0;
PyObject *__pyx_v_dtype = 0;
PyObject *__pyx_v_unsigned = 0;
PyObject *__pyx_v_narrow = 0;
PyObject *__pyx_v_exprs = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_AddTraceback("questdb._client._polars_reinterpret_unsigned_geohash", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_schema);
__Pyx_XDECREF(__pyx_v_name);
__Pyx_XDECREF(__pyx_v_dtype);
__Pyx_XDECREF(__pyx_v_unsigned);
__Pyx_XDECREF(__pyx_v_narrow);
__Pyx_XDECREF(__pyx_v_exprs);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
06700: object df, object schema_overrides):
06701: """`_dataframe_reinterpret_unsigned_geohash` for a polars
06702: `DataFrame` or `LazyFrame`; a `LazyFrame` stays lazy.
06703:
06704: Each column keeps its bits. `reinterpret(signed=True)` does this
06705: without copying, but polars older than 1.39 accepts it only on 32-
06706: and 64-bit integers. On such a polars an 8- or 16-bit column takes
06707: a wrapping cast to the signed type of its width instead: the cast
06708: reduces each value modulo 2**width, which for the same width is
06709: the same bit pattern, and it copies the column. Nulls stay null
06710: either way.
06711: """
06712: cdef object schema, name, dtype
06713: cdef tuple unsigned = (
+06714: _POLARS.UInt8, _POLARS.UInt16, _POLARS.UInt32, _POLARS.UInt64)
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_UInt8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6714, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_UInt16); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6714, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_UInt32); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6714, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_UInt64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6714, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6714, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_1); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1) != (0)) __PYX_ERR(0, 6714, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_2); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2) != (0)) __PYX_ERR(0, 6714, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_3); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3) != (0)) __PYX_ERR(0, 6714, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_4); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_4) != (0)) __PYX_ERR(0, 6714, __pyx_L1_error); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_v_unsigned = ((PyObject*)__pyx_t_5); __pyx_t_5 = 0;
+06715: cdef dict narrow = {_POLARS.UInt8: _POLARS.Int8,
__pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6715, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_UInt8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6715, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_Int8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6715, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_5, __pyx_t_4, __pyx_t_3) < (0)) __PYX_ERR(0, 6715, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06716: _POLARS.UInt16: _POLARS.Int16}
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_UInt16); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6716, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_Int16); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6716, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_t_5, __pyx_t_3, __pyx_t_4) < (0)) __PYX_ERR(0, 6715, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_narrow = ((PyObject*)__pyx_t_5); __pyx_t_5 = 0;
+06717: cdef list exprs = []
__pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6717, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_v_exprs = ((PyObject*)__pyx_t_5); __pyx_t_5 = 0;
+06718: schema = (df.collect_schema() if hasattr(df, 'collect_schema')
__pyx_t_6 = __Pyx_HasAttr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_collect_schema); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 6718, __pyx_L1_error) if (__pyx_t_6) { __pyx_t_3 = __pyx_v_df; __Pyx_INCREF(__pyx_t_3); __pyx_t_7 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_collect_schema, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6718, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_5 = __pyx_t_4; __pyx_t_4 = 0; } else {
+06719: else df.schema)
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6719, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __pyx_t_4; __pyx_t_4 = 0; } __pyx_v_schema = __pyx_t_5; __pyx_t_5 = 0;
+06720: for name, dtype in schema.items():
__pyx_t_8 = 0;
if (unlikely(__pyx_v_schema == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
__PYX_ERR(0, 6720, __pyx_L1_error)
}
__pyx_t_4 = __Pyx_dict_iterator(__pyx_v_schema, 0, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6720, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__pyx_t_5 = __pyx_t_4;
__pyx_t_4 = 0;
while (1) {
__pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_9, &__pyx_t_8, &__pyx_t_4, &__pyx_t_3, NULL, __pyx_t_10);
if (unlikely(__pyx_t_11 == 0)) break;
if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 6720, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_GOTREF(__pyx_t_3);
__Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_4);
__pyx_t_4 = 0;
__Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_3);
__pyx_t_3 = 0;
+06721: if (dtype in unsigned
__pyx_t_12 = (__Pyx_PySequence_ContainsTF(__pyx_v_dtype, __pyx_v_unsigned, Py_EQ)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 6721, __pyx_L1_error) if (__pyx_t_12) { } else { __pyx_t_6 = __pyx_t_12; goto __pyx_L6_bool_binop_done; } /* … */ if (__pyx_t_6) { /* … */ } } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+06722: and _geohash_override_bits(schema_overrides, name)
__pyx_t_3 = __pyx_f_7questdb_7_client__geohash_override_bits(__pyx_v_schema_overrides, __pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6722, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3);
+06723: is not None):
__pyx_t_12 = (__pyx_t_3 != Py_None);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_6 = __pyx_t_12;
__pyx_L6_bool_binop_done:;
+06724: if dtype in narrow and not _polars_reinterprets_narrow_ints():
__pyx_t_12 = (__Pyx_PyDict_ContainsTF(__pyx_v_dtype, __pyx_v_narrow, Py_EQ)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 6724, __pyx_L1_error) if (__pyx_t_12) { } else { __pyx_t_6 = __pyx_t_12; goto __pyx_L9_bool_binop_done; } __pyx_t_12 = __pyx_f_7questdb_7_client__polars_reinterprets_narrow_ints(); if (unlikely(__pyx_t_12 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6724, __pyx_L1_error) __pyx_t_13 = (!__pyx_t_12); __pyx_t_6 = __pyx_t_13; __pyx_L9_bool_binop_done:; if (__pyx_t_6) { /* … */ goto __pyx_L8; }
+06725: exprs.append(_POLARS.col(name).cast(
__pyx_t_1 = __pyx_v_7questdb_7_client__POLARS;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_name};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_col, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6725, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_4 = __pyx_t_2;
__Pyx_INCREF(__pyx_t_4);
/* … */
#endif
__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[41];
if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 6725, __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, 6725, __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;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6725, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__pyx_t_15 = __Pyx_PyList_Append(__pyx_v_exprs, __pyx_t_3); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(0, 6725, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
{
PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_wrap_numerical};
__pyx_mstate_global->__pyx_tuple[41] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[41])) __PYX_ERR(0, 6725, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[41]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[41]);
+06726: narrow[dtype], wrap_numerical=True))
__pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_narrow, __pyx_v_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6726, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); #if CYTHON_VECTORCALL
06727: else:
+06728: exprs.append(_POLARS.col(name).reinterpret(signed=True))
/*else*/ {
__pyx_t_1 = __pyx_v_7questdb_7_client__POLARS;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_name};
__pyx_t_14 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_col, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 6728, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_14);
}
__pyx_t_2 = __pyx_t_14;
__Pyx_INCREF(__pyx_t_2);
#if CYTHON_VECTORCALL
#endif
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, Py_True};
#if CYTHON_VECTORCALL
__pyx_t_1 = __pyx_mstate_global->__pyx_tuple[22];
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6728, __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, 6728, __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;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6728, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__pyx_t_15 = __Pyx_PyList_Append(__pyx_v_exprs, __pyx_t_3); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(0, 6728, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
}
__pyx_L8:;
+06729: if not exprs:
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_exprs);
if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 6729, __pyx_L1_error)
__pyx_t_6 = (__pyx_temp != 0);
}
__pyx_t_13 = (!__pyx_t_6);
if (__pyx_t_13) {
/* … */
}
+06730: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06731: 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, 6731, __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;
06732:
06733:
+06734: cdef object _dataframe_normalize_claimed_arrow(object df):
static PyObject *__pyx_f_7questdb_7_client__dataframe_normalize_claimed_arrow(PyObject *__pyx_v_df) {
PyObject *__pyx_v_cols_meta = 0;
PyObject *__pyx_v_arrow_dtype = 0;
PyObject *__pyx_v_types = 0;
PyObject *__pyx_v_dtype = 0;
PyObject *__pyx_v_raw_ty = 0;
PyObject *__pyx_v_ty = 0;
PyObject *__pyx_v_meta = 0;
PyObject *__pyx_v_out = 0;
PyObject *__pyx_v_target_dtype = 0;
PyObject *__pyx_v_kind = 0;
PyObject *__pyx_v_convert = 0;
PyObject *__pyx_v_pos = NULL;
PyObject *__pyx_v_name = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_AddTraceback("questdb._client._dataframe_normalize_claimed_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_cols_meta);
__Pyx_XDECREF(__pyx_v_arrow_dtype);
__Pyx_XDECREF(__pyx_v_types);
__Pyx_XDECREF(__pyx_v_dtype);
__Pyx_XDECREF(__pyx_v_raw_ty);
__Pyx_XDECREF(__pyx_v_ty);
__Pyx_XDECREF(__pyx_v_meta);
__Pyx_XDECREF(__pyx_v_out);
__Pyx_XDECREF(__pyx_v_target_dtype);
__Pyx_XDECREF(__pyx_v_kind);
__Pyx_XDECREF(__pyx_v_convert);
__Pyx_XDECREF(__pyx_v_pos);
__Pyx_XDECREF(__pyx_v_name);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
06735: """NumPy-dtype or object-dtype copies of the Arrow-backed columns
06736: whose round-trip claim the manual planner cannot honour in the
06737: shape they arrive in.
06738:
06739: A frame mixing Arrow-backed and NumPy columns routes whole to this
06740: planner, where an integer claim rides on the NumPy dtype named in
06741: the append call. Columns handed to the native Arrow importer have
06742: nowhere to put it, so their claim would be dropped and the column
06743: would land as its storage type — CHAR and GEOHASH as plain
06744: integers — auto-creating the destination table with the wrong
06745: column types. A UUID or LONG256 claim on a bare fixed-size binary
06746: column is read by the classifier instead, whose route sends the
06747: column's own buffer, and the planner refuses that route for a column
06748: in any layout but one zero-offset array.
06749:
06750: An integer claim copies to the NumPy width that carries it, which
06751: stays a raw buffer the whole way to the wire. An integer column
06752: holding a null copies to object dtype instead: that is the shape
06753: `_dataframe_apply_roundtrip_overrides` covers for every claimed
06754: kind, and what `dtype_backend='numpy_nullable'` hands these columns
06755: back as, so both backends write the same bytes again.
06756:
06757: UUID on a bare 16-byte column and LONG256 on a 32-byte one need no
06758: copy. The Arrow value buffer of such a column is already a packed
06759: run of 16- or 32-byte values, the layout `qwp_numpy_s16` and
06760: `qwp_numpy_s32` read, and its validity bitmap is the one the append
06761: call takes, nulls included. The classifier makes such a column
06762: `col_source_fsb_claimed_arrow`, and the append sends the buffer as
06763: it stands.
06764:
06765: TRADE-OFF, kept on purpose: that route needs the column to be one
06766: Arrow array starting at offset zero
06767: (`_arrow_col_is_one_zero_offset_buffer`). A column in several
06768: chunks -- a query result read in more than one batch, a
06769: `pd.concat` -- or one sliced away from its start (`df.iloc[n:]`
06770: with n > 0) copies to object dtype. That copy boxes one
06771: `bytes` per cell, roughly 4-5x the per-cell cost and about 73 MB
06772: of Python objects per million 32-byte cells, but it writes the
06773: column where the alternative is a refusal. This planner refuses an
06774: Arrow-backed column of any other type in several chunks, and one
06775: sliced away from its start too unless it goes to the native Arrow
06776: importer (variable-length binary, lists, millisecond timestamps):
06777: integer, float, boolean and string columns get "v1 requires one
06778: contiguous zero-offset buffer". So the fallback runs only on frames
06779: whose other Arrow-backed columns are all in one array, or are
06780: sliced and of those importer-bound types. Gathering the chunks into
06781: one fresh Arrow buffer would make the copy a memcpy, but it would be
06782: a third route for two kinds on layouts most kinds refuse, so the
06783: fallback stays on the object route the `numpy_nullable` backend
06784: already takes for the same columns.
06785:
06786: Only a frame that already fell back from the zero-copy Arrow path
06787: reaches here, and within it only the claimed columns that have no
06788: buffer-shaped route are copied, so the shapes that can carry their
06789: claim natively stay zero-copy.
06790: """
06791: cdef object cols_meta, arrow_dtype, types, dtype, raw_ty, ty, meta, out
06792: cdef object target_dtype
06793: cdef str kind
06794: cdef list convert
+06795: if not _is_pandas_dataframe_object(df):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_df); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6795, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+06796: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06797: cols_meta = _roundtrip_columns_meta(df)
__pyx_t_3 = __pyx_f_7questdb_7_client__roundtrip_columns_meta(__pyx_v_df); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6797, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_cols_meta = __pyx_t_3; __pyx_t_3 = 0;
+06798: if not cols_meta:
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_cols_meta); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6798, __pyx_L1_error) __pyx_t_1 = (!__pyx_t_2); if (__pyx_t_1) { /* … */ }
+06799: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06800: _dataframe_may_import_deps()
__pyx_t_3 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6800, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06801: arrow_dtype = getattr(_PANDAS, 'ArrowDtype', None)
__pyx_t_3 = __pyx_v_7questdb_7_client__PANDAS; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetAttr3(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_ArrowDtype, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6801, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_arrow_dtype = __pyx_t_4; __pyx_t_4 = 0;
+06802: if arrow_dtype is None:
__pyx_t_1 = (__pyx_v_arrow_dtype == Py_None);
if (__pyx_t_1) {
/* … */
}
+06803: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06804: if not _dataframe_try_import_pyarrow():
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_try_import_pyarrow(); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6804, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+06805: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06806: types = _PYARROW.types
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6806, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_types = __pyx_t_4; __pyx_t_4 = 0;
+06807: convert = []
__pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6807, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_convert = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0;
06808: # Walked by position rather than by label: `dtypes[name]` on a frame
06809: # with duplicate column names hands back a Series, not a dtype.
+06810: for pos, (name, dtype) in enumerate(zip(df.columns, df.dtypes)):
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_0); __pyx_t_4 = __pyx_mstate_global->__pyx_int_0; __pyx_t_5 = NULL; __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6810, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6810, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = 1; { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_t_7}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_zip, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6810, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) { __pyx_t_7 = __pyx_t_3; __Pyx_INCREF(__pyx_t_7); __pyx_t_9 = 0; __pyx_t_10 = NULL; } else { __pyx_t_9 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6810, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_10 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_7); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 6810, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; for (;;) { if (likely(!__pyx_t_10)) { if (likely(PyList_CheckExact(__pyx_t_7))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_7); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6810, __pyx_L1_error) #endif if (__pyx_t_9 >= __pyx_temp) break; } __pyx_t_3 = __Pyx_PyList_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, 6810, __pyx_L1_error) #endif if (__pyx_t_9 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_3 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_9)); #else __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_7, __pyx_t_9); #endif ++__pyx_t_9; } if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6810, __pyx_L1_error) } else { __pyx_t_3 = __pyx_t_10(__pyx_t_7); if (unlikely(!__pyx_t_3)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 6810, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_3); if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { PyObject* sequence = __pyx_t_3; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 6810, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); __Pyx_INCREF(__pyx_t_6); __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_5); } else { __pyx_t_6 = __Pyx_PyList_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6810, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6810, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_5); } #else __pyx_t_6 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6810, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6810, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #endif __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { Py_ssize_t index = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6810, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_12 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_11); index = 0; __pyx_t_6 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_6)) goto __pyx_L9_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); index = 1; __pyx_t_5 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_5)) goto __pyx_L9_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < (0)) __PYX_ERR(0, 6810, __pyx_L1_error) __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L10_unpacking_done; __pyx_L9_unpacking_failed:; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 6810, __pyx_L1_error) __pyx_L10_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_5); __pyx_t_5 = 0; __Pyx_INCREF(__pyx_t_4); __Pyx_XDECREF_SET(__pyx_v_pos, __pyx_t_4); __pyx_t_3 = __Pyx_PyLong_AddObjC(__pyx_t_4, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6810, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = __pyx_t_3; __pyx_t_3 = 0; /* … */ __pyx_L7_continue:; } __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+06811: if not isinstance(dtype, arrow_dtype):
__pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_v_arrow_dtype); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 6811, __pyx_L1_error) __pyx_t_1 = (!__pyx_t_2); if (__pyx_t_1) { /* … */ }
+06812: continue
goto __pyx_L7_continue;
+06813: meta = cols_meta.get(name)
__pyx_t_5 = __pyx_v_cols_meta;
__Pyx_INCREF(__pyx_t_5);
__pyx_t_8 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_name};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6813, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_XDECREF_SET(__pyx_v_meta, __pyx_t_3);
__pyx_t_3 = 0;
+06814: kind = _roundtrip_kind(meta)
__pyx_t_3 = __pyx_f_7questdb_7_client__roundtrip_kind(__pyx_v_meta); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6814, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_kind, ((PyObject*)__pyx_t_3)); __pyx_t_3 = 0;
+06815: if kind is None or kind not in _ATTRS_OVERRIDE_KINDS:
__pyx_t_2 = (__pyx_v_kind == ((PyObject*)Py_None));
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L13_bool_binop_done;
}
if (unlikely(__pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not iterable");
__PYX_ERR(0, 6815, __pyx_L1_error)
}
__pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_v_kind, __pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6815, __pyx_L1_error)
__pyx_t_1 = __pyx_t_2;
__pyx_L13_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+06816: continue
goto __pyx_L7_continue;
+06817: raw_ty = dtype.pyarrow_dtype
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_pyarrow_dtype); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6817, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_raw_ty, __pyx_t_3); __pyx_t_3 = 0;
+06818: ty = raw_ty
__Pyx_INCREF(__pyx_v_raw_ty); __Pyx_XDECREF_SET(__pyx_v_ty, __pyx_v_raw_ty);
+06819: if isinstance(ty, _PYARROW.lib.BaseExtensionType):
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6819, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_BaseExtensionType); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6819, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_1 = PyObject_IsInstance(__pyx_v_ty, __pyx_t_5); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 6819, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_1) { /* … */ }
+06820: ty = ty.storage_type
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_ty, __pyx_mstate_global->__pyx_n_u_storage_type); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6820, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF_SET(__pyx_v_ty, __pyx_t_5); __pyx_t_5 = 0;
06821: # A claim that no longer fits the column is dropped rather than
06822: # reshaped: refusing value by value later would answer a retyped
06823: # column with an error where the contract promises the write
06824: # goes ahead. It says which claim it dropped on the way past,
06825: # because a type that can never carry the kind is a mistake
06826: # rather than drift, and the two look the same from here.
+06827: if not _attrs_override_fits(
__pyx_t_1 = __pyx_f_7questdb_7_client__attrs_override_fits(__pyx_v_types, __pyx_v_ty, __pyx_v_kind, __pyx_t_5); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 6827, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+06828: types, ty, kind, meta.get('precision_bits') or 0):
__pyx_t_6 = __pyx_v_meta;
__Pyx_INCREF(__pyx_t_6);
__pyx_t_8 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_n_u_precision_bits};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6828, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6828, __pyx_L1_error)
if (!__pyx_t_1) {
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
} else {
__Pyx_INCREF(__pyx_t_3);
__pyx_t_5 = __pyx_t_3;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L17_bool_binop_done;
}
__pyx_t_3 = __Pyx_PyLong_From_long(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6828, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_5 = __pyx_t_3;
__pyx_t_3 = 0;
__pyx_L17_bool_binop_done:;
+06829: _log_roundtrip_claim_dropped(name, kind, dtype)
__pyx_t_5 = __pyx_f_7questdb_7_client__log_roundtrip_claim_dropped(__pyx_v_name, __pyx_v_kind, __pyx_v_dtype); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6829, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+06830: continue
goto __pyx_L7_continue;
+06831: target_dtype = _claimed_arrow_col_reshape_dtype(
__pyx_t_3 = __pyx_f_7questdb_7_client__claimed_arrow_col_reshape_dtype(__pyx_v_types, __pyx_v_raw_ty, __pyx_v_ty, __pyx_v_kind, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6831, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF_SET(__pyx_v_target_dtype, __pyx_t_3); __pyx_t_3 = 0;
+06832: types, raw_ty, ty, kind, df.iloc[:, pos])
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6832, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6832, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 6832, __pyx_L1_error); __Pyx_INCREF(__pyx_v_pos); __Pyx_GIVEREF(__pyx_v_pos); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_pos) != (0)) __PYX_ERR(0, 6832, __pyx_L1_error); __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6832, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06833: if target_dtype is None:
__pyx_t_2 = (__pyx_v_target_dtype == Py_None);
if (__pyx_t_2) {
/* … */
}
+06834: continue
goto __pyx_L7_continue;
+06835: if target_dtype is not object and df.iloc[:, pos].isna().any():
__pyx_t_1 = (__pyx_v_target_dtype != __pyx_builtin_object);
if (__pyx_t_1) {
} else {
__pyx_t_2 = __pyx_t_1;
goto __pyx_L21_bool_binop_done;
}
__pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 6835, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_13);
__pyx_t_14 = PyTuple_New(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 6835, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_14);
__Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]);
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 6835, __pyx_L1_error);
__Pyx_INCREF(__pyx_v_pos);
__Pyx_GIVEREF(__pyx_v_pos);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_v_pos) != (0)) __PYX_ERR(0, 6835, __pyx_L1_error);
__pyx_t_15 = __Pyx_PyObject_GetItem(__pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 6835, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_15);
__Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
__pyx_t_11 = __pyx_t_15;
__Pyx_INCREF(__pyx_t_11);
__pyx_t_8 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_11, NULL};
__pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_isna, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6835, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
__pyx_t_6 = __pyx_t_5;
__Pyx_INCREF(__pyx_t_6);
__pyx_t_8 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_any, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6835, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6835, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_2 = __pyx_t_1;
__pyx_L21_bool_binop_done:;
if (__pyx_t_2) {
/* … */
}
06836: # A NumPy integer dtype has no null to copy a null into.
+06837: target_dtype = object
__Pyx_INCREF(__pyx_builtin_object); __Pyx_DECREF_SET(__pyx_v_target_dtype, __pyx_builtin_object);
+06838: convert.append((pos, target_dtype))
__pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6838, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_pos); __Pyx_GIVEREF(__pyx_v_pos); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_pos) != (0)) __PYX_ERR(0, 6838, __pyx_L1_error); __Pyx_INCREF(__pyx_v_target_dtype); __Pyx_GIVEREF(__pyx_v_target_dtype); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_target_dtype) != (0)) __PYX_ERR(0, 6838, __pyx_L1_error); __pyx_t_16 = __Pyx_PyList_Append(__pyx_v_convert, __pyx_t_3); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 6838, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06839: if not convert:
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_convert);
if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 6839, __pyx_L1_error)
__pyx_t_2 = (__pyx_temp != 0);
}
__pyx_t_1 = (!__pyx_t_2);
if (__pyx_t_1) {
/* … */
}
+06840: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06841: out = df.copy(deep=False)
__pyx_t_7 = __pyx_v_df; __Pyx_INCREF(__pyx_t_7); #if CYTHON_VECTORCALL #endif __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, 6841, __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, 6841, __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; #if CYTHON_VECTORCALL #endif __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6841, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_v_out = __pyx_t_4; __pyx_t_4 = 0;
+06842: for pos, target_dtype in convert:
__pyx_t_4 = __pyx_v_convert; __Pyx_INCREF(__pyx_t_4); __pyx_t_9 = 0; for (;;) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6842, __pyx_L1_error) #endif if (__pyx_t_9 >= __pyx_temp) break; } __pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_4, __pyx_t_9, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_9; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6842, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { PyObject* sequence = __pyx_t_3; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 6842, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); __Pyx_INCREF(__pyx_t_7); __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_5); } else { __pyx_t_7 = __Pyx_PyList_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6842, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_7); __pyx_t_5 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6842, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_5); } #else __pyx_t_7 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6842, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_5 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6842, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #endif __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { Py_ssize_t index = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6842, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_12 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_6); index = 0; __pyx_t_7 = __pyx_t_12(__pyx_t_6); if (unlikely(!__pyx_t_7)) goto __pyx_L27_unpacking_failed; __Pyx_GOTREF(__pyx_t_7); index = 1; __pyx_t_5 = __pyx_t_12(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L27_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_6), 2) < (0)) __PYX_ERR(0, 6842, __pyx_L1_error) __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L28_unpacking_done; __pyx_L27_unpacking_failed:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 6842, __pyx_L1_error) __pyx_L28_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_pos, __pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF_SET(__pyx_v_target_dtype, __pyx_t_5); __pyx_t_5 = 0; /* … */ } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+06843: _dataframe_set_column(
__pyx_t_17 = __pyx_f_7questdb_7_client__dataframe_set_column(__pyx_v_out, __pyx_v_df, __pyx_v_pos, __pyx_t_3); if (unlikely(__pyx_t_17 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6843, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06844: out, df, pos, df.iloc[:, pos].astype(target_dtype))
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6844, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6844, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 6844, __pyx_L1_error); __Pyx_INCREF(__pyx_v_pos); __Pyx_GIVEREF(__pyx_v_pos); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_pos) != (0)) __PYX_ERR(0, 6844, __pyx_L1_error); __pyx_t_15 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 6844, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_5 = __pyx_t_15; __Pyx_INCREF(__pyx_t_5); __pyx_t_8 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_target_dtype}; __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6844, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); }
+06845: out.attrs = dict(df.attrs)
__pyx_t_3 = NULL; __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_attrs); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 6845, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __pyx_t_8 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_15}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(&PyDict_Type), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6845, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } if (__Pyx_PyObject_SetAttrStr(__pyx_v_out, __pyx_mstate_global->__pyx_n_u_attrs, __pyx_t_4) < (0)) __PYX_ERR(0, 6845, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+06846: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
06847:
06848:
+06849: cdef object _dataframe_normalize_claimed_date(object df):
static PyObject *__pyx_f_7questdb_7_client__dataframe_normalize_claimed_date(PyObject *__pyx_v_df) {
PyObject *__pyx_v_cols_meta = 0;
PyObject *__pyx_v_arrow_dtype = 0;
PyObject *__pyx_v_dtype = 0;
PyObject *__pyx_v_meta = 0;
PyObject *__pyx_v_out = 0;
PyObject *__pyx_v_unit = 0;
PyObject *__pyx_v_tz = 0;
PyObject *__pyx_v_kind = 0;
PyObject *__pyx_v_convert = 0;
PyObject *__pyx_v_pos = NULL;
PyObject *__pyx_v_name = NULL;
PyObject *__pyx_v_target_dtype = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_AddTraceback("questdb._client._dataframe_normalize_claimed_date", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_cols_meta);
__Pyx_XDECREF(__pyx_v_arrow_dtype);
__Pyx_XDECREF(__pyx_v_dtype);
__Pyx_XDECREF(__pyx_v_meta);
__Pyx_XDECREF(__pyx_v_out);
__Pyx_XDECREF(__pyx_v_unit);
__Pyx_XDECREF(__pyx_v_tz);
__Pyx_XDECREF(__pyx_v_kind);
__Pyx_XDECREF(__pyx_v_convert);
__Pyx_XDECREF(__pyx_v_pos);
__Pyx_XDECREF(__pyx_v_name);
__Pyx_XDECREF(__pyx_v_target_dtype);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
06850: """Arrow-backed copies of the millisecond datetime columns claimed
06851: as DATE.
06852:
06853: A DATE column is claimed by the column's own Arrow type, and the
06854: NumPy planner has no DATE target of any kind: it reaches DATE only
06855: through `col_target_column_arrow`, which needs the column to carry
06856: a `pa.timestamp('ms')`. Plain `to_pandas()` hands a DATE column back
06857: as a NumPy `datetime64[ms]`, which the planner widens to a
06858: microsecond TIMESTAMP -- so reading a table and writing the frame
06859: straight back created the destination table with a TIMESTAMP column
06860: where the source had DATE, and said nothing.
06861:
06862: The claim carries the missing half. `'date'` is not in
06863: `_ATTRS_OVERRIDE_KINDS` because there is no Arrow override to
06864: restore DATE with; what restores it is the column's type, so the
06865: claim reshapes the column and the type does the rest. Both Arrow
06866: backends already hand the column back as `pa.timestamp('ms')`, so
06867: this is what makes the three backends write the same column type.
06868:
06869: A tz-aware millisecond column is reshaped the same way. On its own
06870: the planner refuses that dtype outright, so a claimed one turns a
06871: hard rejection into the type the claim names.
06872:
06873: pyarrow is what carries a column to DATE, and without it the frame
06874: has no route there to be put back on -- the same early return the
06875: rest of the claim machinery takes.
06876: """
06877: cdef object cols_meta, arrow_dtype, dtype, meta, out, unit, tz
06878: cdef str kind
06879: cdef list convert
+06880: if not _is_pandas_dataframe_object(df):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_df); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6880, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+06881: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06882: cols_meta = _roundtrip_columns_meta(df)
__pyx_t_3 = __pyx_f_7questdb_7_client__roundtrip_columns_meta(__pyx_v_df); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6882, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_cols_meta = __pyx_t_3; __pyx_t_3 = 0;
+06883: if not cols_meta:
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_cols_meta); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6883, __pyx_L1_error) __pyx_t_1 = (!__pyx_t_2); if (__pyx_t_1) { /* … */ }
+06884: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06885: _dataframe_may_import_deps()
__pyx_t_3 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6885, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06886: arrow_dtype = getattr(_PANDAS, 'ArrowDtype', None)
__pyx_t_3 = __pyx_v_7questdb_7_client__PANDAS; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetAttr3(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_ArrowDtype, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6886, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_arrow_dtype = __pyx_t_4; __pyx_t_4 = 0;
+06887: if arrow_dtype is None:
__pyx_t_1 = (__pyx_v_arrow_dtype == Py_None);
if (__pyx_t_1) {
/* … */
}
+06888: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06889: if not _dataframe_try_import_pyarrow():
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_try_import_pyarrow(); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6889, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+06890: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06891: convert = []
__pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6891, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_convert = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0;
06892: # Walked by position rather than by label: `dtypes[name]` on a frame
06893: # with duplicate column names hands back a Series, not a dtype.
+06894: for pos, (name, dtype) in enumerate(zip(df.columns, df.dtypes)):
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_0); __pyx_t_4 = __pyx_mstate_global->__pyx_int_0; __pyx_t_5 = NULL; __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6894, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6894, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = 1; { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_t_7}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_zip, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6894, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) { __pyx_t_7 = __pyx_t_3; __Pyx_INCREF(__pyx_t_7); __pyx_t_9 = 0; __pyx_t_10 = NULL; } else { __pyx_t_9 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6894, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_10 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_7); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 6894, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; for (;;) { if (likely(!__pyx_t_10)) { if (likely(PyList_CheckExact(__pyx_t_7))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_7); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6894, __pyx_L1_error) #endif if (__pyx_t_9 >= __pyx_temp) break; } __pyx_t_3 = __Pyx_PyList_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, 6894, __pyx_L1_error) #endif if (__pyx_t_9 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_3 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_9)); #else __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_7, __pyx_t_9); #endif ++__pyx_t_9; } if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6894, __pyx_L1_error) } else { __pyx_t_3 = __pyx_t_10(__pyx_t_7); if (unlikely(!__pyx_t_3)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 6894, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_3); if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { PyObject* sequence = __pyx_t_3; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 6894, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); __Pyx_INCREF(__pyx_t_6); __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_5); } else { __pyx_t_6 = __Pyx_PyList_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6894, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6894, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_5); } #else __pyx_t_6 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6894, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6894, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #endif __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { Py_ssize_t index = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6894, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_12 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_11); index = 0; __pyx_t_6 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_6)) goto __pyx_L9_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); index = 1; __pyx_t_5 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_5)) goto __pyx_L9_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < (0)) __PYX_ERR(0, 6894, __pyx_L1_error) __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L10_unpacking_done; __pyx_L9_unpacking_failed:; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 6894, __pyx_L1_error) __pyx_L10_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_5); __pyx_t_5 = 0; __Pyx_INCREF(__pyx_t_4); __Pyx_XDECREF_SET(__pyx_v_pos, __pyx_t_4); __pyx_t_3 = __Pyx_PyLong_AddObjC(__pyx_t_4, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6894, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = __pyx_t_3; __pyx_t_3 = 0; /* … */ __pyx_L7_continue:; } __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+06895: meta = cols_meta.get(name)
__pyx_t_5 = __pyx_v_cols_meta;
__Pyx_INCREF(__pyx_t_5);
__pyx_t_8 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_name};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6895, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_XDECREF_SET(__pyx_v_meta, __pyx_t_3);
__pyx_t_3 = 0;
+06896: kind = _roundtrip_kind(meta)
__pyx_t_3 = __pyx_f_7questdb_7_client__roundtrip_kind(__pyx_v_meta); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6896, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_kind, ((PyObject*)__pyx_t_3)); __pyx_t_3 = 0;
+06897: if kind != 'date':
__pyx_t_2 = __Pyx_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, 6897, __pyx_L1_error) if (__pyx_t_2) { /* … */ }
+06898: continue
goto __pyx_L7_continue;
06899: # An Arrow-backed column already states the type itself.
+06900: if isinstance(dtype, arrow_dtype):
__pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_v_arrow_dtype); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 6900, __pyx_L1_error) if (__pyx_t_2) { /* … */ }
+06901: continue
goto __pyx_L7_continue;
+06902: if getattr(dtype, 'kind', None) != 'M':
__pyx_t_3 = __Pyx_GetAttr3(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_kind, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6902, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = (__Pyx_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, 6902, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_2) { /* … */ }
+06903: continue
goto __pyx_L7_continue;
+06904: tz = getattr(dtype, 'tz', None)
__pyx_t_3 = __Pyx_GetAttr3(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_tz, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6904, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_tz, __pyx_t_3); __pyx_t_3 = 0;
+06905: unit = getattr(dtype, 'unit', None)
__pyx_t_3 = __Pyx_GetAttr3(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_unit, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6905, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_unit, __pyx_t_3); __pyx_t_3 = 0;
+06906: if unit is None:
__pyx_t_2 = (__pyx_v_unit == Py_None);
if (__pyx_t_2) {
/* … */
}
+06907: unit = numpy.datetime_data(dtype)[0]
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_numpy); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6907, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_datetime_data); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6907, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__pyx_t_8 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_11))) {
__pyx_t_5 = PyMethod_GET_SELF(__pyx_t_11);
assert(__pyx_t_5);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11);
__Pyx_INCREF(__pyx_t_5);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_11, __pyx__function);
__pyx_t_8 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_dtype};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6907, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__pyx_t_11 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6907, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF_SET(__pyx_v_unit, __pyx_t_11);
__pyx_t_11 = 0;
06908: # Only a millisecond column holds what a DATE column held. A
06909: # column retyped to another unit since it was read is drift, and
06910: # drift is written as the column's own type implies.
+06911: if unit != 'ms':
__pyx_t_2 = __Pyx_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, 6911, __pyx_L1_error) if (__pyx_t_2) { /* … */ }
+06912: continue
goto __pyx_L7_continue;
+06913: convert.append((
__pyx_t_16 = __Pyx_PyList_Append(__pyx_v_convert, __pyx_t_5); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 6913, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+06914: pos,
__pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6914, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_pos); __Pyx_GIVEREF(__pyx_v_pos); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_pos) != (0)) __PYX_ERR(0, 6914, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_11); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_11) != (0)) __PYX_ERR(0, 6914, __pyx_L1_error); __pyx_t_11 = 0;
+06915: arrow_dtype(
__pyx_t_3 = NULL;
__Pyx_INCREF(__pyx_v_arrow_dtype);
__pyx_t_5 = __pyx_v_arrow_dtype;
+06916: _PYARROW.timestamp('ms')
__pyx_t_14 = __pyx_v_7questdb_7_client__PYARROW;
__Pyx_INCREF(__pyx_t_14);
__pyx_t_8 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_14, __pyx_mstate_global->__pyx_n_u_ms};
__pyx_t_13 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_timestamp, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 6916, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_13);
}
__pyx_t_6 = __pyx_t_13;
__pyx_t_13 = 0;
} else {
+06917: if tz is None
__pyx_t_2 = (__pyx_v_tz == Py_None);
if (__pyx_t_2) {
+06918: else _PYARROW.timestamp('ms', str(tz)))))
__pyx_t_14 = __pyx_v_7questdb_7_client__PYARROW;
__Pyx_INCREF(__pyx_t_14);
__pyx_t_15 = __Pyx_PyObject_Unicode(__pyx_v_tz); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 6918, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_15);
__pyx_t_8 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_14, __pyx_mstate_global->__pyx_n_u_ms, __pyx_t_15};
__pyx_t_13 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_timestamp, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 6918, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_13);
}
__pyx_t_6 = __pyx_t_13;
__pyx_t_13 = 0;
}
__pyx_t_8 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_5))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
__pyx_t_8 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_6};
__pyx_t_11 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6915, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
}
+06919: if not convert:
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_convert);
if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 6919, __pyx_L1_error)
__pyx_t_2 = (__pyx_temp != 0);
}
__pyx_t_1 = (!__pyx_t_2);
if (__pyx_t_1) {
/* … */
}
+06920: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06921: out = df.copy(deep=False)
__pyx_t_7 = __pyx_v_df; __Pyx_INCREF(__pyx_t_7); #if CYTHON_VECTORCALL #endif __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, 6921, __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, 6921, __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; #if CYTHON_VECTORCALL #endif __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6921, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_v_out = __pyx_t_4; __pyx_t_4 = 0;
+06922: for pos, target_dtype in convert:
__pyx_t_4 = __pyx_v_convert; __Pyx_INCREF(__pyx_t_4); __pyx_t_9 = 0; for (;;) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6922, __pyx_L1_error) #endif if (__pyx_t_9 >= __pyx_temp) break; } __pyx_t_5 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_4, __pyx_t_9, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_9; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6922, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) { PyObject* sequence = __pyx_t_5; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 6922, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); __Pyx_INCREF(__pyx_t_7); __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_11); } else { __pyx_t_7 = __Pyx_PyList_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6922, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_7); __pyx_t_11 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6922, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_11); } #else __pyx_t_7 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6922, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_11 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6922, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); #endif __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } else { Py_ssize_t index = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6922, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_12 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_6); index = 0; __pyx_t_7 = __pyx_t_12(__pyx_t_6); if (unlikely(!__pyx_t_7)) goto __pyx_L20_unpacking_failed; __Pyx_GOTREF(__pyx_t_7); index = 1; __pyx_t_11 = __pyx_t_12(__pyx_t_6); if (unlikely(!__pyx_t_11)) goto __pyx_L20_unpacking_failed; __Pyx_GOTREF(__pyx_t_11); if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_6), 2) < (0)) __PYX_ERR(0, 6922, __pyx_L1_error) __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L21_unpacking_done; __pyx_L20_unpacking_failed:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 6922, __pyx_L1_error) __pyx_L21_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_pos, __pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF_SET(__pyx_v_target_dtype, __pyx_t_11); __pyx_t_11 = 0; /* … */ } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+06923: _dataframe_set_column(
__pyx_t_17 = __pyx_f_7questdb_7_client__dataframe_set_column(__pyx_v_out, __pyx_v_df, __pyx_v_pos, __pyx_t_5); if (unlikely(__pyx_t_17 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6923, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+06924: out, df, pos, df.iloc[:, pos].astype(target_dtype))
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6924, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6924, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 6924, __pyx_L1_error); __Pyx_INCREF(__pyx_v_pos); __Pyx_GIVEREF(__pyx_v_pos); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_pos) != (0)) __PYX_ERR(0, 6924, __pyx_L1_error); __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6924, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_11 = __pyx_t_3; __Pyx_INCREF(__pyx_t_11); __pyx_t_8 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_v_target_dtype}; __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6924, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); }
+06925: out.attrs = dict(df.attrs)
__pyx_t_5 = NULL; __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_attrs); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6925, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_8 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_3}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(&PyDict_Type), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6925, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } if (__Pyx_PyObject_SetAttrStr(__pyx_v_out, __pyx_mstate_global->__pyx_n_u_attrs, __pyx_t_4) < (0)) __PYX_ERR(0, 6925, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+06926: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
06927:
06928:
+06929: cdef void_int _dataframe_claim_all_null_source(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_claim_all_null_source(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, PyObject *__pyx_v_kind, PyObject *__pyx_v_bits) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client._dataframe_claim_all_null_source", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
06930: col_t* col, str kind, object bits) except -1:
06931: """Give an all-null claimed column the object-column shape its
06932: claim names.
06933:
06934: Every cell being null leaves the planner nothing to sniff a type
06935: from, so such a column is skipped and never reaches the wire. A
06936: round-trip claim states the type anyway, and a destination table
06937: auto-created without the column is the outcome the claim exists to
06938: prevent -- so the claim picks the source, and the object-column
06939: builder writes a column of nulls in the claimed width. This is the
06940: same source the shape would have taken with one non-null cell in
06941: it, and what the Arrow path emits for the same frame.
06942:
06943: A claim the column cannot carry -- a geohash precision outside
06944: 1..=60 -- leaves the column skipped, and the tail of
06945: `_dataframe_apply_roundtrip_overrides` says so, as it does for any
06946: claim no source took.
06947: """
+06948: if kind == 'uuid':
__pyx_t_1 = __Pyx_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, 6948, __pyx_L1_error) if (__pyx_t_1) { /* … */ goto __pyx_L3; }
+06949: col.setup.source = col_source_t.col_source_bytes_pyobj
__pyx_v_col->setup->source = __pyx_e_7questdb_7_client_col_source_bytes_pyobj;
+06950: col.setup.target = col_target_t.col_target_column_binary
__pyx_v_col->setup->target = __pyx_e_7questdb_7_client_col_target_column_binary;
+06951: elif kind in ('ipv4', 'char', 'long256', 'geohash'):
__Pyx_INCREF(__pyx_v_kind); __pyx_t_2 = __pyx_v_kind; __pyx_t_3 = __Pyx_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, 6951, __pyx_L1_error) if (!__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; goto __pyx_L4_bool_binop_done; } __pyx_t_3 = __Pyx_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, 6951, __pyx_L1_error) if (!__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; goto __pyx_L4_bool_binop_done; } __pyx_t_3 = __Pyx_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, 6951, __pyx_L1_error) if (!__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; goto __pyx_L4_bool_binop_done; } __pyx_t_3 = __Pyx_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, 6951, __pyx_L1_error) __pyx_t_1 = __pyx_t_3; __pyx_L4_bool_binop_done:; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __pyx_t_1; if (__pyx_t_3) { /* … */ goto __pyx_L3; }
+06952: if kind == 'geohash' and not (
__pyx_t_1 = __Pyx_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, 6952, __pyx_L1_error) if (__pyx_t_1) { } else { __pyx_t_3 = __pyx_t_1; goto __pyx_L9_bool_binop_done; } /* … */ __pyx_t_4 = (!__pyx_t_1); __pyx_t_3 = __pyx_t_4; __pyx_L9_bool_binop_done:; if (__pyx_t_3) { /* … */ }
+06953: _is_integral_not_bool(bits) and 1 <= int(bits) <= 60):
__pyx_t_4 = __pyx_f_7questdb_7_client__is_integral_not_bool(__pyx_v_bits); if (unlikely(__pyx_t_4 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6953, __pyx_L1_error) if (__pyx_t_4) { } else { __pyx_t_1 = __pyx_t_4; goto __pyx_L11_bool_binop_done; } __pyx_t_5 = __Pyx_PyNumber_Int(__pyx_v_bits); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6953, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_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, 6953, __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, 6953, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_1 = __pyx_t_4; __pyx_L11_bool_binop_done:;
+06954: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+06955: col.setup.source = col_source_t.col_source_int_pyobj
__pyx_v_col->setup->source = __pyx_e_7questdb_7_client_col_source_int_pyobj;
+06956: col.setup.target = col_target_t.col_target_column_i64
__pyx_v_col->setup->target = __pyx_e_7questdb_7_client_col_target_column_i64;
06957: else:
+06958: return 0
/*else*/ {
{
__pyx_r = 0;
}
goto __pyx_L0;
}
__pyx_L3:;
+06959: col.dispatch_code = <col_dispatch_code_t>(
__pyx_v_col->dispatch_code = ((enum __pyx_t_7questdb_7_client_col_dispatch_code_t)(((int)__pyx_v_col->setup->source) + ((int)__pyx_v_col->setup->target)));
06960: <int>col.setup.source + <int>col.setup.target)
+06961: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
06962:
06963:
+06964: cdef _log_roundtrip_claim_dropped(object name, str kind, object shape):
static PyObject *__pyx_f_7questdb_7_client__log_roundtrip_claim_dropped(PyObject *__pyx_v_name, PyObject *__pyx_v_kind, PyObject *__pyx_v_shape) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_AddTraceback("questdb._client._log_roundtrip_claim_dropped", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
06965: """Say that a column's ``df.attrs['questdb']`` claim was not applied.
06966:
06967: A claim that no longer matches its column is not an error. The frame
06968: may have been retyped since it was read, and the write goes ahead as
06969: the column's own type implies -- rejecting it would answer ordinary
06970: schema drift with a failure.
06971:
06972: A claim quietly doing nothing is also how a column reaches the
06973: database as the wrong type, though, and the two are indistinguishable
06974: from the outside. Drift is the case the silence is for; a type that
06975: can never carry the kind -- a float under ``geohash``, say, or a
06976: 16-bit integer claimed at 20 bits -- is a mistake the caller wants
06977: to hear about. Naming the claim and the type
06978: that turned it away tells them apart without failing either.
06979:
06980: This leniency covers ``df.attrs`` claims alone. The same claim in
06981: Arrow field metadata (``questdb.column_type``) is refused when the
06982: field's type cannot carry it, deliberately; `_capsule_consume_stream`
06983: says why the two routes differ.
06984: """
06985: # A stale claim does not invalidate the frame. Unlike the naive-datetime
06986: # and reconnect warnings, it is not a migration/performance pattern the
06987: # caller should be able to promote to an error with `-W error`.
+06988: logging.getLogger('questdb').warning(
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6988, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6988, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_n_u_questdb}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6988, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_t_2 = __pyx_t_3; __Pyx_INCREF(__pyx_t_2);
06989: 'questdb: column %r carries a df.attrs[\'questdb\'] claim of '
06990: 'kind %r, which a column of type %s cannot carry. The claim is '
06991: 'ignored, and the column goes out as its own type decides -- '
06992: 'which for some shapes means it is left out of the write, or '
06993: 'refused by it. Cast the column to a type the kind fits, state '
06994: 'the type outright with schema_overrides, or drop the claim to '
06995: 'silence this.',
06996: name,
06997: kind,
+06998: shape)
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[5] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_questdb_column_r_carries_a_df_at_2, __pyx_v_name, __pyx_v_kind, __pyx_v_shape};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_warning, __pyx_callargs+__pyx_t_7, (5-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6988, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
06999:
07000:
+07001: cdef bint _roundtrip_claim_already_carried(
static int __pyx_f_7questdb_7_client__roundtrip_claim_already_carried(PyObject *__pyx_v_kind, struct __pyx_t_7questdb_7_client_col_t const *__pyx_v_col) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_WriteUnraisable("questdb._client._roundtrip_claim_already_carried", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__pyx_L0:;
return __pyx_r;
}
07002: str kind, const col_t* col) noexcept:
07003: """Whether the column carries the claimed kind without an override.
07004:
07005: An object column of `uuid.UUID` or `ipaddress.IPv4Address` is
07006: already written as UUID or IPV4 by the source alone -- which is the
07007: shape plain `to_pandas()` hands back -- so no override is set for
07008: it and none is missing. Without this, the claim such a frame comes
07009: back with would be reported as dropped on every write, on the one
07010: path the claim exists to serve.
07011:
07012: `col_source_fsb_claimed_arrow` is the classifier acting on the
07013: claim itself: it takes that source only for a `uuid` claim on a
07014: 16-byte column or a `long256` claim on a 32-byte one, so the width
07015: already names the kind.
07016: """
+07017: if kind == 'uuid':
__pyx_t_1 = __Pyx_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, 7017, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+07018: return (col.setup.source == col_source_t.col_source_uuid_pyobj
case __pyx_e_7questdb_7_client_col_source_fsb_claimed_arrow:
+07019: or col.setup.source
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_uuid_pyobj:
/* … */
__pyx_t_1 = 1;
break;
default:
__pyx_t_1 = 0;
break;
}
{
__pyx_r = __pyx_t_1;
}
goto __pyx_L0;
07020: == col_source_t.col_source_fsb_claimed_arrow)
+07021: if kind == 'long256':
__pyx_t_1 = __Pyx_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, 7021, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
07022: return (col.setup.source
+07023: == col_source_t.col_source_fsb_claimed_arrow)
{
__pyx_r = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_fsb_claimed_arrow);
}
goto __pyx_L0;
+07024: if kind == 'ipv4':
__pyx_t_1 = __Pyx_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, 7024, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+07025: return col.setup.source == col_source_t.col_source_ipv4_pyobj
{
__pyx_r = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_ipv4_pyobj);
}
goto __pyx_L0;
+07026: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
07027:
07028:
+07029: cdef void_int _dataframe_apply_roundtrip_overrides(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_apply_roundtrip_overrides(PyObject *__pyx_v_df, struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan) {
size_t __pyx_v_col_index;
struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col;
int __pyx_v_gh;
PyObject *__pyx_v_arrow_dtype = 0;
PyObject *__pyx_v_dtype = 0;
PyObject *__pyx_v_cols_meta = NULL;
PyObject *__pyx_v_df_cols = NULL;
PyObject *__pyx_v_meta = NULL;
PyObject *__pyx_v_kind = NULL;
PyObject *__pyx_v_bits = NULL;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_AddTraceback("questdb._client._dataframe_apply_roundtrip_overrides", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_arrow_dtype);
__Pyx_XDECREF(__pyx_v_dtype);
__Pyx_XDECREF(__pyx_v_cols_meta);
__Pyx_XDECREF(__pyx_v_df_cols);
__Pyx_XDECREF(__pyx_v_meta);
__Pyx_XDECREF(__pyx_v_kind);
__Pyx_XDECREF(__pyx_v_bits);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07030: object df, dataframe_plan_t* plan) except -1:
07031: cdef size_t col_index
07032: cdef col_t* col
07033: cdef int gh
07034: cdef object arrow_dtype, dtype
+07035: for col_index in range(plan.col_count):
__pyx_t_1 = __pyx_v_plan->col_count;
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_col_index = __pyx_t_3;
+07036: plan.cols.d[col_index].setup.has_override = False
(__pyx_v_plan->cols.d[__pyx_v_col_index]).setup->has_override = 0; }
+07037: cols_meta = _roundtrip_columns_meta(df)
__pyx_t_4 = __pyx_f_7questdb_7_client__roundtrip_columns_meta(__pyx_v_df); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7037, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_cols_meta = __pyx_t_4; __pyx_t_4 = 0;
+07038: if not cols_meta:
__pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_cols_meta); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 7038, __pyx_L1_error) __pyx_t_6 = (!__pyx_t_5); if (__pyx_t_6) { /* … */ }
+07039: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+07040: df_cols = list(df.columns)
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7040, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = __Pyx_PySequence_ListKeepNew(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7040, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_df_cols = ((PyObject*)__pyx_t_7); __pyx_t_7 = 0;
+07041: _dataframe_may_import_deps()
__pyx_t_7 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7041, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+07042: arrow_dtype = getattr(_PANDAS, 'ArrowDtype', None)
__pyx_t_7 = __pyx_v_7questdb_7_client__PANDAS; __Pyx_INCREF(__pyx_t_7); __pyx_t_4 = __Pyx_GetAttr3(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_ArrowDtype, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7042, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_arrow_dtype = __pyx_t_4; __pyx_t_4 = 0;
+07043: for col_index in range(plan.col_count):
__pyx_t_1 = __pyx_v_plan->col_count;
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_col_index = __pyx_t_3;
+07044: col = &plan.cols.d[col_index]
__pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_col_index]));
+07045: if col.setup.orig_index >= <size_t>len(df_cols):
__pyx_t_8 = __Pyx_PyList_GET_SIZE(__pyx_v_df_cols); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 7045, __pyx_L1_error) __pyx_t_6 = (__pyx_v_col->setup->orig_index >= ((size_t)__pyx_t_8)); if (__pyx_t_6) { /* … */ }
+07046: continue
goto __pyx_L6_continue;
+07047: meta = cols_meta.get(df_cols[col.setup.orig_index])
__pyx_t_7 = __pyx_v_cols_meta;
__Pyx_INCREF(__pyx_t_7);
__pyx_t_9 = __Pyx_GetItemInt_List(__pyx_v_df_cols, __pyx_v_col->setup->orig_index, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7047, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__pyx_t_10 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_9};
__pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7047, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_XDECREF_SET(__pyx_v_meta, __pyx_t_4);
__pyx_t_4 = 0;
+07048: kind = _roundtrip_kind(meta)
__pyx_t_4 = __pyx_f_7questdb_7_client__roundtrip_kind(__pyx_v_meta); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7048, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_XDECREF_SET(__pyx_v_kind, ((PyObject*)__pyx_t_4)); __pyx_t_4 = 0;
+07049: if kind is None:
__pyx_t_6 = (__pyx_v_kind == ((PyObject*)Py_None));
if (__pyx_t_6) {
/* … */
}
+07050: continue
goto __pyx_L6_continue;
+07051: if col.setup.source == col_source_t.col_source_nulls:
__pyx_t_6 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_nulls);
if (__pyx_t_6) {
/* … */
}
+07052: _dataframe_claim_all_null_source(
__pyx_t_11 = __pyx_f_7questdb_7_client__dataframe_claim_all_null_source(__pyx_v_col, __pyx_v_kind, __pyx_t_4); if (unlikely(__pyx_t_11 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7052, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+07053: col, kind, meta.get('precision_bits') or 0)
__pyx_t_7 = __pyx_v_meta;
__Pyx_INCREF(__pyx_t_7);
__pyx_t_10 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_n_u_precision_bits};
__pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7053, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
}
__pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 7053, __pyx_L1_error)
if (!__pyx_t_6) {
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
} else {
__Pyx_INCREF(__pyx_t_9);
__pyx_t_4 = __pyx_t_9;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
goto __pyx_L11_bool_binop_done;
}
__pyx_t_9 = __Pyx_PyLong_From_long(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7053, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__pyx_t_4 = __pyx_t_9;
__pyx_t_9 = 0;
__pyx_L11_bool_binop_done:;
07054: # `col_source_int_pyobj` is what a pandas masked dtype turns
07055: # into: `to_pandas(dtype_backend='numpy_nullable')` returns
07056: # IPV4 / CHAR / GEOHASH as UInt32 / UInt16 / Int* extension
07057: # columns, and `_dataframe_normalize_nullable` converts every
07058: # masked column to object-dtype Python ints before planning.
07059: # `col_source_bytes_pyobj` is the same story for the two binary
07060: # kinds, which that backend hands back as object-dtype `bytes`.
07061: # `col_source_u32_arrow` is an Arrow uint32 column, which
07062: # resolves to `col_target_column_i64` and so reaches the wire as
07063: # a raw buffer with the append call naming its dtype — the same
07064: # place the claim lands for the NumPy and object shapes.
+07065: if (kind == 'ipv4'
__pyx_t_5 = __Pyx_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, 7065, __pyx_L1_error) if (__pyx_t_5) { } else { __pyx_t_6 = __pyx_t_5; goto __pyx_L14_bool_binop_done; } /* … */ if (__pyx_t_6) { /* … */ goto __pyx_L13; }
+07066: and col.setup.source in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_u32_numpy:
/* … */
__pyx_t_5 = 1;
break;
default:
__pyx_t_5 = 0;
break;
}
__pyx_t_12 = __pyx_t_5;
__pyx_t_6 = __pyx_t_12;
__pyx_L14_bool_binop_done:;
+07067: col_source_t.col_source_u32_numpy,
case __pyx_e_7questdb_7_client_col_source_u32_arrow:
+07068: col_source_t.col_source_u32_arrow,
case __pyx_e_7questdb_7_client_col_source_int_pyobj:
07069: col_source_t.col_source_int_pyobj)):
+07070: col.setup.has_override = True
__pyx_v_col->setup->has_override = 1;
+07071: col.setup.override_dtype = \
__pyx_v_col->setup->override_dtype = qwp_numpy_u32_ipv4;
07072: qwp_numpy_dtype.qwp_numpy_u32_ipv4
+07073: elif (kind == 'char'
__pyx_t_12 = __Pyx_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, 7073, __pyx_L1_error) if (__pyx_t_12) { } else { __pyx_t_6 = __pyx_t_12; goto __pyx_L16_bool_binop_done; } /* … */ if (__pyx_t_6) { /* … */ goto __pyx_L13; }
+07074: and col.setup.source in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_u16_numpy:
/* … */
__pyx_t_12 = 1;
break;
default:
__pyx_t_12 = 0;
break;
}
__pyx_t_5 = __pyx_t_12;
__pyx_t_6 = __pyx_t_5;
__pyx_L16_bool_binop_done:;
+07075: col_source_t.col_source_u16_numpy,
case __pyx_e_7questdb_7_client_col_source_int_pyobj:
07076: col_source_t.col_source_int_pyobj)):
+07077: col.setup.has_override = True
__pyx_v_col->setup->has_override = 1;
+07078: col.setup.override_dtype = \
__pyx_v_col->setup->override_dtype = qwp_numpy_u16_char;
07079: qwp_numpy_dtype.qwp_numpy_u16_char
+07080: elif (kind == 'uuid'
__pyx_t_5 = __Pyx_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, 7080, __pyx_L1_error) if (__pyx_t_5) { } else { __pyx_t_6 = __pyx_t_5; goto __pyx_L18_bool_binop_done; } /* … */ if (__pyx_t_6) { /* … */ goto __pyx_L13; }
+07081: and col.setup.source == col_source_t.col_source_bytes_pyobj):
__pyx_t_5 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_bytes_pyobj);
__pyx_t_6 = __pyx_t_5;
__pyx_L18_bool_binop_done:;
+07082: col.setup.has_override = True
__pyx_v_col->setup->has_override = 1;
+07083: col.setup.override_dtype = qwp_numpy_dtype.qwp_numpy_s16
__pyx_v_col->setup->override_dtype = qwp_numpy_s16;
+07084: elif (kind == 'long256'
__pyx_t_5 = __Pyx_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, 7084, __pyx_L1_error) if (__pyx_t_5) { } else { __pyx_t_6 = __pyx_t_5; goto __pyx_L20_bool_binop_done; } /* … */ if (__pyx_t_6) { /* … */ goto __pyx_L13; }
+07085: and col.setup.source in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_int_pyobj:
/* … */
__pyx_t_5 = 1;
break;
default:
__pyx_t_5 = 0;
break;
}
__pyx_t_12 = __pyx_t_5;
__pyx_t_6 = __pyx_t_12;
__pyx_L20_bool_binop_done:;
+07086: col_source_t.col_source_int_pyobj,
case __pyx_e_7questdb_7_client_col_source_bytes_pyobj:
07087: col_source_t.col_source_bytes_pyobj)):
07088: # Plain `to_pandas()` hands a LONG256 column back as Python
07089: # ints — the only shape wide enough to hold one without
07090: # pyarrow — and `numpy_nullable` as raw 32-byte `bytes`.
07091: # Either way the claim is what tells the 32-byte encoder
07092: # from the LONG or BINARY column the shape alone implies.
+07093: col.setup.has_override = True
__pyx_v_col->setup->has_override = 1;
+07094: col.setup.override_dtype = qwp_numpy_dtype.qwp_numpy_s32
__pyx_v_col->setup->override_dtype = qwp_numpy_s32;
+07095: elif kind == 'geohash':
__pyx_t_6 = __Pyx_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, 7095, __pyx_L1_error) if (__pyx_t_6) { /* … */ } __pyx_L13:;
+07096: gh = _geohash_override_dtype(col.setup.source)
__pyx_v_gh = __pyx_f_7questdb_7_client__geohash_override_dtype(__pyx_v_col->setup->source);
+07097: bits = meta.get('precision_bits') or 0
__pyx_t_7 = __pyx_v_meta;
__Pyx_INCREF(__pyx_t_7);
__pyx_t_10 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_n_u_precision_bits};
__pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7097, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
}
__pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 7097, __pyx_L1_error)
if (!__pyx_t_6) {
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
} else {
__Pyx_INCREF(__pyx_t_9);
__pyx_t_4 = __pyx_t_9;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
goto __pyx_L22_bool_binop_done;
}
__pyx_t_9 = __Pyx_PyLong_From_long(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7097, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__pyx_t_4 = __pyx_t_9;
__pyx_t_9 = 0;
__pyx_L22_bool_binop_done:;
__Pyx_XDECREF_SET(__pyx_v_bits, __pyx_t_4);
__pyx_t_4 = 0;
+07098: bits = int(bits) if _is_integral_not_bool(bits) else 0
__pyx_t_6 = __pyx_f_7questdb_7_client__is_integral_not_bool(__pyx_v_bits); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 7098, __pyx_L1_error) if (__pyx_t_6) { __pyx_t_9 = __Pyx_PyNumber_Int(__pyx_v_bits); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7098, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_4 = __pyx_t_9; __pyx_t_9 = 0; } else { __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0); __pyx_t_4 = __pyx_mstate_global->__pyx_int_0; } __Pyx_DECREF_SET(__pyx_v_bits, __pyx_t_4); __pyx_t_4 = 0;
07099: # The precision is held to the column's own width, not just
07100: # to 1..=60. A claim wider than the slot carrying it is one
07101: # the column cannot express, so it is dropped rather than
07102: # left for the native writer to refuse mid-flush, with the
07103: # connection already open and a message naming neither the
07104: # column nor the claim.
+07105: if (gh != _GEOHASH_DTYPE_NONE
__pyx_t_12 = (__pyx_v_gh != __pyx_v_7questdb_7_client__GEOHASH_DTYPE_NONE);
if (__pyx_t_12) {
} else {
__pyx_t_6 = __pyx_t_12;
goto __pyx_L25_bool_binop_done;
}
/* … */
if (__pyx_t_6) {
/* … */
}
+07106: and gh != _GEOHASH_DTYPE_UNSIGNED
__pyx_t_12 = (__pyx_v_gh != __pyx_v_7questdb_7_client__GEOHASH_DTYPE_UNSIGNED);
if (__pyx_t_12) {
} else {
__pyx_t_6 = __pyx_t_12;
goto __pyx_L25_bool_binop_done;
}
+07107: and 1 <= bits <= _geohash_dtype_max_bits(gh)):
__pyx_t_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, 7107, __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, 7107, __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, 7107, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } __pyx_t_6 = __pyx_t_12; __pyx_L25_bool_binop_done:;
+07108: col.setup.has_override = True
__pyx_v_col->setup->has_override = 1;
+07109: col.setup.override_dtype = <qwp_numpy_dtype>gh
__pyx_v_col->setup->override_dtype = ((enum qwp_numpy_dtype)__pyx_v_gh);
+07110: col.setup.override_geohash_bits = <uint8_t>bits
__pyx_t_13 = __Pyx_PyLong_As_uint8_t(__pyx_v_bits); if (unlikely((__pyx_t_13 == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 7110, __pyx_L1_error) __pyx_v_col->setup->override_geohash_bits = ((uint8_t)__pyx_t_13);
+07111: if (not col.setup.has_override
__pyx_t_12 = (!__pyx_v_col->setup->has_override);
if (__pyx_t_12) {
} else {
__pyx_t_6 = __pyx_t_12;
goto __pyx_L29_bool_binop_done;
}
/* … */
if (__pyx_t_6) {
/* … */
}
__pyx_L6_continue:;
}
+07112: and kind in _ATTRS_OVERRIDE_KINDS
if (unlikely(__pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not iterable");
__PYX_ERR(0, 7112, __pyx_L1_error)
}
__pyx_t_12 = (__Pyx_PyDict_ContainsTF(__pyx_v_kind, __pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS, Py_EQ)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 7112, __pyx_L1_error)
if (__pyx_t_12) {
} else {
__pyx_t_6 = __pyx_t_12;
goto __pyx_L29_bool_binop_done;
}
+07113: and not _roundtrip_claim_already_carried(kind, col)):
__pyx_t_12 = (!__pyx_f_7questdb_7_client__roundtrip_claim_already_carried(__pyx_v_kind, __pyx_v_col));
__pyx_t_6 = __pyx_t_12;
__pyx_L29_bool_binop_done:;
07114: # The claim names a kind this column cannot carry -- a
07115: # width that cannot hold the precision, an unsigned column,
07116: # or a type with no route to the kind at all. That is a
07117: # mistake rather than drift, so it is said out loud, and
07118: # saying it here rather than per kind is what makes all
07119: # five answer the way the Arrow path already answers them.
07120: # The write still goes ahead as the column's own type
07121: # implies.
07122: #
07123: # An Arrow-backed column has already been through
07124: # `_dataframe_normalize_claimed_arrow`, which says the same
07125: # thing against the Arrow type and is the one that knows
07126: # whether the claim could be reshaped. Saying it twice for
07127: # one claim would be worse than either.
+07128: dtype = df.dtypes.iloc[col.setup.orig_index]
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7128, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7128, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_9, __pyx_v_col->setup->orig_index, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7128, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_4); __pyx_t_4 = 0;
+07129: if arrow_dtype is None or not isinstance(dtype, arrow_dtype):
__pyx_t_12 = (__pyx_v_arrow_dtype == Py_None);
if (!__pyx_t_12) {
} else {
__pyx_t_6 = __pyx_t_12;
goto __pyx_L33_bool_binop_done;
}
__pyx_t_12 = PyObject_IsInstance(__pyx_v_dtype, __pyx_v_arrow_dtype); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 7129, __pyx_L1_error)
__pyx_t_5 = (!__pyx_t_12);
__pyx_t_6 = __pyx_t_5;
__pyx_L33_bool_binop_done:;
if (__pyx_t_6) {
/* … */
}
+07130: _log_roundtrip_claim_dropped(
__pyx_t_9 = __pyx_f_7questdb_7_client__log_roundtrip_claim_dropped(__pyx_t_4, __pyx_v_kind, __pyx_v_dtype); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7130, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+07131: df_cols[col.setup.orig_index], kind, dtype)
__pyx_t_4 = __Pyx_GetItemInt_List(__pyx_v_df_cols, __pyx_v_col->setup->orig_index, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7131, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4);
+07132: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
07133:
07134:
+07135: cdef void_int _dataframe_columnar_populate_chunk(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_populate_chunk(struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan, struct qwp_chunk *__pyx_v_chunk, size_t __pyx_v_row_offset, size_t __pyx_v_row_count) {
size_t __pyx_v_col_index;
struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col;
struct __pyx_t_7questdb_7_client_col_t *__pyx_v_at_col;
size_t __pyx_v_at_col_index;
size_t __pyx_v_field_count;
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_prebuilt;
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_at_prebuilt;
struct line_sender_error *__pyx_v_err;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_populate_chunk", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07136: dataframe_plan_t* plan,
07137: qwp_chunk* chunk,
07138: size_t row_offset,
07139: size_t row_count) except -1:
07140: cdef size_t col_index
07141: cdef col_t* col
+07142: cdef col_t* at_col = NULL
__pyx_v_at_col = NULL;
+07143: cdef size_t at_col_index = 0
__pyx_v_at_col_index = 0;
+07144: cdef size_t field_count = 0
__pyx_v_field_count = 0;
+07145: cdef pyobj_built_t* prebuilt = NULL
__pyx_v_prebuilt = NULL;
+07146: cdef pyobj_built_t* at_prebuilt = NULL
__pyx_v_at_prebuilt = NULL;
+07147: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
07148:
+07149: for col_index in range(plan.col_count):
__pyx_t_1 = __pyx_v_plan->col_count;
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_col_index = __pyx_t_3;
+07150: col = &plan.cols.d[col_index]
__pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_col_index]));
+07151: if col.setup.target == col_target_t.col_target_at:
__pyx_t_4 = (__pyx_v_col->setup->target == __pyx_e_7questdb_7_client_col_target_at);
if (__pyx_t_4) {
/* … */
goto __pyx_L5;
}
+07152: at_col = col
__pyx_v_at_col = __pyx_v_col;
+07153: at_col_index = col_index
__pyx_v_at_col_index = __pyx_v_col_index;
+07154: elif col.setup.target in (
switch (__pyx_v_col->setup->target) {
case __pyx_e_7questdb_7_client_col_target_column_bool:
/* … */
__pyx_t_4 = 1;
break;
default:
__pyx_t_4 = 0;
break;
}
__pyx_t_5 = __pyx_t_4;
if (__pyx_t_5) {
/* … */
goto __pyx_L5;
}
+07155: col_target_t.col_target_column_bool,
case __pyx_e_7questdb_7_client_col_target_column_i64:
+07156: col_target_t.col_target_column_i64,
case __pyx_e_7questdb_7_client_col_target_column_f64:
+07157: col_target_t.col_target_column_f64,
case __pyx_e_7questdb_7_client_col_target_column_ts:
+07158: col_target_t.col_target_column_ts,
case __pyx_e_7questdb_7_client_col_target_column_str:
+07159: col_target_t.col_target_column_str,
case __pyx_e_7questdb_7_client_col_target_symbol:
+07160: col_target_t.col_target_symbol,
case __pyx_e_7questdb_7_client_col_target_column_i8:
+07161: col_target_t.col_target_column_i8,
case __pyx_e_7questdb_7_client_col_target_column_i16:
+07162: col_target_t.col_target_column_i16,
case __pyx_e_7questdb_7_client_col_target_column_i32:
+07163: col_target_t.col_target_column_i32,
case __pyx_e_7questdb_7_client_col_target_column_f32:
+07164: col_target_t.col_target_column_f32,
case __pyx_e_7questdb_7_client_col_target_column_uuid:
+07165: col_target_t.col_target_column_uuid,
case __pyx_e_7questdb_7_client_col_target_column_ipv4:
+07166: col_target_t.col_target_column_ipv4,
case __pyx_e_7questdb_7_client_col_target_column_binary:
+07167: col_target_t.col_target_column_binary,
case __pyx_e_7questdb_7_client_col_target_column_arrow:
+07168: col_target_t.col_target_column_arrow,
case __pyx_e_7questdb_7_client_col_target_column_decimal:
07169: col_target_t.col_target_column_decimal):
+07170: if plan.pyobj_built != NULL:
__pyx_t_5 = (__pyx_v_plan->pyobj_built != NULL);
if (__pyx_t_5) {
/* … */
goto __pyx_L6;
}
+07171: prebuilt = plan.pyobj_built[col_index]
__pyx_v_prebuilt = (__pyx_v_plan->pyobj_built[__pyx_v_col_index]);
07172: else:
+07173: prebuilt = NULL
/*else*/ {
__pyx_v_prebuilt = NULL;
}
__pyx_L6:;
+07174: _dataframe_columnar_append_field(
__pyx_t_6 = __pyx_f_7questdb_7_client__dataframe_columnar_append_field(__pyx_v_chunk, __pyx_v_col, __pyx_v_prebuilt, __pyx_v_row_offset, __pyx_v_row_count); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7174, __pyx_L1_error)
07175: chunk, col, prebuilt, row_offset, row_count)
+07176: field_count += 1
__pyx_v_field_count = (__pyx_v_field_count + 1);
+07177: elif col.setup.target != col_target_t.col_target_skip:
__pyx_t_5 = (__pyx_v_col->setup->target != __pyx_e_7questdb_7_client_col_target_skip);
if (unlikely(__pyx_t_5)) {
/* … */
}
__pyx_L5:;
}
+07178: raise RuntimeError(
__pyx_t_8 = NULL;
07179: 'Unsupported columnar field target: %d.'
+07180: % <int>col.setup.target)
__pyx_t_9 = __Pyx_PyLong_From_int(((int)__pyx_v_col->setup->target)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7180, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Unsupported_columnar_field_targe_2, __pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 7180, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_11 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_10}; __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7178, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __Pyx_Raise(__pyx_t_7, 0, 0, 0); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __PYX_ERR(0, 7178, __pyx_L1_error)
07181:
+07182: if field_count == 0:
__pyx_t_5 = (__pyx_v_field_count == 0);
if (unlikely(__pyx_t_5)) {
/* … */
}
+07183: raise RuntimeError(
__pyx_t_10 = NULL;
__pyx_t_1 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_mstate_global->__pyx_kp_u_Validated_columnar_plan_has_no_n};
__pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_1, (2-__pyx_t_1) | (__pyx_t_1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7183, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
}
__Pyx_Raise(__pyx_t_7, 0, 0, 0);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__PYX_ERR(0, 7183, __pyx_L1_error)
07184: 'Validated columnar plan has no non-timestamp data columns.')
+07185: if plan.at_value == _AT_IS_SERVER_NOW:
__pyx_t_5 = (__pyx_v_plan->at_value == __pyx_v_7questdb_7_client__AT_IS_SERVER_NOW);
if (__pyx_t_5) {
/* … */
}
07186: # Explicit `at=ServerTimestamp` opt-in: the frame carries no
07187: # designated timestamp column; the server stamps rows on arrival.
+07188: if not qwp_chunk_at_now(chunk, &err):
__pyx_t_5 = (!qwp_chunk_at_now(__pyx_v_chunk, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
+07189: raise c_err_to_py(err)
__pyx_t_7 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7189, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_Raise(__pyx_t_7, 0, 0, 0); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __PYX_ERR(0, 7189, __pyx_L1_error)
+07190: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+07191: if plan.at_value >= 0:
__pyx_t_5 = (__pyx_v_plan->at_value >= 0);
if (__pyx_t_5) {
/* … */
}
07192: # Fixed scalar designated timestamp shared by every row.
+07193: if not qwp_chunk_at_scalar_nanos(
__pyx_t_5 = (!qwp_chunk_at_scalar_nanos(__pyx_v_chunk, __pyx_v_plan->at_value, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
07194: chunk, plan.at_value, &err):
+07195: raise c_err_to_py(err)
__pyx_t_7 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7195, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_Raise(__pyx_t_7, 0, 0, 0); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __PYX_ERR(0, 7195, __pyx_L1_error)
+07196: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+07197: if at_col == NULL:
__pyx_t_5 = (__pyx_v_at_col == NULL);
if (unlikely(__pyx_t_5)) {
/* … */
}
+07198: raise RuntimeError('Validated columnar plan has no timestamp column.')
__pyx_t_10 = NULL;
__pyx_t_1 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_mstate_global->__pyx_kp_u_Validated_columnar_plan_has_no_t};
__pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_1, (2-__pyx_t_1) | (__pyx_t_1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7198, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
}
__Pyx_Raise(__pyx_t_7, 0, 0, 0);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__PYX_ERR(0, 7198, __pyx_L1_error)
+07199: if plan.pyobj_built != NULL:
__pyx_t_5 = (__pyx_v_plan->pyobj_built != NULL);
if (__pyx_t_5) {
/* … */
}
+07200: at_prebuilt = plan.pyobj_built[at_col_index]
__pyx_v_at_prebuilt = (__pyx_v_plan->pyobj_built[__pyx_v_at_col_index]);
+07201: _dataframe_columnar_append_at(
__pyx_t_6 = __pyx_f_7questdb_7_client__dataframe_columnar_append_at(__pyx_v_chunk, __pyx_v_at_col, __pyx_v_at_prebuilt, __pyx_v_row_offset, __pyx_v_row_count); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7201, __pyx_L1_error)
07202: chunk, at_col, at_prebuilt, row_offset, row_count)
07203:
07204:
+07205: cdef void_int _dataframe_columnar_sync(qwp_direct_sender* conn) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_sync(struct qwp_direct_sender *__pyx_v_conn) {
struct line_sender_error *__pyx_v_err;
int __pyx_v_ok;
PyThreadState *__pyx_v_gs;
uint64_t __pyx_v_start_ns;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_sync", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+07206: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+07207: cdef bint ok = False
__pyx_v_ok = 0;
+07208: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+07209: cdef uint64_t start_ns = 0
__pyx_v_start_ns = 0;
07210: global _dataframe_columnar_sync_calls
07211: global _dataframe_columnar_sync_ns
+07212: if _dataframe_columnar_count_io_stats:
if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
}
+07213: start_ns = time.perf_counter_ns()
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7213, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_perf_counter_ns); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7213, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_2);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_2);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7213, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_t_6 = __Pyx_PyLong_As_uint64_t(__pyx_t_1); if (unlikely((__pyx_t_6 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 7213, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_v_start_ns = __pyx_t_6;
+07214: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+07215: ok = qwp_direct_sender_commit(
__pyx_v_ok = qwp_direct_sender_commit(__pyx_v_conn, qwpws_ack_level_ok, (&__pyx_v_err));
07216: conn,
07217: qwpws_ack_level.qwpws_ack_level_ok,
07218: &err)
+07219: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+07220: if _dataframe_columnar_count_io_stats:
if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
}
+07221: _dataframe_columnar_sync_calls += 1
__pyx_v_7questdb_7_client__dataframe_columnar_sync_calls = (__pyx_v_7questdb_7_client__dataframe_columnar_sync_calls + 1);
+07222: _dataframe_columnar_sync_ns += time.perf_counter_ns() - start_ns
__pyx_t_1 = __Pyx_PyLong_From_uint64_t(__pyx_v_7questdb_7_client__dataframe_columnar_sync_ns); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7222, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7222, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_perf_counter_ns); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7222, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7222, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_7 = __Pyx_PyLong_From_uint64_t(__pyx_v_start_ns); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7222, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_2 = __Pyx_PyNumber_Subtract_object_int(__pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7222, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyNumber_InPlaceAdd_int_object(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7222, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_6 = __Pyx_PyLong_As_uint64_t(__pyx_t_7); if (unlikely((__pyx_t_6 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 7222, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_7questdb_7_client__dataframe_columnar_sync_ns = __pyx_t_6;
+07223: if not ok:
__pyx_t_8 = (!__pyx_v_ok);
if (unlikely(__pyx_t_8)) {
/* … */
}
+07224: raise c_err_to_py(err)
__pyx_t_7 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7224, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_Raise(__pyx_t_7, 0, 0, 0); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __PYX_ERR(0, 7224, __pyx_L1_error)
07225:
07226:
+07227: cdef bint _dataframe_columnar_force_drop_after_error(
static int __pyx_f_7questdb_7_client__dataframe_columnar_force_drop_after_error(struct qwp_direct_sender *__pyx_v_conn, int __pyx_v_flushed) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
07228: qwp_direct_sender* conn,
07229: bint flushed) noexcept:
07230: # A failed call keeps the frames it pipelined after its last commit out
07231: # of the table. Batches up to its last commit -- the first flush on a
07232: # fresh connection commits on its own, and so does each checkpoint --
07233: # may already be in the table, and the caller hears so through
07234: # `in_doubt`. The direct pool's return path best-effort-commits
07235: # pipelined frames, so a connection that saw any flush is dropped
07236: # (discarding the uncommitted frames) instead of returned. When no
07237: # flush succeeded there is nothing pipelined and the connection can be
07238: # returned normally: the FFI return path itself closes (rather than
07239: # recycles) a conn that recorded a terminal transport or protocol
07240: # error.
+07241: if conn == NULL:
__pyx_t_1 = (__pyx_v_conn == NULL);
if (__pyx_t_1) {
/* … */
}
+07242: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+07243: return flushed
{
__pyx_r = __pyx_v_flushed;
}
goto __pyx_L0;
07244:
07245:
+07246: cdef bint _dataframe_columnar_is_deferred_capacity_error(
static int __pyx_f_7questdb_7_client__dataframe_columnar_is_deferred_capacity_error(struct line_sender_error *__pyx_v_err) {
size_t __pyx_v_msg_len;
char const *__pyx_v_msg;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
07247: line_sender_error* err) noexcept:
+07248: cdef size_t msg_len = 0
__pyx_v_msg_len = 0;
+07249: cdef const char* msg = line_sender_error_msg(err, &msg_len)
__pyx_v_msg = line_sender_error_msg(__pyx_v_err, (&__pyx_v_msg_len));
+07250: if msg_len < 47:
__pyx_t_1 = (__pyx_v_msg_len < 47);
if (__pyx_t_1) {
/* … */
}
+07251: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+07252: return strncmp(
{
__pyx_r = (strncmp(__pyx_v_msg, __pyx_k_column_sender_deferred_flush_cap, 47) == 0);
}
goto __pyx_L0;
07253: msg,
07254: "column sender deferred flush capacity exhausted",
07255: 47) == 0
07256:
07257:
+07258: cdef void_int _dataframe_columnar_flush(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_flush(struct qwp_direct_sender *__pyx_v_conn, struct qwp_chunk *__pyx_v_chunk, int __pyx_v_retry_after_sync, int *__pyx_v_may_have_committed_prefix) {
struct line_sender_error *__pyx_v_err;
enum line_sender_error_code __pyx_v_err_code;
int __pyx_v_ok;
PyThreadState *__pyx_v_gs;
uint64_t __pyx_v_start_ns;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_flush", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07259: qwp_direct_sender* conn,
07260: qwp_chunk* chunk,
07261: bint retry_after_sync,
07262: bint* may_have_committed_prefix) except -1:
+07263: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
07264: cdef line_sender_error_code err_code
+07265: cdef bint ok = False
__pyx_v_ok = 0;
+07266: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+07267: cdef uint64_t start_ns = 0
__pyx_v_start_ns = 0;
07268: global _dataframe_columnar_flush_calls
07269: global _dataframe_columnar_flush_ns
07270: global _dataframe_columnar_flush_retry_syncs
07271:
+07272: if _dataframe_columnar_count_io_stats:
if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
}
+07273: start_ns = time.perf_counter_ns()
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7273, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_perf_counter_ns); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7273, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_2);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_2);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7273, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_t_6 = __Pyx_PyLong_As_uint64_t(__pyx_t_1); if (unlikely((__pyx_t_6 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 7273, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_v_start_ns = __pyx_t_6;
+07274: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+07275: ok = qwp_direct_sender_flush(conn, chunk, &err)
__pyx_v_ok = qwp_direct_sender_flush(__pyx_v_conn, __pyx_v_chunk, (&__pyx_v_err));
+07276: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+07277: if _dataframe_columnar_count_io_stats:
if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
}
+07278: _dataframe_columnar_flush_calls += 1
__pyx_v_7questdb_7_client__dataframe_columnar_flush_calls = (__pyx_v_7questdb_7_client__dataframe_columnar_flush_calls + 1);
+07279: _dataframe_columnar_flush_ns += time.perf_counter_ns() - start_ns
__pyx_t_1 = __Pyx_PyLong_From_uint64_t(__pyx_v_7questdb_7_client__dataframe_columnar_flush_ns); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7279, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7279, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_perf_counter_ns); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7279, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7279, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_7 = __Pyx_PyLong_From_uint64_t(__pyx_v_start_ns); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7279, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_2 = __Pyx_PyNumber_Subtract_object_int(__pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7279, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyNumber_InPlaceAdd_int_object(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7279, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_6 = __Pyx_PyLong_As_uint64_t(__pyx_t_7); if (unlikely((__pyx_t_6 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 7279, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_7questdb_7_client__dataframe_columnar_flush_ns = __pyx_t_6;
+07280: if ok:
if (__pyx_v_ok) {
/* … */
}
+07281: may_have_committed_prefix[0] = True
(__pyx_v_may_have_committed_prefix[0]) = 1;
+07282: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
07283:
+07284: err_code = line_sender_error_get_code(err)
__pyx_v_err_code = line_sender_error_get_code(__pyx_v_err);
+07285: if (retry_after_sync and err_code == line_sender_error_invalid_api_call and
if (__pyx_v_retry_after_sync) {
} else {
__pyx_t_8 = __pyx_v_retry_after_sync;
goto __pyx_L7_bool_binop_done;
}
__pyx_t_9 = (__pyx_v_err_code == line_sender_error_invalid_api_call);
if (__pyx_t_9) {
} else {
__pyx_t_8 = __pyx_t_9;
goto __pyx_L7_bool_binop_done;
}
/* … */
if (__pyx_t_8) {
/* … */
}
+07286: _dataframe_columnar_is_deferred_capacity_error(err)):
__pyx_t_9 = __pyx_f_7questdb_7_client__dataframe_columnar_is_deferred_capacity_error(__pyx_v_err); __pyx_t_8 = __pyx_t_9; __pyx_L7_bool_binop_done:;
+07287: if _dataframe_columnar_count_io_stats:
if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
}
+07288: _dataframe_columnar_flush_retry_syncs += 1
__pyx_v_7questdb_7_client__dataframe_columnar_flush_retry_syncs = (__pyx_v_7questdb_7_client__dataframe_columnar_flush_retry_syncs + 1);
+07289: line_sender_error_free(err)
line_sender_error_free(__pyx_v_err);
+07290: err = NULL
__pyx_v_err = NULL;
+07291: _dataframe_columnar_sync(conn)
__pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_sync(__pyx_v_conn); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7291, __pyx_L1_error)
+07292: may_have_committed_prefix[0] = True
(__pyx_v_may_have_committed_prefix[0]) = 1;
+07293: if _dataframe_columnar_count_io_stats:
if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
}
+07294: start_ns = time.perf_counter_ns()
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7294, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_perf_counter_ns); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7294, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_2);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_2);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7294, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
}
__pyx_t_6 = __Pyx_PyLong_As_uint64_t(__pyx_t_7); if (unlikely((__pyx_t_6 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 7294, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__pyx_v_start_ns = __pyx_t_6;
+07295: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+07296: ok = qwp_direct_sender_flush(conn, chunk, &err)
__pyx_v_ok = qwp_direct_sender_flush(__pyx_v_conn, __pyx_v_chunk, (&__pyx_v_err));
+07297: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+07298: if _dataframe_columnar_count_io_stats:
if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
}
+07299: _dataframe_columnar_flush_calls += 1
__pyx_v_7questdb_7_client__dataframe_columnar_flush_calls = (__pyx_v_7questdb_7_client__dataframe_columnar_flush_calls + 1);
+07300: _dataframe_columnar_flush_ns += time.perf_counter_ns() - start_ns
__pyx_t_7 = __Pyx_PyLong_From_uint64_t(__pyx_v_7questdb_7_client__dataframe_columnar_flush_ns); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7300, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7300, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_perf_counter_ns); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7300, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7300, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_start_ns); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7300, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyNumber_Subtract_object_int(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7300, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyNumber_InPlaceAdd_int_object(__pyx_t_7, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7300, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_6 = __Pyx_PyLong_As_uint64_t(__pyx_t_3); if (unlikely((__pyx_t_6 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 7300, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_7questdb_7_client__dataframe_columnar_flush_ns = __pyx_t_6;
+07301: if ok:
if (__pyx_v_ok) {
/* … */
}
+07302: may_have_committed_prefix[0] = True
(__pyx_v_may_have_committed_prefix[0]) = 1;
+07303: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
07304:
+07305: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7305, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 7305, __pyx_L1_error)
07306:
07307:
+07308: cdef int _arrow_flush_once(
static int __pyx_f_7questdb_7_client__arrow_flush_once(struct qwp_direct_sender *__pyx_v_conn, struct line_sender_table_name __pyx_v_table, struct ArrowArray *__pyx_v_array, struct ArrowSchema *__pyx_v_schema, struct line_sender_column_name *__pyx_v_ts_column, int __pyx_v_at_scalar_set, int64_t __pyx_v_at_scalar_nanos, struct qwp_arrow_override const *__pyx_v_overrides, size_t __pyx_v_overrides_len, struct line_sender_error **__pyx_v_err) {
int __pyx_v_ok;
PyThreadState *__pyx_v_gs;
uint64_t __pyx_v_start_ns;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client._arrow_flush_once", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07309: qwp_direct_sender* conn,
07310: line_sender_table_name table,
07311: ArrowArray* array,
07312: ArrowSchema* schema,
07313: line_sender_column_name* ts_column,
07314: bint at_scalar_set,
07315: int64_t at_scalar_nanos,
07316: const qwp_arrow_override* overrides,
07317: size_t overrides_len,
07318: line_sender_error** err) except -1:
+07319: cdef bint ok = False
__pyx_v_ok = 0;
+07320: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+07321: cdef uint64_t start_ns = 0
__pyx_v_start_ns = 0;
07322: global _dataframe_columnar_flush_calls
07323: global _dataframe_columnar_flush_ns
07324:
+07325: if _dataframe_columnar_count_io_stats:
if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
}
+07326: start_ns = time.perf_counter_ns()
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7326, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_perf_counter_ns); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7326, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_2);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_2);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7326, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_t_6 = __Pyx_PyLong_As_uint64_t(__pyx_t_1); if (unlikely((__pyx_t_6 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 7326, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_v_start_ns = __pyx_t_6;
+07327: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+07328: if ts_column != NULL:
__pyx_t_7 = (__pyx_v_ts_column != NULL);
if (__pyx_t_7) {
/* … */
goto __pyx_L4;
}
+07329: ok = qwp_direct_sender_flush_arrow_batch_at_column(
__pyx_v_ok = qwp_direct_sender_flush_arrow_batch_at_column(__pyx_v_conn, __pyx_v_table, __pyx_v_array, __pyx_v_schema, (__pyx_v_ts_column[0]), __pyx_v_overrides, __pyx_v_overrides_len, __pyx_v_err);
07330: conn, table, array, schema, ts_column[0],
07331: overrides, overrides_len, err)
+07332: elif at_scalar_set:
if (__pyx_v_at_scalar_set) {
/* … */
goto __pyx_L4;
}
+07333: ok = qwp_direct_sender_flush_arrow_batch_at_scalar_nanos(
__pyx_v_ok = qwp_direct_sender_flush_arrow_batch_at_scalar_nanos(__pyx_v_conn, __pyx_v_table, __pyx_v_array, __pyx_v_schema, __pyx_v_at_scalar_nanos, __pyx_v_overrides, __pyx_v_overrides_len, __pyx_v_err);
07334: conn, table, array, schema, at_scalar_nanos,
07335: overrides, overrides_len, err)
07336: else:
+07337: ok = qwp_direct_sender_flush_arrow_batch_at_now(
/*else*/ {
/* … */
__pyx_v_ok = qwp_direct_sender_flush_arrow_batch_at_now(__pyx_v_conn, __pyx_v_table, __pyx_v_array, __pyx_v_schema, __pyx_v_overrides, __pyx_v_overrides_len, __pyx_v_err);
}
__pyx_L4:;
07338: conn, table, array, schema,
07339: overrides, overrides_len, err)
+07340: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+07341: if _dataframe_columnar_count_io_stats:
if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
}
+07342: _dataframe_columnar_flush_calls += 1
__pyx_v_7questdb_7_client__dataframe_columnar_flush_calls = (__pyx_v_7questdb_7_client__dataframe_columnar_flush_calls + 1);
+07343: _dataframe_columnar_flush_ns += time.perf_counter_ns() - start_ns
__pyx_t_1 = __Pyx_PyLong_From_uint64_t(__pyx_v_7questdb_7_client__dataframe_columnar_flush_ns); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7343, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7343, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_perf_counter_ns); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7343, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_8))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_8, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7343, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_8 = __Pyx_PyLong_From_uint64_t(__pyx_v_start_ns); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7343, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_2 = __Pyx_PyNumber_Subtract_object_int(__pyx_t_4, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7343, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_8 = __Pyx_PyNumber_InPlaceAdd_int_object(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7343, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_6 = __Pyx_PyLong_As_uint64_t(__pyx_t_8); if (unlikely((__pyx_t_6 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 7343, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_v_7questdb_7_client__dataframe_columnar_flush_ns = __pyx_t_6;
+07344: return 1 if ok else 0
if (__pyx_v_ok) {
__pyx_t_9 = 1;
} else {
__pyx_t_9 = 0;
}
{
__pyx_r = __pyx_t_9;
}
goto __pyx_L0;
07345:
07346:
+07347: cdef void_int _dataframe_arrow_flush_batch(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_arrow_flush_batch(struct qwp_direct_sender *__pyx_v_conn, struct line_sender_table_name __pyx_v_table, struct ArrowArray *__pyx_v_array, struct ArrowSchema *__pyx_v_schema, struct line_sender_column_name *__pyx_v_ts_column, int __pyx_v_at_scalar_set, int64_t __pyx_v_at_scalar_nanos, struct qwp_arrow_override const *__pyx_v_overrides, size_t __pyx_v_overrides_len, int __pyx_v_retry_after_sync, int *__pyx_v_may_have_committed_prefix, size_t *__pyx_v_deferred_since_sync) {
struct line_sender_error *__pyx_v_err;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client._dataframe_arrow_flush_batch", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07348: qwp_direct_sender* conn,
07349: line_sender_table_name table,
07350: ArrowArray* array,
07351: ArrowSchema* schema,
07352: line_sender_column_name* ts_column,
07353: bint at_scalar_set,
07354: int64_t at_scalar_nanos,
07355: const qwp_arrow_override* overrides,
07356: size_t overrides_len,
07357: bint retry_after_sync,
07358: bint* may_have_committed_prefix,
07359: size_t* deferred_since_sync) except -1:
+07360: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
07361: global _dataframe_columnar_flush_retry_syncs
07362:
+07363: if _arrow_flush_once(
__pyx_t_1 = __pyx_f_7questdb_7_client__arrow_flush_once(__pyx_v_conn, __pyx_v_table, __pyx_v_array, __pyx_v_schema, __pyx_v_ts_column, __pyx_v_at_scalar_set, __pyx_v_at_scalar_nanos, __pyx_v_overrides, __pyx_v_overrides_len, (&__pyx_v_err)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 7363, __pyx_L1_error)
__pyx_t_2 = (__pyx_t_1 != 0);
if (__pyx_t_2) {
/* … */
}
07364: conn, table, array, schema, ts_column,
07365: at_scalar_set, at_scalar_nanos,
07366: overrides, overrides_len, &err):
+07367: may_have_committed_prefix[0] = True
(__pyx_v_may_have_committed_prefix[0]) = 1;
+07368: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
07369:
07370: # A batch larger than the server per-batch cap is split into several
07371: # deferred frames, so the caller's batch counter can undercount the
07372: # 127-slot in-flight window; commit to drain it and retry once. The
07373: # failed frame itself never hit the wire (`array` was re-exported;
07374: # `release` must still be set for the retry to be safe). The native split
07375: # path never exposes a retryable error after committing an internal prefix;
07376: # this explicit sync nevertheless makes the higher-level source prefix
07377: # sticky before the failed batch is retried.
+07378: if (retry_after_sync
if (__pyx_v_retry_after_sync) {
} else {
__pyx_t_2 = __pyx_v_retry_after_sync;
goto __pyx_L5_bool_binop_done;
}
/* … */
if (__pyx_t_2) {
/* … */
}
+07379: and line_sender_error_get_code(err) ==
__pyx_t_3 = (line_sender_error_get_code(__pyx_v_err) == line_sender_error_invalid_api_call);
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L5_bool_binop_done;
}
07380: line_sender_error_invalid_api_call
+07381: and _dataframe_columnar_is_deferred_capacity_error(err)
__pyx_t_3 = __pyx_f_7questdb_7_client__dataframe_columnar_is_deferred_capacity_error(__pyx_v_err);
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L5_bool_binop_done;
}
+07382: and array.release != NULL):
__pyx_t_3 = (__pyx_v_array->release != NULL); __pyx_t_2 = __pyx_t_3; __pyx_L5_bool_binop_done:;
+07383: if _dataframe_columnar_count_io_stats:
if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
}
+07384: _dataframe_columnar_flush_retry_syncs += 1
__pyx_v_7questdb_7_client__dataframe_columnar_flush_retry_syncs = (__pyx_v_7questdb_7_client__dataframe_columnar_flush_retry_syncs + 1);
+07385: line_sender_error_free(err)
line_sender_error_free(__pyx_v_err);
+07386: err = NULL
__pyx_v_err = NULL;
+07387: _dataframe_columnar_sync(conn)
__pyx_t_4 = __pyx_f_7questdb_7_client__dataframe_columnar_sync(__pyx_v_conn); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7387, __pyx_L1_error)
+07388: may_have_committed_prefix[0] = True
(__pyx_v_may_have_committed_prefix[0]) = 1;
+07389: deferred_since_sync[0] = 0
(__pyx_v_deferred_since_sync[0]) = 0;
+07390: if _arrow_flush_once(
__pyx_t_1 = __pyx_f_7questdb_7_client__arrow_flush_once(__pyx_v_conn, __pyx_v_table, __pyx_v_array, __pyx_v_schema, __pyx_v_ts_column, __pyx_v_at_scalar_set, __pyx_v_at_scalar_nanos, __pyx_v_overrides, __pyx_v_overrides_len, (&__pyx_v_err)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 7390, __pyx_L1_error)
__pyx_t_2 = (__pyx_t_1 != 0);
if (__pyx_t_2) {
/* … */
}
07391: conn, table, array, schema, ts_column,
07392: at_scalar_set, at_scalar_nanos,
07393: overrides, overrides_len, &err):
+07394: may_have_committed_prefix[0] = True
(__pyx_v_may_have_committed_prefix[0]) = 1;
+07395: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
07396:
+07397: raise c_err_to_py(err)
__pyx_t_5 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7397, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __PYX_ERR(0, 7397, __pyx_L1_error)
07398:
07399:
+07400: def _debug_dataframe_columnar_io_stats(
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_109_debug_dataframe_columnar_io_stats(PyObject *__pyx_self, #if CYTHON_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_108_debug_dataframe_columnar_io_stats, "\n Internal benchmark hook for columnar flush/sync timing.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_109_debug_dataframe_columnar_io_stats = {"_debug_dataframe_columnar_io_stats", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_109_debug_dataframe_columnar_io_stats, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_108_debug_dataframe_columnar_io_stats}; static PyObject *__pyx_pw_7questdb_7_client_109_debug_dataframe_columnar_io_stats(PyObject *__pyx_self, #if CYTHON_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, 7400, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 7400, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 7400, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_dataframe_columnar_io_stats", 0) < (0)) __PYX_ERR(0, 7400, __pyx_L3_error) /* … */ /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_108_debug_dataframe_columnar_io_stats(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_enabled, int __pyx_v_reset) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client._debug_dataframe_columnar_io_stats", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ { PyObject* __pyx_temp[2] = {Py_None, __pyx_t_20}; __pyx_t_18 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 7400, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); } __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_109_debug_dataframe_columnar_io_stats, 0, __pyx_mstate_global->__pyx_n_u_debug_dataframe_columnar_io_sta, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[203])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 7400, __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_t_18); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_dataframe_columnar_io_sta, __pyx_t_20) < (0)) __PYX_ERR(0, 7400, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+07401: object enabled=None,
if (!values[0]) values[0] = __Pyx_NewRef(((PyObject *)Py_None)); } else { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 7400, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 7400, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } if (!values[0]) values[0] = __Pyx_NewRef(((PyObject *)Py_None)); } __pyx_v_enabled = values[0]; if (values[1]) { __pyx_v_reset = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_reset == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 7402, __pyx_L3_error) } else {
+07402: bint reset=False):
__pyx_v_reset = ((int)((int)0));
}
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("_debug_dataframe_columnar_io_stats", 0, 0, 2, __pyx_nargs); __PYX_ERR(0, 7400, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client._debug_dataframe_columnar_io_stats", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_108_debug_dataframe_columnar_io_stats(__pyx_self, __pyx_v_enabled, __pyx_v_reset);
/* … */
__pyx_t_20 = __Pyx_PyBool_FromLong(((int)0)); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 7402, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_20);
07403: """
07404: Internal benchmark hook for columnar flush/sync timing.
07405: """
07406: global _dataframe_columnar_count_io_stats
07407: global _dataframe_columnar_flush_calls
07408: global _dataframe_columnar_flush_ns
07409: global _dataframe_columnar_sync_calls
07410: global _dataframe_columnar_sync_ns
07411: global _dataframe_columnar_flush_retry_syncs
07412:
+07413: if reset:
if (__pyx_v_reset) {
/* … */
}
+07414: _dataframe_columnar_flush_calls = 0
__pyx_v_7questdb_7_client__dataframe_columnar_flush_calls = 0;
+07415: _dataframe_columnar_flush_ns = 0
__pyx_v_7questdb_7_client__dataframe_columnar_flush_ns = 0;
+07416: _dataframe_columnar_sync_calls = 0
__pyx_v_7questdb_7_client__dataframe_columnar_sync_calls = 0;
+07417: _dataframe_columnar_sync_ns = 0
__pyx_v_7questdb_7_client__dataframe_columnar_sync_ns = 0;
+07418: _dataframe_columnar_flush_retry_syncs = 0
__pyx_v_7questdb_7_client__dataframe_columnar_flush_retry_syncs = 0;
+07419: if enabled is not None:
__pyx_t_1 = (__pyx_v_enabled != Py_None);
if (__pyx_t_1) {
/* … */
}
+07420: _dataframe_columnar_count_io_stats = bool(enabled)
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_enabled};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7420, __pyx_L1_error)
__Pyx_GOTREF((PyObject *)__pyx_t_2);
}
__pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_t_2)); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 7420, __pyx_L1_error)
__Pyx_DECREF((PyObject *)__pyx_t_2); __pyx_t_2 = 0;
__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats = __pyx_t_1;
07421: return {
+07422: 'enabled': _dataframe_columnar_count_io_stats,
__pyx_t_2 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7422, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7422, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_enabled, __pyx_t_3) < (0)) __PYX_ERR(0, 7422, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07423: 'flush_calls': _dataframe_columnar_flush_calls,
__pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_7questdb_7_client__dataframe_columnar_flush_calls); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7423, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_flush_calls, __pyx_t_3) < (0)) __PYX_ERR(0, 7422, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07424: 'flush_s': _dataframe_columnar_flush_ns / 1_000_000_000.0,
__pyx_t_3 = PyFloat_FromDouble((((double)__pyx_v_7questdb_7_client__dataframe_columnar_flush_ns) / 1000000000.0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7424, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_flush_s, __pyx_t_3) < (0)) __PYX_ERR(0, 7422, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07425: 'sync_calls': _dataframe_columnar_sync_calls,
__pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_7questdb_7_client__dataframe_columnar_sync_calls); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7425, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_sync_calls, __pyx_t_3) < (0)) __PYX_ERR(0, 7422, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07426: 'sync_s': _dataframe_columnar_sync_ns / 1_000_000_000.0,
__pyx_t_3 = PyFloat_FromDouble((((double)__pyx_v_7questdb_7_client__dataframe_columnar_sync_ns) / 1000000000.0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7426, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_sync_s, __pyx_t_3) < (0)) __PYX_ERR(0, 7422, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07427: 'flush_retry_syncs': _dataframe_columnar_flush_retry_syncs,
__pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_7questdb_7_client__dataframe_columnar_flush_retry_syncs); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7427, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_flush_retry_syncs, __pyx_t_3) < (0)) __PYX_ERR(0, 7422, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
07428: }
07429:
07430:
+07431: def _debug_dataframe_columnar_plan(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_111_debug_dataframe_columnar_plan(PyObject *__pyx_self,
#if CYTHON_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_111_debug_dataframe_columnar_plan = {"_debug_dataframe_columnar_plan", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_111_debug_dataframe_columnar_plan, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_111_debug_dataframe_columnar_plan(PyObject *__pyx_self,
#if CYTHON_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, 7431, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 7431, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_dataframe_columnar_plan", 0) < (0)) __PYX_ERR(0, 7431, __pyx_L3_error)
/* … */
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_110_debug_dataframe_columnar_plan(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_df, PyObject *__pyx_v_table_name, PyObject *__pyx_v_table_name_col, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at) {
struct qdb_pystr_buf *__pyx_v_b;
struct __pyx_t_7questdb_7_client_dataframe_plan_t __pyx_v_plan;
PyObject *__pyx_v_failures = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client._debug_dataframe_columnar_plan", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_failures);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_20 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 7431, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_20);
/* … */
__pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_111_debug_dataframe_columnar_plan, 0, __pyx_mstate_global->__pyx_n_u_debug_dataframe_columnar_plan, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[204])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 7431, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
#endif
__Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_18, __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_plan, __pyx_t_18) < (0)) __PYX_ERR(0, 7431, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
07432: object df,
07433: *,
+07434: object table_name=None,
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_table_name, Py_None) < (0)) __PYX_ERR(0, 7431, __pyx_L1_error)
+07435: object table_name_col=None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)((PyObject*)__pyx_mstate_global->__pyx_n_u_auto))); /* … */ if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)((PyObject*)__pyx_mstate_global->__pyx_n_u_auto))); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_table_name_col, Py_None) < (0)) __PYX_ERR(0, 7431, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_symbols, ((PyObject*)__pyx_mstate_global->__pyx_n_u_auto)) < (0)) __PYX_ERR(0, 7431, __pyx_L1_error)
07436: object symbols='auto',
+07437: object at=None):
if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_dataframe_columnar_plan", 1, 1, 1, i); __PYX_ERR(0, 7431, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 7431, __pyx_L3_error) /* … */ if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_None)); } __pyx_v_df = values[0]; __pyx_v_table_name = values[1]; __pyx_v_table_name_col = values[2]; __pyx_v_symbols = values[3]; __pyx_v_at = values[4]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_debug_dataframe_columnar_plan", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 7431, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client._debug_dataframe_columnar_plan", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_110_debug_dataframe_columnar_plan(__pyx_self, __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_at, Py_None) < (0)) __PYX_ERR(0, 7431, __pyx_L1_error)
+07438: cdef qdb_pystr_buf* b = qdb_pystr_buf_new()
__pyx_v_b = qdb_pystr_buf_new();
+07439: cdef dataframe_plan_t plan = dataframe_plan_blank()
__pyx_v_plan = __pyx_f_7questdb_7_client_dataframe_plan_blank();
07440: cdef object failures
+07441: try:
/*try:*/ {
+07442: _dataframe_plan_build(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_plan_build(__pyx_v_b, __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, (&__pyx_v_plan), ((PyObject*)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7442, __pyx_L4_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
07443: b,
07444: df,
07445: table_name,
07446: table_name_col,
07447: symbols,
07448: at,
07449: &plan,
+07450: _FIELD_TARGETS_QWP)
__pyx_t_1 = __pyx_v_7questdb_7_client__FIELD_TARGETS_QWP;
__Pyx_INCREF(__pyx_t_1);
+07451: _dataframe_columnar_promote_cols(df, &plan)
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_promote_cols(__pyx_v_df, (&__pyx_v_plan)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7451, __pyx_L4_error)
+07452: failures = _dataframe_columnar_plan_failures(df, &plan)
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_plan_failures(__pyx_v_df, (&__pyx_v_plan)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7452, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_failures = __pyx_t_1; __pyx_t_1 = 0;
07453: return {
+07454: 'supported': not bool(failures),
__pyx_t_1 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7454, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = NULL; __pyx_t_5 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_failures}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7454, __pyx_L4_error) __Pyx_GOTREF((PyObject *)__pyx_t_3); } __pyx_t_6 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_t_3)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 7454, __pyx_L4_error) __Pyx_DECREF((PyObject *)__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyBool_FromLong((!__pyx_t_6)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7454, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_supported, __pyx_t_3) < (0)) __PYX_ERR(0, 7454, __pyx_L4_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07455: 'failures': failures,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_failures, __pyx_v_failures) < (0)) __PYX_ERR(0, 7454, __pyx_L4_error)
+07456: 'normalizations': _dataframe_columnar_plan_normalizations(
__pyx_t_3 = __pyx_f_7questdb_7_client__dataframe_columnar_plan_normalizations(__pyx_v_df, (&__pyx_v_plan)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7456, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_normalizations, __pyx_t_3) < (0)) __PYX_ERR(0, 7454, __pyx_L4_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L3_return; }
07457: df,
07458: &plan),
07459: }
07460: finally:
+07461: dataframe_plan_release(&plan)
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_ExceptionSwap(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
if ( unlikely(__Pyx_GetException(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12) < 0)) __Pyx_ErrFetch(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__pyx_t_7 = __pyx_lineno; __pyx_t_8 = __pyx_clineno; __pyx_t_9 = __pyx_filename;
{
__pyx_f_7questdb_7_client_dataframe_plan_release((&__pyx_v_plan));
/* … */
__pyx_f_7questdb_7_client_dataframe_plan_release((&__pyx_v_plan));
+07462: qdb_pystr_buf_free(b)
qdb_pystr_buf_free(__pyx_v_b);
}
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ErrRestore(__pyx_t_10, __pyx_t_11, __pyx_t_12);
__pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0;
__pyx_lineno = __pyx_t_7; __pyx_clineno = __pyx_t_8; __pyx_filename = __pyx_t_9;
goto __pyx_L1_error;
}
__pyx_L3_return: {
__pyx_t_15 = __pyx_r;
__pyx_r = 0;
/* … */
qdb_pystr_buf_free(__pyx_v_b);
__pyx_r = __pyx_t_15;
__pyx_t_15 = 0;
goto __pyx_L0;
}
}
07463:
07464:
+07465: def _bench_dataframe_flush_arrow_batch(
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_113_bench_dataframe_flush_arrow_batch(PyObject *__pyx_self, #if CYTHON_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_112_bench_dataframe_flush_arrow_batch, "\n Internal benchmark hook for `qwp_direct_sender_flush_arrow_batch_at_now`\n FFI.\n\n `arrow_source` must expose the Arrow PyCapsule Interface\n (`__arrow_c_stream__`) \342\200\224 pa.RecordBatch, pa.Table, pa.RecordBatchReader,\n pl.DataFrame, or any other Arrow-native container. Pandas frames are\n not accepted here on purpose: this hook benches the Arrow FFI itself,\n not pandas\342\206\222Arrow conversion. Use `_bench_dataframe_plan_and_populate_\n column_chunks` for the pandas chunk-based path. Intentionally kept out\n of `__all__`.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_113_bench_dataframe_flush_arrow_batch = {"_bench_dataframe_flush_arrow_batch", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_113_bench_dataframe_flush_arrow_batch, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_112_bench_dataframe_flush_arrow_batch}; static PyObject *__pyx_pw_7questdb_7_client_113_bench_dataframe_flush_arrow_batch(PyObject *__pyx_self, #if CYTHON_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, 7465, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 7465, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_bench_dataframe_flush_arrow_batch", 0) < (0)) __PYX_ERR(0, 7465, __pyx_L3_error) /* … */ /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_112_bench_dataframe_flush_arrow_batch(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_arrow_source, PyObject *__pyx_v_table_name, PyObject *__pyx_v_at, PyObject *__pyx_v_conf, size_t __pyx_v_iterations) { CYTHON_UNUSED size_t __pyx_v_iteration; size_t __pyx_v_row_count; size_t __pyx_v_col_count; size_t __pyx_v_completed; struct questdb_db *__pyx_v_db; struct qwp_direct_sender *__pyx_v_conn; struct line_sender_error *__pyx_v_err; struct qdb_pystr_buf *__pyx_v_b; PyThreadState *__pyx_v_gs; PyObject *__pyx_v_conf_bytes = 0; int __pyx_v_any_flushed; int __pyx_v_may_have_committed_prefix; size_t __pyx_v_deferred_since_sync; struct line_sender_table_name __pyx_v_c_table_name; struct line_sender_column_name __pyx_v_c_ts_column; struct line_sender_column_name *__pyx_v_c_ts_column_ptr; struct ArrowSchema __pyx_v_c_schema; int __pyx_v_at_is_column; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("questdb._client._bench_dataframe_flush_arrow_batch", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_conf_bytes); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 7465, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); /* … */ __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_113_bench_dataframe_flush_arrow_batch, 0, __pyx_mstate_global->__pyx_n_u_bench_dataframe_flush_arrow_bat_2, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[205])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 7465, __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_18); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_bench_dataframe_flush_arrow_bat_2, __pyx_t_20) < (0)) __PYX_ERR(0, 7465, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
07466: object arrow_source,
07467: *,
+07468: object table_name=None,
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_table_name, Py_None) < (0)) __PYX_ERR(0, 7465, __pyx_L1_error)
+07469: object at=None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_at, Py_None) < (0)) __PYX_ERR(0, 7465, __pyx_L1_error)
+07470: object conf=None,
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_bench_dataframe_flush_arrow_batch", 1, 1, 1, i); __PYX_ERR(0, 7465, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 7465, __pyx_L3_error) /* … */ if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None)); } __pyx_v_arrow_source = values[0]; __pyx_v_table_name = values[1]; __pyx_v_at = values[2]; __pyx_v_conf = values[3]; if (values[4]) { __pyx_v_iterations = __Pyx_PyLong_As_size_t(values[4]); if (unlikely((__pyx_v_iterations == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 7471, __pyx_L3_error) } else { __pyx_v_iterations = ((size_t)((size_t)1)); } } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_bench_dataframe_flush_arrow_batch", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 7465, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client._bench_dataframe_flush_arrow_batch", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_112_bench_dataframe_flush_arrow_batch(__pyx_self, __pyx_v_arrow_source, __pyx_v_table_name, __pyx_v_at, __pyx_v_conf, __pyx_v_iterations); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_conf, Py_None) < (0)) __PYX_ERR(0, 7465, __pyx_L1_error)
+07471: size_t iterations=1):
__pyx_t_20 = __Pyx_PyLong_FromSize_t(((size_t)1)); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 7471, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_iterations, __pyx_t_20) < (0)) __PYX_ERR(0, 7465, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
07472: """
07473: Internal benchmark hook for `qwp_direct_sender_flush_arrow_batch_at_now`
07474: FFI.
07475:
07476: `arrow_source` must expose the Arrow PyCapsule Interface
07477: (`__arrow_c_stream__`) — pa.RecordBatch, pa.Table, pa.RecordBatchReader,
07478: pl.DataFrame, or any other Arrow-native container. Pandas frames are
07479: not accepted here on purpose: this hook benches the Arrow FFI itself,
07480: not pandas→Arrow conversion. Use `_bench_dataframe_plan_and_populate_
07481: column_chunks` for the pandas chunk-based path. Intentionally kept out
07482: of `__all__`.
07483: """
07484: cdef size_t iteration
+07485: cdef size_t row_count = 0
__pyx_v_row_count = 0;
+07486: cdef size_t col_count = 0
__pyx_v_col_count = 0;
+07487: cdef size_t completed = 0
__pyx_v_completed = 0;
+07488: cdef questdb_db* db = NULL
__pyx_v_db = NULL;
+07489: cdef qwp_direct_sender* conn = NULL
__pyx_v_conn = NULL;
+07490: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+07491: cdef qdb_pystr_buf* b = NULL
__pyx_v_b = NULL;
+07492: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
07493: cdef bytes conf_bytes
+07494: cdef bint any_flushed = False
__pyx_v_any_flushed = 0;
+07495: cdef bint may_have_committed_prefix = False
__pyx_v_may_have_committed_prefix = 0;
+07496: cdef size_t deferred_since_sync = 0
__pyx_v_deferred_since_sync = 0;
07497: cdef line_sender_table_name c_table_name
07498: cdef line_sender_column_name c_ts_column
+07499: cdef line_sender_column_name* c_ts_column_ptr = NULL
__pyx_v_c_ts_column_ptr = NULL;
07500: cdef ArrowSchema c_schema
+07501: cdef bint at_is_column = False
__pyx_v_at_is_column = 0;
07502:
+07503: if iterations == 0:
__pyx_t_1 = (__pyx_v_iterations == 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+07504: raise ValueError('iterations must be greater than zero')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_iterations_must_be_greater_than};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7504, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 7504, __pyx_L1_error)
+07505: if conf is None:
__pyx_t_1 = (__pyx_v_conf == Py_None);
if (unlikely(__pyx_t_1)) {
/* … */
}
+07506: raise ValueError('conf is required for flush_arrow_batch bench.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_conf_is_required_for_flush_arrow};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7506, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 7506, __pyx_L1_error)
+07507: if not hasattr(arrow_source, '__arrow_c_stream__'):
__pyx_t_1 = __Pyx_HasAttr(__pyx_v_arrow_source, __pyx_mstate_global->__pyx_n_u_arrow_c_stream_2); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 7507, __pyx_L1_error) __pyx_t_5 = (!__pyx_t_1); if (unlikely(__pyx_t_5)) { /* … */ }
+07508: raise TypeError(
__pyx_t_3 = NULL;
+07509: '_bench_dataframe_flush_arrow_batch requires an Arrow-native '
__pyx_t_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, 7509, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_6};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7508, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 7508, __pyx_L1_error)
07510: 'source exposing __arrow_c_stream__ '
07511: '(pa.RecordBatch / pa.Table / pl.DataFrame / RecordBatchReader). '
+07512: f'Got {type(arrow_source).__name__}.')
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_arrow_source)), __pyx_mstate_global->__pyx_n_u_name_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7512, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_t_6, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7512, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_bench_dataframe_flush_arrow_bat; __pyx_t_8[1] = __pyx_t_7; __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u__3;
+07513: if not isinstance(table_name, str):
__pyx_t_5 = PyUnicode_Check(__pyx_v_table_name);
__pyx_t_1 = (!__pyx_t_5);
if (unlikely(__pyx_t_1)) {
/* … */
}
+07514: raise TypeError(
__pyx_t_6 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_table_name_must_be_str_for_Arrow};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7514, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 7514, __pyx_L1_error)
07515: 'table_name must be str for Arrow-native DataFrame input.')
+07516: if at is None or isinstance(at, ServerTimestampType):
__pyx_t_5 = (__pyx_v_at == Py_None);
if (!__pyx_t_5) {
} else {
__pyx_t_1 = __pyx_t_5;
goto __pyx_L8_bool_binop_done;
}
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ServerTimestampType); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7516, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_5 = PyObject_IsInstance(__pyx_v_at, __pyx_t_2); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 7516, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_1 = __pyx_t_5;
__pyx_L8_bool_binop_done:;
if (__pyx_t_1) {
/* … */
goto __pyx_L7;
}
+07517: at_is_column = False
__pyx_v_at_is_column = 0;
+07518: elif isinstance(at, str):
__pyx_t_1 = PyUnicode_Check(__pyx_v_at);
if (likely(__pyx_t_1)) {
/* … */
goto __pyx_L7;
}
+07519: at_is_column = True
__pyx_v_at_is_column = 1;
07520: else:
+07521: raise TypeError(
/*else*/ {
__pyx_t_6 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_at_must_be_a_column_name_str_Ser};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7521, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 7521, __pyx_L1_error)
}
__pyx_L7:;
07522: 'at must be a column name str, ServerTimestamp, or None '
07523: 'for Arrow-native DataFrame input.')
07524:
+07525: row_count = int(
__pyx_t_6 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7525, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = __Pyx_PyLong_As_size_t(__pyx_t_6); if (unlikely((__pyx_t_4 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 7525, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_row_count = __pyx_t_4;
+07526: getattr(arrow_source, 'num_rows', None)
__pyx_t_6 = __Pyx_GetAttr3(__pyx_v_arrow_source, __pyx_mstate_global->__pyx_n_u_num_rows, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7526, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 7526, __pyx_L1_error) if (!__pyx_t_1) { __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } else { __Pyx_INCREF(__pyx_t_6); __pyx_t_2 = __pyx_t_6; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L10_bool_binop_done; }
+07527: or getattr(arrow_source, 'height', None)
__pyx_t_6 = __Pyx_GetAttr3(__pyx_v_arrow_source, __pyx_mstate_global->__pyx_n_u_height, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7527, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 7527, __pyx_L1_error) if (!__pyx_t_1) { __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } else { __Pyx_INCREF(__pyx_t_6); __pyx_t_2 = __pyx_t_6; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L10_bool_binop_done; }
+07528: or 0)
__pyx_t_6 = __Pyx_PyLong_From_long(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7528, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_2 = __pyx_t_6; __pyx_t_6 = 0; __pyx_L10_bool_binop_done:;
+07529: col_count = int(
__pyx_t_2 = __Pyx_PyNumber_Int(__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7529, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_4 = __Pyx_PyLong_As_size_t(__pyx_t_2); if (unlikely((__pyx_t_4 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 7529, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_col_count = __pyx_t_4;
+07530: getattr(arrow_source, 'num_columns', None)
__pyx_t_2 = __Pyx_GetAttr3(__pyx_v_arrow_source, __pyx_mstate_global->__pyx_n_u_num_columns, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7530, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 7530, __pyx_L1_error) if (!__pyx_t_1) { __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else { __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = __pyx_t_2; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L13_bool_binop_done; }
+07531: or getattr(arrow_source, 'width', None)
__pyx_t_2 = __Pyx_GetAttr3(__pyx_v_arrow_source, __pyx_mstate_global->__pyx_n_u_width, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7531, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 7531, __pyx_L1_error) if (!__pyx_t_1) { __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else { __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = __pyx_t_2; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L13_bool_binop_done; }
+07532: or 0)
__pyx_t_2 = __Pyx_PyLong_From_long(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7532, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = __pyx_t_2; __pyx_t_2 = 0; __pyx_L13_bool_binop_done:;
07533:
+07534: conf_bytes = conf.encode('utf-8') if isinstance(conf, str) else conf
__pyx_t_1 = PyUnicode_Check(__pyx_v_conf); if (__pyx_t_1) { __pyx_t_3 = __pyx_v_conf; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_utf_8}; __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7534, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); } if (!(likely(PyBytes_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_6))) __PYX_ERR(0, 7534, __pyx_L1_error) __pyx_t_2 = __pyx_t_6; __pyx_t_6 = 0; } else { __pyx_t_6 = __pyx_v_conf; __Pyx_INCREF(__pyx_t_6); if (!(likely(PyBytes_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_6))) __PYX_ERR(0, 7534, __pyx_L1_error) __pyx_t_2 = __pyx_t_6; __pyx_t_6 = 0; } __pyx_v_conf_bytes = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0;
+07535: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+07536: db = questdb_db_connect(conf_bytes, len(conf_bytes), &err)
if (unlikely(__pyx_v_conf_bytes == Py_None)) {
PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
__PYX_ERR(0, 7536, __pyx_L1_error)
}
__pyx_t_11 = __Pyx_PyBytes_AsString(__pyx_v_conf_bytes); if (unlikely((!__pyx_t_11) && PyErr_Occurred())) __PYX_ERR(0, 7536, __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, 7536, __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, 7536, __pyx_L1_error)
__pyx_v_db = questdb_db_connect(__pyx_t_11, __pyx_t_9, (&__pyx_v_err));
+07537: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+07538: if db == NULL:
__pyx_t_1 = (__pyx_v_db == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+07539: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7539, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 7539, __pyx_L1_error)
+07540: b = qdb_pystr_buf_new()
__pyx_v_b = qdb_pystr_buf_new();
+07541: memset(&c_schema, 0, sizeof(ArrowSchema))
(void)(memset((&__pyx_v_c_schema), 0, (sizeof(struct ArrowSchema))));
+07542: try:
/*try:*/ {
+07543: str_to_table_name(b, <PyObject*>table_name, &c_table_name)
__pyx_t_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, 7543, __pyx_L18_error)
+07544: if at_is_column:
if (__pyx_v_at_is_column) {
/* … */
}
+07545: str_to_column_name(b, at, &c_ts_column)
__pyx_t_2 = __pyx_v_at;
__Pyx_INCREF(__pyx_t_2);
if (!(likely(PyUnicode_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_2))) __PYX_ERR(0, 7545, __pyx_L18_error)
__pyx_t_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, 7545, __pyx_L18_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+07546: c_ts_column_ptr = &c_ts_column
__pyx_v_c_ts_column_ptr = (&__pyx_v_c_ts_column);
07547:
+07548: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+07549: conn = questdb_db_borrow_direct_sender(db, &err)
__pyx_v_conn = questdb_db_borrow_direct_sender(__pyx_v_db, (&__pyx_v_err));
+07550: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+07551: if conn == NULL:
__pyx_t_1 = (__pyx_v_conn == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+07552: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7552, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 7552, __pyx_L18_error)
+07553: try:
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_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:;
}
}
+07554: 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;
+07555: _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, 7555, __pyx_L25_error)
}
07556: conn, arrow_source, c_table_name, c_ts_column_ptr,
07557: False, 0, &c_schema, NULL, 0, &any_flushed,
07558: &deferred_since_sync, &may_have_committed_prefix,
07559: None, None)
+07560: if any_flushed:
if (__pyx_v_any_flushed) {
/* … */
}
+07561: _dataframe_columnar_sync(conn)
__pyx_t_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, 7561, __pyx_L25_error)
+07562: completed = iterations
__pyx_v_completed = __pyx_v_iterations;
+07563: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._bench_dataframe_flush_arrow_batch", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_6, &__pyx_t_3) < 0) __PYX_ERR(0, 7563, __pyx_L27_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_3);
+07564: questdb_db_drop_direct_sender(db, conn)
questdb_db_drop_direct_sender(__pyx_v_db, __pyx_v_conn);
+07565: conn = NULL
__pyx_v_conn = NULL;
+07566: raise
__Pyx_GIVEREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_6); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_6, __pyx_t_3); __pyx_t_2 = 0; __pyx_t_6 = 0; __pyx_t_3 = 0; __PYX_ERR(0, 7566, __pyx_L27_except_error) }
07567: finally:
+07568: if conn != NULL:
/*finally:*/ {
/*normal exit:*/{
__pyx_t_1 = (__pyx_v_conn != NULL);
if (__pyx_t_1) {
/* … */
}
goto __pyx_L24;
}
__pyx_L23_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_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:;
}
}
+07569: questdb_db_return_direct_sender(db, conn)
questdb_db_return_direct_sender(__pyx_v_db, __pyx_v_conn);
/* … */
questdb_db_return_direct_sender(__pyx_v_db, __pyx_v_conn);
07570: finally:
+07571: if c_schema.release != NULL:
/*finally:*/ {
/*normal exit:*/{
__pyx_t_1 = (__pyx_v_c_schema.release != NULL);
if (__pyx_t_1) {
/* … */
}
/* … */
__pyx_t_1 = (__pyx_v_c_schema.release != NULL);
if (__pyx_t_1) {
/* … */
}
+07572: c_schema.release(&c_schema)
__pyx_v_c_schema.release((&__pyx_v_c_schema));
/* … */
__pyx_v_c_schema.release((&__pyx_v_c_schema));
+07573: if b != NULL:
__pyx_t_1 = (__pyx_v_b != NULL);
if (__pyx_t_1) {
/* … */
}
/* … */
__pyx_t_1 = (__pyx_v_b != NULL);
if (__pyx_t_1) {
/* … */
}
+07574: qdb_pystr_buf_free(b)
qdb_pystr_buf_free(__pyx_v_b);
/* … */
qdb_pystr_buf_free(__pyx_v_b);
+07575: if db != NULL:
__pyx_t_1 = (__pyx_v_db != NULL);
if (__pyx_t_1) {
/* … */
}
goto __pyx_L19;
}
__pyx_L18_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_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:;
}
+07576: questdb_db_close(db)
questdb_db_close(__pyx_v_db);
/* … */
questdb_db_close(__pyx_v_db);
07577:
07578: return {
+07579: 'iterations': iterations,
__pyx_t_3 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7579, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_6 = __Pyx_PyLong_FromSize_t(__pyx_v_iterations); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7579, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (PyDict_SetItem(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_iterations, __pyx_t_6) < (0)) __PYX_ERR(0, 7579, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+07580: 'row_count': row_count,
__pyx_t_6 = __Pyx_PyLong_FromSize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7580, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (PyDict_SetItem(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_row_count, __pyx_t_6) < (0)) __PYX_ERR(0, 7579, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+07581: 'col_count': col_count,
__pyx_t_6 = __Pyx_PyLong_FromSize_t(__pyx_v_col_count); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7581, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (PyDict_SetItem(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_col_count, __pyx_t_6) < (0)) __PYX_ERR(0, 7579, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+07582: 'logical_cells': row_count * col_count,
__pyx_t_6 = __Pyx_PyLong_FromSize_t((__pyx_v_row_count * __pyx_v_col_count)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7582, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (PyDict_SetItem(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_logical_cells, __pyx_t_6) < (0)) __PYX_ERR(0, 7579, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+07583: 'completed': completed,
__pyx_t_6 = __Pyx_PyLong_FromSize_t(__pyx_v_completed); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7583, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (PyDict_SetItem(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_completed, __pyx_t_6) < (0)) __PYX_ERR(0, 7579, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
07584: }
07585:
07586:
+07587: def _bench_dataframe_plan_and_populate_column_chunks(
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_115_bench_dataframe_plan_and_populate_column_chunks(PyObject *__pyx_self, #if CYTHON_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_114_bench_dataframe_plan_and_populate_column_chunks, "\n Internal benchmark hook for Layer 1 pandas columnar work.\n\n This builds the shared dataframe plan and populates #148 chunks, but it\n never flushes to a sender. It is intentionally kept out of ``__all__``.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_115_bench_dataframe_plan_and_populate_column_chunks = {"_bench_dataframe_plan_and_populate_column_chunks", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_115_bench_dataframe_plan_and_populate_column_chunks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_114_bench_dataframe_plan_and_populate_column_chunks}; static PyObject *__pyx_pw_7questdb_7_client_115_bench_dataframe_plan_and_populate_column_chunks(PyObject *__pyx_self, #if CYTHON_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, 7587, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 7587, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_bench_dataframe_plan_and_populate_column_chunks", 0) < (0)) __PYX_ERR(0, 7587, __pyx_L3_error) /* … */ /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_114_bench_dataframe_plan_and_populate_column_chunks(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_df, PyObject *__pyx_v_table_name, PyObject *__pyx_v_table_name_col, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at, size_t __pyx_v_iterations, size_t __pyx_v_max_rows_per_chunk) { CYTHON_UNUSED size_t __pyx_v_iteration; struct qdb_pystr_buf *__pyx_v_b; struct __pyx_t_7questdb_7_client_dataframe_plan_t __pyx_v_plan; struct qwp_chunk *__pyx_v_chunk; struct line_sender_error *__pyx_v_err; uint64_t __pyx_v_start_row_path_emissions; uint64_t __pyx_v_end_row_path_emissions; size_t __pyx_v_row_count; size_t __pyx_v_col_count; size_t __pyx_v_populated_rows; size_t __pyx_v_populated_rows_total; size_t __pyx_v_populated_chunks; size_t __pyx_v_rows_per_chunk; size_t __pyx_v_row_offset; size_t __pyx_v_chunk_rows; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client._bench_dataframe_plan_and_populate_column_chunks", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_20 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 7587, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_115_bench_dataframe_plan_and_populate_column_chunks, 0, __pyx_mstate_global->__pyx_n_u_bench_dataframe_plan_and_popula, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[206])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 7587, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_18, __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_plan_and_popula, __pyx_t_18) < (0)) __PYX_ERR(0, 7587, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
07588: object df,
07589: *,
+07590: object table_name=None,
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_table_name, Py_None) < (0)) __PYX_ERR(0, 7587, __pyx_L1_error)
+07591: object table_name_col=None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)((PyObject*)__pyx_mstate_global->__pyx_n_u_auto))); /* … */ if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)((PyObject*)__pyx_mstate_global->__pyx_n_u_auto))); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_table_name_col, Py_None) < (0)) __PYX_ERR(0, 7587, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_symbols, ((PyObject*)__pyx_mstate_global->__pyx_n_u_auto)) < (0)) __PYX_ERR(0, 7587, __pyx_L1_error)
07592: object symbols='auto',
+07593: object at=None,
if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_bench_dataframe_plan_and_populate_column_chunks", 1, 1, 1, i); __PYX_ERR(0, 7587, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 7587, __pyx_L3_error) /* … */ if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_None)); } __pyx_v_df = values[0]; __pyx_v_table_name = values[1]; __pyx_v_table_name_col = values[2]; __pyx_v_symbols = values[3]; __pyx_v_at = values[4]; if (values[5]) { __pyx_v_iterations = __Pyx_PyLong_As_size_t(values[5]); if (unlikely((__pyx_v_iterations == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 7594, __pyx_L3_error) } else { __pyx_v_iterations = ((size_t)((size_t)1)); } if (values[6]) { __pyx_v_max_rows_per_chunk = __Pyx_PyLong_As_size_t(values[6]); if (unlikely((__pyx_v_max_rows_per_chunk == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 7595, __pyx_L3_error) } else { __pyx_v_max_rows_per_chunk = ((size_t)((size_t)0x4000)); } } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_bench_dataframe_plan_and_populate_column_chunks", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 7587, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client._bench_dataframe_plan_and_populate_column_chunks", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_114_bench_dataframe_plan_and_populate_column_chunks(__pyx_self, __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, __pyx_v_iterations, __pyx_v_max_rows_per_chunk); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_at, Py_None) < (0)) __PYX_ERR(0, 7587, __pyx_L1_error)
+07594: size_t iterations=1,
__pyx_t_18 = __Pyx_PyLong_FromSize_t(((size_t)1)); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 7594, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_iterations, __pyx_t_18) < (0)) __PYX_ERR(0, 7587, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+07595: size_t max_rows_per_chunk=16384):
__pyx_t_18 = __Pyx_PyLong_FromSize_t(((size_t)0x4000)); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 7595, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_max_rows_per_chunk, __pyx_t_18) < (0)) __PYX_ERR(0, 7587, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
07596: """
07597: Internal benchmark hook for Layer 1 pandas columnar work.
07598:
07599: This builds the shared dataframe plan and populates #148 chunks, but it
07600: never flushes to a sender. It is intentionally kept out of ``__all__``.
07601: """
07602: cdef size_t iteration
+07603: cdef qdb_pystr_buf* b = NULL
__pyx_v_b = NULL;
07604: cdef dataframe_plan_t plan
+07605: cdef qwp_chunk* chunk = NULL
__pyx_v_chunk = NULL;
+07606: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
07607: cdef uint64_t start_row_path_emissions
07608: cdef uint64_t end_row_path_emissions
+07609: cdef size_t row_count = 0
__pyx_v_row_count = 0;
+07610: cdef size_t col_count = 0
__pyx_v_col_count = 0;
+07611: cdef size_t populated_rows = 0
__pyx_v_populated_rows = 0;
+07612: cdef size_t populated_rows_total = 0
__pyx_v_populated_rows_total = 0;
+07613: cdef size_t populated_chunks = 0
__pyx_v_populated_chunks = 0;
+07614: cdef size_t rows_per_chunk = 0
__pyx_v_rows_per_chunk = 0;
07615: cdef size_t row_offset
07616: cdef size_t chunk_rows
07617: global _dataframe_count_row_path_emissions
07618: global _dataframe_row_path_emissions
07619:
+07620: if iterations == 0:
__pyx_t_1 = (__pyx_v_iterations == 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+07621: raise ValueError('iterations must be greater than zero')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_iterations_must_be_greater_than};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7621, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 7621, __pyx_L1_error)
07622:
+07623: start_row_path_emissions = _dataframe_row_path_emissions
__pyx_v_start_row_path_emissions = __pyx_v_7questdb_7_client__dataframe_row_path_emissions;
+07624: _dataframe_count_row_path_emissions = True
__pyx_v_7questdb_7_client__dataframe_count_row_path_emissions = 1;
+07625: try:
/*try:*/ {
+07626: for iteration in range(iterations):
__pyx_t_4 = __pyx_v_iterations;
__pyx_t_5 = __pyx_t_4;
for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
__pyx_v_iteration = __pyx_t_6;
+07627: b = qdb_pystr_buf_new()
__pyx_v_b = qdb_pystr_buf_new();
+07628: plan = dataframe_plan_blank()
__pyx_v_plan = __pyx_f_7questdb_7_client_dataframe_plan_blank();
+07629: try:
/*try:*/ {
+07630: _dataframe_plan_build(
__pyx_t_7 = __pyx_f_7questdb_7_client__dataframe_plan_build(__pyx_v_b, __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, (&__pyx_v_plan), ((PyObject*)__pyx_t_2)); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7630, __pyx_L12_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
07631: b,
07632: df,
07633: table_name,
07634: table_name_col,
07635: symbols,
07636: at,
07637: &plan,
+07638: _FIELD_TARGETS_QWP)
__pyx_t_2 = __pyx_v_7questdb_7_client__FIELD_TARGETS_QWP;
__Pyx_INCREF(__pyx_t_2);
+07639: row_count = plan.row_count
__pyx_t_8 = __pyx_v_plan.row_count;
__pyx_v_row_count = __pyx_t_8;
+07640: col_count = plan.col_count
__pyx_t_8 = __pyx_v_plan.col_count;
__pyx_v_col_count = __pyx_t_8;
+07641: if (plan.col_count == 0) or (plan.row_count == 0):
__pyx_t_9 = (__pyx_v_plan.col_count == 0);
if (!__pyx_t_9) {
} else {
__pyx_t_1 = __pyx_t_9;
goto __pyx_L15_bool_binop_done;
}
__pyx_t_9 = (__pyx_v_plan.row_count == 0);
__pyx_t_1 = __pyx_t_9;
__pyx_L15_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+07642: continue
goto __pyx_L9_continue;
07643:
+07644: _dataframe_columnar_promote_cols(df, &plan)
__pyx_t_7 = __pyx_f_7questdb_7_client__dataframe_columnar_promote_cols(__pyx_v_df, (&__pyx_v_plan)); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7644, __pyx_L12_error)
+07645: _dataframe_columnar_validate_plan(df, &plan)
__pyx_t_7 = __pyx_f_7questdb_7_client__dataframe_columnar_validate_plan(__pyx_v_df, (&__pyx_v_plan)); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7645, __pyx_L12_error)
+07646: _dataframe_columnar_prebuild_pyobj(df, &plan)
__pyx_t_7 = __pyx_f_7questdb_7_client__dataframe_columnar_prebuild_pyobj(__pyx_v_df, (&__pyx_v_plan)); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7646, __pyx_L12_error)
+07647: rows_per_chunk = _dataframe_columnar_rows_per_chunk(
__pyx_v_rows_per_chunk = __pyx_f_7questdb_7_client__dataframe_columnar_rows_per_chunk((&__pyx_v_plan), __pyx_v_max_rows_per_chunk);
07648: &plan,
07649: max_rows_per_chunk)
+07650: chunk = qwp_chunk_new(
__pyx_v_chunk = qwp_chunk_new(__pyx_v_plan.c_table_name.buf, __pyx_v_plan.c_table_name.len, (&__pyx_v_err));
07651: plan.c_table_name.buf,
07652: plan.c_table_name.len,
07653: &err)
+07654: if chunk == NULL:
__pyx_t_1 = (__pyx_v_chunk == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+07655: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7655, __pyx_L12_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 7655, __pyx_L12_error)
+07656: row_offset = 0
__pyx_v_row_offset = 0;
+07657: while row_offset < plan.row_count:
while (1) {
__pyx_t_1 = (__pyx_v_row_offset < __pyx_v_plan.row_count);
if (!__pyx_t_1) break;
+07658: if not qwp_chunk_clear(chunk, &err):
__pyx_t_1 = (!qwp_chunk_clear(__pyx_v_chunk, (&__pyx_v_err)));
if (unlikely(__pyx_t_1)) {
/* … */
}
+07659: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7659, __pyx_L12_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 7659, __pyx_L12_error)
+07660: chunk_rows = rows_per_chunk
__pyx_v_chunk_rows = __pyx_v_rows_per_chunk;
+07661: if chunk_rows > plan.row_count - row_offset:
__pyx_t_1 = (__pyx_v_chunk_rows > (__pyx_v_plan.row_count - __pyx_v_row_offset));
if (__pyx_t_1) {
/* … */
}
+07662: chunk_rows = plan.row_count - row_offset
__pyx_v_chunk_rows = (__pyx_v_plan.row_count - __pyx_v_row_offset);
+07663: _dataframe_columnar_populate_chunk(
__pyx_t_7 = __pyx_f_7questdb_7_client__dataframe_columnar_populate_chunk((&__pyx_v_plan), __pyx_v_chunk, __pyx_v_row_offset, __pyx_v_chunk_rows); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7663, __pyx_L12_error)
07664: &plan,
07665: chunk,
07666: row_offset,
07667: chunk_rows)
+07668: populated_rows = qwp_chunk_row_count(chunk, &err)
__pyx_v_populated_rows = qwp_chunk_row_count(__pyx_v_chunk, (&__pyx_v_err));
+07669: if populated_rows == <size_t>-1:
__pyx_t_1 = (__pyx_v_populated_rows == ((size_t)-1L));
if (unlikely(__pyx_t_1)) {
/* … */
}
+07670: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7670, __pyx_L12_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 7670, __pyx_L12_error)
+07671: if populated_rows != 0:
__pyx_t_1 = (__pyx_v_populated_rows != 0);
if (__pyx_t_1) {
/* … */
}
+07672: populated_chunks += 1
__pyx_v_populated_chunks = (__pyx_v_populated_chunks + 1);
+07673: populated_rows_total += populated_rows
__pyx_v_populated_rows_total = (__pyx_v_populated_rows_total + __pyx_v_populated_rows);
+07674: row_offset += chunk_rows
__pyx_v_row_offset = (__pyx_v_row_offset + __pyx_v_chunk_rows);
}
}
07675: finally:
+07676: if chunk != NULL:
/*finally:*/ {
/*normal exit:*/{
__pyx_t_1 = (__pyx_v_chunk != NULL);
if (__pyx_t_1) {
/* … */
}
/* … */
__pyx_t_1 = (__pyx_v_chunk != NULL);
if (__pyx_t_1) {
/* … */
}
/* … */
__pyx_t_1 = (__pyx_v_chunk != NULL);
if (__pyx_t_1) {
/* … */
}
+07677: qwp_chunk_free(chunk)
qwp_chunk_free(__pyx_v_chunk);
/* … */
qwp_chunk_free(__pyx_v_chunk);
/* … */
qwp_chunk_free(__pyx_v_chunk);
+07678: chunk = NULL
__pyx_v_chunk = NULL;
/* … */
__pyx_v_chunk = NULL;
/* … */
__pyx_v_chunk = NULL;
+07679: dataframe_plan_release(&plan)
__pyx_f_7questdb_7_client_dataframe_plan_release((&__pyx_v_plan));
/* … */
__pyx_f_7questdb_7_client_dataframe_plan_release((&__pyx_v_plan));
/* … */
__pyx_f_7questdb_7_client_dataframe_plan_release((&__pyx_v_plan));
+07680: if b != NULL:
__pyx_t_1 = (__pyx_v_b != NULL);
if (__pyx_t_1) {
/* … */
}
goto __pyx_L13;
}
__pyx_L12_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18);
if ( unlikely(__Pyx_GetException(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15) < 0)) __Pyx_ErrFetch(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__pyx_t_10 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_12 = __pyx_filename;
{
/* … */
__pyx_t_1 = (__pyx_v_b != NULL);
if (__pyx_t_1) {
/* … */
}
}
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ErrRestore(__pyx_t_13, __pyx_t_14, __pyx_t_15);
__pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
__pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_12;
goto __pyx_L5_error;
}
__pyx_L9_continue: {
/* … */
__pyx_t_1 = (__pyx_v_b != NULL);
if (__pyx_t_1) {
/* … */
}
goto __pyx_L7_continue;
}
__pyx_L13:;
}
__pyx_L7_continue:;
}
}
+07681: qdb_pystr_buf_free(b)
qdb_pystr_buf_free(__pyx_v_b);
/* … */
qdb_pystr_buf_free(__pyx_v_b);
/* … */
qdb_pystr_buf_free(__pyx_v_b);
+07682: b = NULL
__pyx_v_b = NULL;
/* … */
__pyx_v_b = NULL;
/* … */
__pyx_v_b = NULL;
07683: finally:
+07684: _dataframe_count_row_path_emissions = False
/*finally:*/ {
/*normal exit:*/{
__pyx_v_7questdb_7_client__dataframe_count_row_path_emissions = 0;
goto __pyx_L6;
}
__pyx_L5_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_14, &__pyx_t_13);
if ( unlikely(__Pyx_GetException(&__pyx_t_18, &__pyx_t_17, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_18, &__pyx_t_17, &__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_13);
__pyx_t_11 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_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:;
}
07685:
+07686: end_row_path_emissions = _dataframe_row_path_emissions
__pyx_v_end_row_path_emissions = __pyx_v_7questdb_7_client__dataframe_row_path_emissions;
07687: return {
+07688: 'iterations': iterations,
__pyx_t_2 = __Pyx_PyDict_NewPresized(9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7688, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_iterations); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7688, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_iterations, __pyx_t_3) < (0)) __PYX_ERR(0, 7688, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07689: 'row_count': row_count,
__pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7689, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_row_count, __pyx_t_3) < (0)) __PYX_ERR(0, 7688, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07690: 'col_count': col_count,
__pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_col_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7690, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_col_count, __pyx_t_3) < (0)) __PYX_ERR(0, 7688, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07691: 'logical_cells': row_count * col_count,
__pyx_t_3 = __Pyx_PyLong_FromSize_t((__pyx_v_row_count * __pyx_v_col_count)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7691, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_logical_cells, __pyx_t_3) < (0)) __PYX_ERR(0, 7688, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07692: 'rows_per_chunk': rows_per_chunk,
__pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_rows_per_chunk); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7692, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_rows_per_chunk, __pyx_t_3) < (0)) __PYX_ERR(0, 7688, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07693: 'populated_chunks': populated_chunks,
__pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_populated_chunks); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7693, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_populated_chunks, __pyx_t_3) < (0)) __PYX_ERR(0, 7688, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07694: 'populated_rows_total': populated_rows_total,
__pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_populated_rows_total); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_populated_rows_total, __pyx_t_3) < (0)) __PYX_ERR(0, 7688, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07695: 'last_populated_rows': populated_rows,
__pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_populated_rows); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7695, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_last_populated_rows, __pyx_t_3) < (0)) __PYX_ERR(0, 7688, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
07696: 'row_path_cell_emissions': (
+07697: end_row_path_emissions - start_row_path_emissions),
__pyx_t_3 = __Pyx_PyLong_From_uint64_t((__pyx_v_end_row_path_emissions - __pyx_v_start_row_path_emissions)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7697, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_row_path_cell_emissions, __pyx_t_3) < (0)) __PYX_ERR(0, 7688, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
07698: }
07699:
07700:
+07701: cdef object _POLARS = None
__Pyx_INCREF(Py_None); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__POLARS); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__POLARS, Py_None); __Pyx_GIVEREF(Py_None);
+07702: cdef object _POLARS_DATAFRAME_T = None
__Pyx_INCREF(Py_None); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__POLARS_DATAFRAME_T); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__POLARS_DATAFRAME_T, Py_None); __Pyx_GIVEREF(Py_None);
+07703: cdef object _POLARS_LAZYFRAME_T = None
__Pyx_INCREF(Py_None); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__POLARS_LAZYFRAME_T); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__POLARS_LAZYFRAME_T, Py_None); __Pyx_GIVEREF(Py_None);
+07704: cdef object _POLARS_SERIES_T = None
__Pyx_INCREF(Py_None); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__POLARS_SERIES_T); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__POLARS_SERIES_T, Py_None); __Pyx_GIVEREF(Py_None);
07705:
07706: # Whether this polars reinterprets 8- and 16-bit integers (1.39+).
07707: # None until first asked. A plain module global, so tests can set it.
+07708: _POLARS_NARROW_REINTERPRET = None
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_POLARS_NARROW_REINTERPRET, Py_None) < (0)) __PYX_ERR(0, 7708, __pyx_L1_error)
07709:
07710:
+07711: cdef bint _polars_reinterprets_narrow_ints():
static int __pyx_f_7questdb_7_client__polars_reinterprets_narrow_ints(void) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_AddTraceback("questdb._client._polars_reinterprets_narrow_ints", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07712: """Whether `reinterpret` works on an 8- or 16-bit polars column.
07713:
07714: Probed once, by trying it, rather than read off the version string.
07715: A `LazyFrame` raises only when collected, so the call that builds
07716: the expression cannot tell. Any failure means "no": the exception
07717: class differs across polars versions. Two threads that both find
07718: the answer missing both probe and store the same value. Called only
07719: after `_try_import_polars()` has set `_POLARS`.
07720: """
07721: global _POLARS_NARROW_REINTERPRET
+07722: if _POLARS_NARROW_REINTERPRET is None:
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_POLARS_NARROW_REINTERPRET); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7722, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = (__pyx_t_1 == Py_None); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* … */ }
+07723: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L1_error;
__pyx_L5_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
__pyx_L9_try_end:;
}
+07724: _POLARS.Series([0], dtype=_POLARS.UInt8).reinterpret(signed=True)
__pyx_t_8 = __pyx_v_7questdb_7_client__POLARS;
__Pyx_INCREF(__pyx_t_8);
__pyx_t_9 = PyList_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7724, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_0);
if (__Pyx_PyList_SET_ITEM(__pyx_t_9, 0, __pyx_mstate_global->__pyx_int_0) != (0)) __PYX_ERR(0, 7724, __pyx_L4_error);
__pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_UInt8); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 7724, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_10);
#if CYTHON_VECTORCALL
#endif
__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, 7724, __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, 7724, __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;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7724, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_7);
}
__pyx_t_6 = __pyx_t_7;
__Pyx_INCREF(__pyx_t_6);
#if CYTHON_VECTORCALL
#endif
__pyx_t_11 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, Py_True};
#if CYTHON_VECTORCALL
__pyx_t_12 = __pyx_mstate_global->__pyx_tuple[22];
if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7724, __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, 7724, __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;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7724, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+07725: _POLARS_NARROW_REINTERPRET = True
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_POLARS_NARROW_REINTERPRET, Py_True) < (0)) __PYX_ERR(0, 7725, __pyx_L4_error)
+07726: except Exception:
__pyx_t_13 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception)))); if (__pyx_t_13) { __Pyx_AddTraceback("questdb._client._polars_reinterprets_narrow_ints", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_7, &__pyx_t_12) < 0) __PYX_ERR(0, 7726, __pyx_L6_except_error) __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_7); __Pyx_XGOTREF(__pyx_t_12);
+07727: _POLARS_NARROW_REINTERPRET = False
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_POLARS_NARROW_REINTERPRET, Py_False) < (0)) __PYX_ERR(0, 7727, __pyx_L6_except_error) __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; goto __pyx_L5_exception_handled; } goto __pyx_L6_except_error;
+07728: return _POLARS_NARROW_REINTERPRET
__Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_POLARS_NARROW_REINTERPRET); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7728, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 7728, __pyx_L1_error) __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; { __pyx_r = __pyx_t_2; } goto __pyx_L0;
07729:
07730:
+07731: cdef bint _try_import_polars():
static int __pyx_f_7questdb_7_client__try_import_polars(void) {
PyObject *__pyx_v_polars = NULL;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client._try_import_polars", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_polars);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07732: global _POLARS, _POLARS_DATAFRAME_T, _POLARS_LAZYFRAME_T
07733: global _POLARS_SERIES_T
+07734: if _POLARS is not None:
__pyx_t_1 = (__pyx_v_7questdb_7_client__POLARS != Py_None);
if (__pyx_t_1) {
/* … */
}
+07735: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+07736: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L1_error;
__pyx_L7_except_return:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L0;
__pyx_L9_try_end:;
}
+07737: import polars
__pyx_t_6 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_polars, 0, 0, NULL, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7737, __pyx_L4_error) __pyx_t_5 = __pyx_t_6; __Pyx_GOTREF(__pyx_t_5); __pyx_v_polars = __pyx_t_5; __pyx_t_5 = 0;
+07738: except ImportError:
__pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_ImportError)))); if (__pyx_t_7) { __Pyx_ErrRestore(0,0,0);
+07739: return False
{
__pyx_r = 0;
}
goto __pyx_L7_except_return;
}
goto __pyx_L6_except_error;
+07740: _POLARS_DATAFRAME_T = polars.DataFrame
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_polars, __pyx_mstate_global->__pyx_n_u_DataFrame); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7740, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__POLARS_DATAFRAME_T); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__POLARS_DATAFRAME_T, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_5 = 0;
+07741: _POLARS_LAZYFRAME_T = polars.LazyFrame
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_polars, __pyx_mstate_global->__pyx_n_u_LazyFrame); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7741, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__POLARS_LAZYFRAME_T); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__POLARS_LAZYFRAME_T, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_5 = 0;
+07742: _POLARS_SERIES_T = polars.Series
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_polars, __pyx_mstate_global->__pyx_n_u_Series); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7742, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__POLARS_SERIES_T); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__POLARS_SERIES_T, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_5 = 0;
+07743: _POLARS = polars
__Pyx_INCREF(__pyx_v_polars); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__POLARS); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__POLARS, __pyx_v_polars); __Pyx_GIVEREF(__pyx_v_polars);
+07744: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
07745:
07746:
+07747: cdef bint _is_polars_dataframe_or_lazy(object obj):
static int __pyx_f_7questdb_7_client__is_polars_dataframe_or_lazy(PyObject *__pyx_v_obj) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client._is_polars_dataframe_or_lazy", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+07748: if not _try_import_polars():
__pyx_t_1 = __pyx_f_7questdb_7_client__try_import_polars(); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 7748, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+07749: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+07750: return isinstance(obj, (_POLARS_DATAFRAME_T, _POLARS_LAZYFRAME_T))
__Pyx_INCREF(__pyx_v_7questdb_7_client__POLARS_DATAFRAME_T); __pyx_t_3 = __pyx_v_7questdb_7_client__POLARS_DATAFRAME_T; __Pyx_INCREF(__pyx_v_7questdb_7_client__POLARS_LAZYFRAME_T); __pyx_t_4 = __pyx_v_7questdb_7_client__POLARS_LAZYFRAME_T; __pyx_t_1 = PyObject_IsInstance(__pyx_v_obj, __pyx_t_3); if (!__pyx_t_1) { } else { __pyx_t_2 = __pyx_t_1; goto __pyx_L4_bool_binop_done; } __pyx_t_1 = PyObject_IsInstance(__pyx_v_obj, __pyx_t_4); __pyx_t_2 = __pyx_t_1; __pyx_L4_bool_binop_done:; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; { __pyx_r = __pyx_t_2; } goto __pyx_L0;
07751:
07752:
+07753: cdef object _polars_named_dtypes(object frame):
static PyObject *__pyx_f_7questdb_7_client__polars_named_dtypes(PyObject *__pyx_v_frame) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client._polars_named_dtypes", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07754: """`(name, dtype)` for each column a polars DataFrame or Series
07755: exports, in order; None for any other object. A Series exports as a
07756: single column named after it. Call only after `_try_import_polars()`
07757: has returned True."""
+07758: if isinstance(frame, _POLARS_DATAFRAME_T):
__pyx_t_1 = __pyx_v_7questdb_7_client__POLARS_DATAFRAME_T; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 7758, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* … */ }
+07759: return list(frame.schema.items())
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7759, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __pyx_t_4; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_items, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7759, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_4 = __Pyx_PySequence_ListKeepNew(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7759, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_4; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_4 = 0; goto __pyx_L0;
+07760: if isinstance(frame, _POLARS_SERIES_T):
__pyx_t_4 = __pyx_v_7questdb_7_client__POLARS_SERIES_T; __Pyx_INCREF(__pyx_t_4); __pyx_t_2 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_4); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 7760, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_2) { /* … */ }
+07761: return [(frame.name, frame.dtype)]
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7761, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7761, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7761, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_4); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4) != (0)) __PYX_ERR(0, 7761, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_1); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1) != (0)) __PYX_ERR(0, 7761, __pyx_L1_error); __pyx_t_4 = 0; __pyx_t_1 = 0; __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7761, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_3); if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_3) != (0)) __PYX_ERR(0, 7761, __pyx_L1_error); __pyx_t_3 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+07762: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
07763:
07764:
+07765: cdef void_int _reject_polars_object_columns(object frame) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__reject_polars_object_columns(PyObject *__pyx_v_frame) {
PyObject *__pyx_v_object_dtype = 0;
PyObject *__pyx_v_columns = 0;
PyObject *__pyx_v_name = 0;
PyObject *__pyx_v_dtype = 0;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_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;
}
07766: """polars exports an ``Object`` column as ``fixed_size_binary(8)``
07767: holding in-process handles, which the server would store as BINARY
07768: blobs of raw memory addresses. Reject such a column of a polars
07769: DataFrame or Series before the Arrow export, mirroring the Rust
07770: polars API. The code is `ArrowUnsupportedColumnKind`, the one 5.0
07771: raises for these inputs. The same column reaching the client in any
07772: other shape is refused by its width, in `_refuse_fsb8_columns`."""
07773: cdef object object_dtype
07774: cdef object columns
07775: cdef object name
07776: cdef object dtype
+07777: if not _try_import_polars():
__pyx_t_1 = __pyx_f_7questdb_7_client__try_import_polars(); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 7777, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+07778: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+07779: columns = _polars_named_dtypes(frame)
__pyx_t_3 = __pyx_f_7questdb_7_client__polars_named_dtypes(__pyx_v_frame); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7779, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_columns = __pyx_t_3; __pyx_t_3 = 0;
+07780: if columns is None:
__pyx_t_2 = (__pyx_v_columns == Py_None);
if (__pyx_t_2) {
/* … */
}
+07781: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+07782: object_dtype = getattr(_POLARS, 'Object', None)
__pyx_t_3 = __pyx_v_7questdb_7_client__POLARS; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetAttr3(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Object, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7782, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_object_dtype = __pyx_t_4; __pyx_t_4 = 0;
+07783: if object_dtype is None:
__pyx_t_2 = (__pyx_v_object_dtype == Py_None);
if (__pyx_t_2) {
/* … */
}
+07784: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+07785: for name, dtype in columns:
if (likely(PyList_CheckExact(__pyx_v_columns)) || PyTuple_CheckExact(__pyx_v_columns)) { __pyx_t_4 = __pyx_v_columns; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; __pyx_t_6 = NULL; } else { __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_columns); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7785, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7785, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_6)) { if (likely(PyList_CheckExact(__pyx_t_4))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7785, __pyx_L1_error) #endif if (__pyx_t_5 >= __pyx_temp) break; } __pyx_t_3 = __Pyx_PyList_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, 7785, __pyx_L1_error) #endif if (__pyx_t_5 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_3 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5)); #else __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_5); #endif ++__pyx_t_5; } if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7785, __pyx_L1_error) } else { __pyx_t_3 = __pyx_t_6(__pyx_t_4); if (unlikely(!__pyx_t_3)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 7785, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_3); if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { PyObject* sequence = __pyx_t_3; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 7785, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); __Pyx_INCREF(__pyx_t_7); __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_8); } else { __pyx_t_7 = __Pyx_PyList_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7785, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7785, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_8); } #else __pyx_t_7 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7785, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7785, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); #endif __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { Py_ssize_t index = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7785, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_10 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_9); index = 0; __pyx_t_7 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L8_unpacking_failed; __Pyx_GOTREF(__pyx_t_7); index = 1; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L8_unpacking_failed; __Pyx_GOTREF(__pyx_t_8); if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < (0)) __PYX_ERR(0, 7785, __pyx_L1_error) __pyx_t_10 = NULL; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L9_unpacking_done; __pyx_L8_unpacking_failed:; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_10 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 7785, __pyx_L1_error) __pyx_L9_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_8); __pyx_t_8 = 0; /* … */ } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+07786: if dtype == object_dtype:
__pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_v_dtype, __pyx_v_object_dtype, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7786, __pyx_L1_error) if (unlikely(__pyx_t_2)) { /* … */ }
+07787: raise QuestDBError(
__pyx_t_8 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7787, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
+07788: QuestDBErrorCode.ArrowUnsupportedColumnKind,
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7788, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_ArrowUnsupportedColumnKind); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7788, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+07789: f'Bad column {name!r}: polars Object dtype is not '
__pyx_t_9 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7789, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_12[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_12[1] = __pyx_t_9; __pyx_t_12[2] = __pyx_mstate_global->__pyx_kp_u_polars_Object_dtype_is_not_supp; __pyx_t_13 = 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, 7789, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
07790: f'supported; it exports as handles to objects in this '
07791: f'process rather than as data. '
+07792: + _polars_object_remedy(name))
__pyx_t_9 = __pyx_f_7questdb_7_client__polars_object_remedy(__pyx_v_name); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7792, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_16 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_t_15, __pyx_t_9); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 7792, __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, 7787, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 7787, __pyx_L1_error)
+07793: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
07794:
07795:
+07796: cdef object _arrow_source_column_names(object frame):
static PyObject *__pyx_f_7questdb_7_client__arrow_source_column_names(PyObject *__pyx_v_frame) {
PyObject *__pyx_v_names = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client._arrow_source_column_names", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_names);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07797: """The names `frame`'s Arrow export gives its columns, as the Python
07798: objects they come from: a pandas DataFrame's column labels, plus the
07799: level names of an index other than a RangeIndex; a polars
07800: DataFrame's columns; a polars Series' own name; the schema names of a
07801: pyarrow Table, RecordBatch or RecordBatchReader. None for any other
07802: type."""
07803: cdef list names
+07804: if _is_pandas_dataframe_object(frame):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_frame); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 7804, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+07805: names = frame.columns.tolist()
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7805, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __pyx_t_4; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_tolist, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7805, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } if (!(likely(PyList_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_2))) __PYX_ERR(0, 7805, __pyx_L1_error) __pyx_v_names = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0;
07806: # pyarrow's pandas conversion writes each level of an index
07807: # other than a RangeIndex as a column. The level's own name is
07808: # what the NUL-name check needs; `_pandas_export_dtypes` gives
07809: # the same levels the names the export writes them under.
+07810: _dataframe_may_import_deps()
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7810, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+07811: if not isinstance(frame.index, _PANDAS.RangeIndex):
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7811, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PANDAS, __pyx_mstate_global->__pyx_n_u_RangeIndex); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7811, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyObject_IsInstance(__pyx_t_2, __pyx_t_4); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 7811, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = (!__pyx_t_1); if (__pyx_t_6) { /* … */ }
+07812: names.extend(frame.index.names)
if (unlikely(__pyx_v_names == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "extend");
__PYX_ERR(0, 7812, __pyx_L1_error)
}
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_index); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7812, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_names); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7812, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_7 = __Pyx_PyList_Extend(__pyx_v_names, __pyx_t_2); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 7812, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+07813: return names
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_names);
__pyx_r = __pyx_v_names;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+07814: if _try_import_polars():
__pyx_t_6 = __pyx_f_7questdb_7_client__try_import_polars(); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 7814, __pyx_L1_error) if (__pyx_t_6) { /* … */ }
+07815: if isinstance(frame, _POLARS_DATAFRAME_T):
__pyx_t_2 = __pyx_v_7questdb_7_client__POLARS_DATAFRAME_T;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_6 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_2); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 7815, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_6) {
/* … */
}
+07816: return frame.columns
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7816, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+07817: if isinstance(frame, _POLARS_SERIES_T):
__pyx_t_2 = __pyx_v_7questdb_7_client__POLARS_SERIES_T;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_6 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_2); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 7817, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_6) {
/* … */
}
+07818: return [frame.name]
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7818, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7818, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_2); if (__Pyx_PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 7818, __pyx_L1_error); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_4; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_4 = 0; goto __pyx_L0;
+07819: if _PYARROW is None and sys.modules.get('pyarrow') is None:
__pyx_t_1 = (__pyx_v_7questdb_7_client__PYARROW == Py_None);
if (__pyx_t_1) {
} else {
__pyx_t_6 = __pyx_t_1;
goto __pyx_L9_bool_binop_done;
}
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_sys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7819, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_modules); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7819, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_2 = __pyx_t_8;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_n_u_pyarrow};
__pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7819, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__pyx_t_1 = (__pyx_t_4 == Py_None);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_6 = __pyx_t_1;
__pyx_L9_bool_binop_done:;
if (__pyx_t_6) {
/* … */
}
07820: # A pyarrow object exists only once pyarrow is imported.
+07821: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+07822: _dataframe_require_pyarrow()
__pyx_t_4 = __pyx_f_7questdb_7_client__dataframe_require_pyarrow(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7822, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+07823: if isinstance(frame, (_PYARROW.Table, _PYARROW.RecordBatch,
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_Table); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7823, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_RecordBatch); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7823, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); /* … */ __pyx_t_1 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_4); if (!__pyx_t_1) { } else { __pyx_t_6 = __pyx_t_1; goto __pyx_L12_bool_binop_done; } __pyx_t_1 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_8); if (!__pyx_t_1) { } else { __pyx_t_6 = __pyx_t_1; goto __pyx_L12_bool_binop_done; } /* … */ if (__pyx_t_6) { /* … */ }
+07824: _PYARROW.RecordBatchReader)):
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_RecordBatchReader); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7824, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); /* … */ __pyx_t_1 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_2); __pyx_t_6 = __pyx_t_1; __pyx_L12_bool_binop_done:; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+07825: return frame.schema.names
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7825, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_names); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7825, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_8; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_8 = 0; goto __pyx_L0;
+07826: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
07827:
07828:
+07829: cdef object _pandas_export_dtypes(object df, object dtypes):
static PyObject *__pyx_f_7questdb_7_client__pandas_export_dtypes(PyObject *__pyx_v_df, PyObject *__pyx_v_dtypes) {
PyObject *__pyx_v_index = 0;
PyObject *__pyx_v_name = 0;
PyObject *__pyx_v_taken = 0;
PyObject *__pyx_v_names = 0;
PyObject *__pyx_v_level_dtypes = 0;
Py_ssize_t __pyx_v_i;
Py_ssize_t __pyx_v_j;
PyObject *__pyx_9genexpr21__pyx_v_label = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_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_9genexpr21__pyx_v_label);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07830: """`dtypes`, the frame's `df.dtypes`, extended with the dtype of each
07831: index level the frame's Arrow export writes as a column.
07832:
07833: pyarrow's pandas conversion writes every level of an index other
07834: than a RangeIndex as a column. It names the column after the level,
07835: converted to a string, unless the level has no name or its name is
07836: already taken; then it takes the first free `__index_level_{j}__`,
07837: counting from the level's position. A check that judges exported
07838: columns by their pandas dtype needs those columns too, or an index
07839: level escapes it. None when `dtypes` is None.
07840:
07841: The rule is the one current pyarrow applies. Older pyarrow does not
07842: skip a `__index_level_{j}__` that a data column already holds, so the
07843: two disagree only on a frame with a data column of that name: the
07844: level is then refused under another name, or its claim is not
07845: found. `_arrow_source_column_names` lists the same levels under
07846: their own names, which is what the NUL-name check reads."""
07847: cdef object index
07848: cdef object name
07849: cdef list taken
+07850: cdef list names = []
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7850, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_names = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
07851: cdef list level_dtypes
07852: cdef Py_ssize_t i
07853: cdef Py_ssize_t j
+07854: if dtypes is None:
__pyx_t_2 = (__pyx_v_dtypes == Py_None);
if (__pyx_t_2) {
/* … */
}
+07855: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+07856: index = df.index
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_index); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7856, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_index = __pyx_t_1; __pyx_t_1 = 0;
+07857: if isinstance(index, _PANDAS.RangeIndex):
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PANDAS, __pyx_mstate_global->__pyx_n_u_RangeIndex); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7857, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_IsInstance(__pyx_v_index, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 7857, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* … */ }
+07858: return dtypes
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_dtypes);
__pyx_r = __pyx_v_dtypes;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
07859: # Each level's dtype, read from the index's metadata rather than
07860: # from its materialized values.
+07861: if isinstance(index, _PANDAS.MultiIndex):
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PANDAS, __pyx_mstate_global->__pyx_n_u_MultiIndex); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7861, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_IsInstance(__pyx_v_index, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 7861, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* … */ goto __pyx_L5; }
+07862: level_dtypes = list(index.dtypes)
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7862, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PySequence_ListKeepNew(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7862, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_level_dtypes = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0;
07863: else:
+07864: level_dtypes = [index.dtype]
/*else*/ {
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7864, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7864, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_GIVEREF(__pyx_t_3);
if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_3) != (0)) __PYX_ERR(0, 7864, __pyx_L1_error);
__pyx_t_3 = 0;
__pyx_v_level_dtypes = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
}
__pyx_L5:;
+07865: taken = [_arrow_export_name(label) for label in df.columns]
{ /* enter inner scope */
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7865, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7865, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_3);
if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
__pyx_t_4 = __pyx_t_3; __Pyx_INCREF(__pyx_t_4);
__pyx_t_5 = 0;
__pyx_t_6 = NULL;
} else {
__pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7865, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_6 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7865, __pyx_L8_error)
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
for (;;) {
if (likely(!__pyx_t_6)) {
if (likely(PyList_CheckExact(__pyx_t_4))) {
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4);
#if !CYTHON_ASSUME_SAFE_SIZE
if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7865, __pyx_L8_error)
#endif
if (__pyx_t_5 >= __pyx_temp) break;
}
__pyx_t_3 = __Pyx_PyList_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, 7865, __pyx_L8_error)
#endif
if (__pyx_t_5 >= __pyx_temp) break;
}
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
__pyx_t_3 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5));
#else
__pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_5);
#endif
++__pyx_t_5;
}
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7865, __pyx_L8_error)
} else {
__pyx_t_3 = __pyx_t_6(__pyx_t_4);
if (unlikely(!__pyx_t_3)) {
PyObject* exc_type = PyErr_Occurred();
if (exc_type) {
if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 7865, __pyx_L8_error)
PyErr_Clear();
}
break;
}
}
__Pyx_GOTREF(__pyx_t_3);
__Pyx_XDECREF_SET(__pyx_9genexpr21__pyx_v_label, __pyx_t_3);
__pyx_t_3 = 0;
__pyx_t_3 = __pyx_f_7questdb_7_client__arrow_export_name(__pyx_9genexpr21__pyx_v_label); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7865, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_GIVEREF(__pyx_t_3);
if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_t_1, __pyx_t_3))) __PYX_ERR(0, 7865, __pyx_L8_error)
__pyx_t_3 = 0;
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_9genexpr21__pyx_v_label); __pyx_9genexpr21__pyx_v_label = 0;
goto __pyx_L12_exit_scope;
__pyx_L8_error:;
__Pyx_XDECREF(__pyx_9genexpr21__pyx_v_label); __pyx_9genexpr21__pyx_v_label = 0;
goto __pyx_L1_error;
__pyx_L12_exit_scope:;
} /* exit inner scope */
__pyx_v_taken = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
+07866: for i, name in enumerate(index.names):
__pyx_t_5 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_mstate_global->__pyx_n_u_names); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7866, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { __pyx_t_4 = __pyx_t_1; __Pyx_INCREF(__pyx_t_4); __pyx_t_7 = 0; __pyx_t_6 = NULL; } else { __pyx_t_7 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7866, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7866, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; for (;;) { if (likely(!__pyx_t_6)) { if (likely(PyList_CheckExact(__pyx_t_4))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7866, __pyx_L1_error) #endif if (__pyx_t_7 >= __pyx_temp) break; } __pyx_t_1 = __Pyx_PyList_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, 7866, __pyx_L1_error) #endif if (__pyx_t_7 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_7)); #else __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_7); #endif ++__pyx_t_7; } if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7866, __pyx_L1_error) } else { __pyx_t_1 = __pyx_t_6(__pyx_t_4); if (unlikely(!__pyx_t_1)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 7866, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_1); __pyx_t_1 = 0; __pyx_v_i = __pyx_t_5; __pyx_t_5 = (__pyx_t_5 + 1); /* … */ } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
07867: # pyarrow compares the level's own name with the converted
07868: # names, as here.
+07869: if name is None or name in taken:
__pyx_t_8 = (__pyx_v_name == Py_None);
if (!__pyx_t_8) {
} else {
__pyx_t_2 = __pyx_t_8;
goto __pyx_L16_bool_binop_done;
}
__pyx_t_8 = (__Pyx_PySequence_ContainsTF(__pyx_v_name, __pyx_v_taken, Py_EQ)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 7869, __pyx_L1_error)
__pyx_t_2 = __pyx_t_8;
__pyx_L16_bool_binop_done:;
if (__pyx_t_2) {
/* … */
goto __pyx_L15;
}
+07870: j = i
__pyx_v_j = __pyx_v_i;
+07871: while f'__index_level_{j}__' in taken:
while (1) {
__pyx_t_1 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_j, 0, ' ', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7871, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_9[0] = __pyx_mstate_global->__pyx_n_u_index_level;
__pyx_t_9[1] = __pyx_t_1;
__pyx_t_9[2] = __pyx_mstate_global->__pyx_n_u__33;
__pyx_t_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, 7871, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_3, __pyx_v_taken, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7871, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (!__pyx_t_2) break;
+07872: j += 1
__pyx_v_j = (__pyx_v_j + 1);
}
+07873: name = f'__index_level_{j}__'
__pyx_t_3 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_j, 0, ' ', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7873, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_9[0] = __pyx_mstate_global->__pyx_n_u_index_level; __pyx_t_9[1] = __pyx_t_3; __pyx_t_9[2] = __pyx_mstate_global->__pyx_n_u__33; __pyx_t_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, 7873, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1); __pyx_t_1 = 0;
07874: else:
+07875: name = _arrow_export_name(name)
/*else*/ {
__pyx_t_1 = __pyx_f_7questdb_7_client__arrow_export_name(__pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7875, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
__pyx_t_1 = 0;
}
__pyx_L15:;
+07876: taken.append(name)
__pyx_t_12 = __Pyx_PyList_Append(__pyx_v_taken, __pyx_v_name); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 7876, __pyx_L1_error)
+07877: 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, 7877, __pyx_L1_error)
+07878: 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, 7878, __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, 7878, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_3); if (__Pyx_PyList_SET_ITEM(__pyx_t_15, 1, __pyx_t_3) != (0)) __PYX_ERR(0, 7878, __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, 7878, __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;
+07879: dtypes, _PANDAS.Series(level_dtypes, index=names, dtype=object)])
__pyx_t_13 = __pyx_v_7questdb_7_client__PANDAS; __Pyx_INCREF(__pyx_t_13); #if CYTHON_VECTORCALL #endif __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[42]; if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7879, __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, 7879, __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; #if CYTHON_VECTORCALL #endif __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7879, __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[42] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[42])) __PYX_ERR(0, 7879, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[42]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[42]);
07880:
07881:
+07882: cdef object _arrow_export_name(object label):
static PyObject *__pyx_f_7questdb_7_client__arrow_export_name(PyObject *__pyx_v_label) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._arrow_export_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07883: """The column name pyarrow's pandas conversion gives `label`.
07884:
07885: `str()` matches pyarrow for every label but a tuple with parts that
07886: are not strings. A tuple's name holds parentheses and quotes, which
07887: no QuestDB column name may, so such a frame is refused whatever name
07888: this returns."""
+07889: if isinstance(label, str):
__pyx_t_1 = PyUnicode_Check(__pyx_v_label);
if (__pyx_t_1) {
/* … */
}
+07890: return label
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_label);
__pyx_r = __pyx_v_label;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+07891: if isinstance(label, bytes):
__pyx_t_1 = PyBytes_Check(__pyx_v_label);
if (__pyx_t_1) {
/* … */
}
+07892: return label.decode('utf-8')
__pyx_t_3 = __pyx_v_label;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_utf_8};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_decode, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7892, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_2;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_2 = 0;
goto __pyx_L0;
+07893: return str(label)
__pyx_t_2 = __Pyx_PyObject_Unicode(__pyx_v_label); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7893, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
07894:
07895:
+07896: cdef object _polars_struct_field_with_nul(object dtype):
static PyObject *__pyx_f_7questdb_7_client__polars_struct_field_with_nul(PyObject *__pyx_v_dtype) {
PyObject *__pyx_v_field = 0;
PyObject *__pyx_v_found = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_AddTraceback("questdb._client._polars_struct_field_with_nul", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_field);
__Pyx_XDECREF(__pyx_v_found);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07897: """The first struct field name inside polars `dtype`, at any depth,
07898: that holds a NUL; None when there is none."""
07899: cdef object field
07900: cdef object found
+07901: if isinstance(dtype, _POLARS.Struct):
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_Struct); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7901, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 7901, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* … */ goto __pyx_L3; }
+07902: for field in dtype.fields:
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_fields); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7902, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { __pyx_t_3 = __pyx_t_1; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7902, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7902, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; for (;;) { if (likely(!__pyx_t_5)) { if (likely(PyList_CheckExact(__pyx_t_3))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7902, __pyx_L1_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } __pyx_t_1 = __Pyx_PyList_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, 7902, __pyx_L1_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4)); #else __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4); #endif ++__pyx_t_4; } if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7902, __pyx_L1_error) } else { __pyx_t_1 = __pyx_t_5(__pyx_t_3); if (unlikely(!__pyx_t_1)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 7902, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_field, __pyx_t_1); __pyx_t_1 = 0; /* … */ } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07903: if '\0' in field.name:
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7903, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_mstate_global->__pyx_kp_u__34, __pyx_t_1, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7903, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* … */ }
+07904: return field.name
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7904, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { 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;
+07905: found = _polars_struct_field_with_nul(field.dtype)
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7905, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = __pyx_f_7questdb_7_client__polars_struct_field_with_nul(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7905, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF_SET(__pyx_v_found, __pyx_t_6); __pyx_t_6 = 0;
+07906: if found is not None:
__pyx_t_2 = (__pyx_v_found != Py_None);
if (__pyx_t_2) {
/* … */
}
+07907: return found
{
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;
+07908: elif isinstance(dtype, (_POLARS.List, _POLARS.Array)):
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_List); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7908, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_Array); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7908, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_3); if (!__pyx_t_7) { } else { __pyx_t_2 = __pyx_t_7; goto __pyx_L9_bool_binop_done; } __pyx_t_7 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_6); __pyx_t_2 = __pyx_t_7; __pyx_L9_bool_binop_done:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_2) { /* … */ } __pyx_L3:;
+07909: return _polars_struct_field_with_nul(dtype.inner)
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_inner); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7909, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_6 = __pyx_f_7questdb_7_client__polars_struct_field_with_nul(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7909, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_6; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_6 = 0; goto __pyx_L0;
+07910: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
07911:
07912:
+07913: cdef void_int _reject_nul_column_names(object frame) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__reject_nul_column_names(PyObject *__pyx_v_frame) {
PyObject *__pyx_v_names = 0;
PyObject *__pyx_v_name = 0;
PyObject *__pyx_v_dtype = 0;
PyObject *__pyx_v_dtypes = 0;
PyObject *__pyx_v_field = 0;
Py_ssize_t __pyx_v_i;
struct qdb_pystr_buf *__pyx_v_b;
struct line_sender_column_name __pyx_v_c_name;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_21);
__Pyx_XDECREF(__pyx_t_22);
__Pyx_XDECREF(__pyx_t_23);
__Pyx_XDECREF(__pyx_t_24);
__Pyx_XDECREF(__pyx_t_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;
}
07914: """The Arrow C Data Interface carries each name as a NUL-terminated
07915: string. pyarrow, and pandas through it, cut a name holding a NUL at
07916: the NUL on export, so its column would land under the shorter name.
07917: polars panics on such a name, struct field names included, and the
07918: process aborts, whether the name belongs to a DataFrame column or to
07919: a Series. The names are checked here, before the export: a column
07920: name is refused with the error `row()` raises for it, and a polars
07921: struct field name with a BadDataFrame error."""
+07922: cdef object names = _arrow_source_column_names(frame)
__pyx_t_1 = __pyx_f_7questdb_7_client__arrow_source_column_names(__pyx_v_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7922, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_names = __pyx_t_1; __pyx_t_1 = 0;
07923: cdef object name
07924: cdef object dtype
07925: cdef object dtypes
07926: cdef object field
07927: cdef Py_ssize_t i
07928: cdef qdb_pystr_buf* b
07929: cdef line_sender_column_name c_name
+07930: if names is None:
__pyx_t_2 = (__pyx_v_names == Py_None);
if (__pyx_t_2) {
/* … */
}
+07931: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+07932: for name in names:
if (likely(PyList_CheckExact(__pyx_v_names)) || PyTuple_CheckExact(__pyx_v_names)) { __pyx_t_1 = __pyx_v_names; __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = 0; __pyx_t_4 = NULL; } else { __pyx_t_3 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_names); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7932, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7932, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_4)) { if (likely(PyList_CheckExact(__pyx_t_1))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7932, __pyx_L1_error) #endif if (__pyx_t_3 >= __pyx_temp) break; } __pyx_t_5 = __Pyx_PyList_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, 7932, __pyx_L1_error) #endif if (__pyx_t_3 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_5 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_3)); #else __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_3); #endif ++__pyx_t_3; } if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7932, __pyx_L1_error) } else { __pyx_t_5 = __pyx_t_4(__pyx_t_1); if (unlikely(!__pyx_t_5)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 7932, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_5); __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_5); __pyx_t_5 = 0; /* … */ } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+07933: if isinstance(name, bytes):
__pyx_t_2 = PyBytes_Check(__pyx_v_name);
if (__pyx_t_2) {
/* … */
}
07934: # pyarrow writes a bytes label decoded as UTF-8.
+07935: name = name.decode('utf-8', 'replace')
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_mstate_global->__pyx_n_u_decode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7935, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_mstate_global->__pyx_tuple[5], NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7935, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_6); __pyx_t_6 = 0;
+07936: if isinstance(name, str) and '\0' in name:
__pyx_t_7 = PyUnicode_Check(__pyx_v_name); if (__pyx_t_7) { } else { __pyx_t_2 = __pyx_t_7; goto __pyx_L8_bool_binop_done; } __pyx_t_7 = (__Pyx_PySequence_ContainsTF(__pyx_mstate_global->__pyx_kp_u__34, __pyx_v_name, Py_EQ)); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 7936, __pyx_L1_error) __pyx_t_2 = __pyx_t_7; __pyx_L8_bool_binop_done:; if (__pyx_t_2) { /* … */ }
+07937: b = qdb_pystr_buf_new()
__pyx_v_b = qdb_pystr_buf_new();
+07938: try:
/*try:*/ {
07939: # Raises: a column name can't contain '\0'.
+07940: str_to_column_name(b, str(name), &c_name)
__pyx_t_6 = __Pyx_PyObject_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7940, __pyx_L13_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_8 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_v_b, ((PyObject*)__pyx_t_6), (&__pyx_v_c_name)); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7940, __pyx_L13_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; }
07941: finally:
+07942: qdb_pystr_buf_free(b)
/*finally:*/ {
/*normal exit:*/{
qdb_pystr_buf_free(__pyx_v_b);
goto __pyx_L14;
}
__pyx_L13_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
if ( unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__pyx_t_9 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_11 = __pyx_filename;
{
qdb_pystr_buf_free(__pyx_v_b);
}
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_ErrRestore(__pyx_t_12, __pyx_t_13, __pyx_t_14);
__pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
__pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_11;
goto __pyx_L1_error;
}
__pyx_L14:;
}
+07943: if _POLARS is not None and isinstance(
__pyx_t_7 = (__pyx_v_7questdb_7_client__POLARS != Py_None);
if (__pyx_t_7) {
} else {
__pyx_t_2 = __pyx_t_7;
goto __pyx_L21_bool_binop_done;
}
/* … */
if (__pyx_t_2) {
/* … */
}
+07944: frame, (_POLARS_DATAFRAME_T, _POLARS_SERIES_T)):
__Pyx_INCREF(__pyx_v_7questdb_7_client__POLARS_DATAFRAME_T); __pyx_t_1 = __pyx_v_7questdb_7_client__POLARS_DATAFRAME_T; __Pyx_INCREF(__pyx_v_7questdb_7_client__POLARS_SERIES_T); __pyx_t_6 = __pyx_v_7questdb_7_client__POLARS_SERIES_T; /* … */ __pyx_t_18 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_1); if (!__pyx_t_18) { } else { __pyx_t_7 = __pyx_t_18; goto __pyx_L23_bool_binop_done; } /* … */ __pyx_t_18 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_6); __pyx_t_7 = __pyx_t_18; __pyx_L23_bool_binop_done:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = __pyx_t_7; __pyx_L21_bool_binop_done:;
07945: # `dtypes` is cheap to read, and `is_nested()` leaves the walk
07946: # to the rare nested column. `names` is in the same order:
07947: # `frame.columns` for a DataFrame, the Series' own name for a
07948: # Series.
+07949: if isinstance(frame, _POLARS_DATAFRAME_T):
__pyx_t_1 = __pyx_v_7questdb_7_client__POLARS_DATAFRAME_T;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_2 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 7949, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (__pyx_t_2) {
/* … */
goto __pyx_L25;
}
+07950: dtypes = frame.dtypes
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7950, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_dtypes = __pyx_t_1; __pyx_t_1 = 0;
07951: else:
+07952: dtypes = [frame.dtype]
/*else*/ {
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7952, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_6 = PyList_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7952, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_GIVEREF(__pyx_t_1);
if (__Pyx_PyList_SET_ITEM(__pyx_t_6, 0, __pyx_t_1) != (0)) __PYX_ERR(0, 7952, __pyx_L1_error);
__pyx_t_1 = 0;
__pyx_v_dtypes = __pyx_t_6;
__pyx_t_6 = 0;
}
__pyx_L25:;
+07953: for i, dtype in enumerate(dtypes):
__pyx_t_3 = 0;
if (likely(PyList_CheckExact(__pyx_v_dtypes)) || PyTuple_CheckExact(__pyx_v_dtypes)) {
__pyx_t_6 = __pyx_v_dtypes; __Pyx_INCREF(__pyx_t_6);
__pyx_t_19 = 0;
__pyx_t_4 = NULL;
} else {
__pyx_t_19 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_v_dtypes); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7953, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7953, __pyx_L1_error)
}
for (;;) {
if (likely(!__pyx_t_4)) {
if (likely(PyList_CheckExact(__pyx_t_6))) {
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_6);
#if !CYTHON_ASSUME_SAFE_SIZE
if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7953, __pyx_L1_error)
#endif
if (__pyx_t_19 >= __pyx_temp) break;
}
__pyx_t_1 = __Pyx_PyList_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, 7953, __pyx_L1_error)
#endif
if (__pyx_t_19 >= __pyx_temp) break;
}
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
__pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_19));
#else
__pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_6, __pyx_t_19);
#endif
++__pyx_t_19;
}
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7953, __pyx_L1_error)
} else {
__pyx_t_1 = __pyx_t_4(__pyx_t_6);
if (unlikely(!__pyx_t_1)) {
PyObject* exc_type = PyErr_Occurred();
if (exc_type) {
if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 7953, __pyx_L1_error)
PyErr_Clear();
}
break;
}
}
__Pyx_GOTREF(__pyx_t_1);
__Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_1);
__pyx_t_1 = 0;
__pyx_v_i = __pyx_t_3;
__pyx_t_3 = (__pyx_t_3 + 1);
/* … */
__pyx_L26_continue:;
}
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+07954: if not dtype.is_nested():
__pyx_t_5 = __pyx_v_dtype;
__Pyx_INCREF(__pyx_t_5);
__pyx_t_20 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_nested, __pyx_callargs+__pyx_t_20, (1-__pyx_t_20) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7954, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7954, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_7 = (!__pyx_t_2);
if (__pyx_t_7) {
/* … */
}
+07955: continue
goto __pyx_L26_continue;
+07956: field = _polars_struct_field_with_nul(dtype)
__pyx_t_1 = __pyx_f_7questdb_7_client__polars_struct_field_with_nul(__pyx_v_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7956, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_field, __pyx_t_1); __pyx_t_1 = 0;
+07957: if field is not None:
__pyx_t_7 = (__pyx_v_field != Py_None);
if (unlikely(__pyx_t_7)) {
/* … */
}
+07958: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 7958, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_21);
+07959: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 7959, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_22); __pyx_t_23 = __Pyx_PyObject_GetAttrStr(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 7959, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_23); __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
+07960: f'Bad column {names[i]!r}: struct field name '
__pyx_t_22 = __Pyx_GetItemInt(__pyx_v_names, __pyx_v_i, Py_ssize_t, 1, PyLong_FromSsize_t, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 7960, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_22); __pyx_t_24 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_t_22), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 7960, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_24); __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0; /* … */ __pyx_t_26 = 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, 7960, __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, 7958, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 7958, __pyx_L1_error)
+07961: f"{field!r} contains a NUL character ('\\0'), which "
__pyx_t_22 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_field), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 7961, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_22); __pyx_t_25[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_25[1] = __pyx_t_24; __pyx_t_25[2] = __pyx_mstate_global->__pyx_kp_u_struct_field_name; __pyx_t_25[3] = __pyx_t_22; __pyx_t_25[4] = __pyx_mstate_global->__pyx_kp_u_contains_a_NUL_character_0_whic;
07962: f'polars cannot export.')
+07963: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
07964:
07965:
07966:
07967:
+07968: cdef void_int _capsule_consume_stream(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__capsule_consume_stream(struct qwp_direct_sender *__pyx_v_conn, PyObject *__pyx_v_stream_owner, struct line_sender_table_name __pyx_v_c_table_name, struct line_sender_column_name *__pyx_v_c_ts_column_ptr, int __pyx_v_at_scalar_set, int64_t __pyx_v_at_scalar_nanos, struct ArrowSchema *__pyx_v_c_schema, struct qwp_arrow_override const *__pyx_v_c_overrides, size_t __pyx_v_c_overrides_len, int *__pyx_v_any_flushed, size_t *__pyx_v_deferred_since_sync, int *__pyx_v_may_have_committed_prefix, PyObject *__pyx_v_binary_names, PyObject *__pyx_v_unlabelled) {
PyObject *__pyx_v_stream_capsule = 0;
struct ArrowArrayStream *__pyx_v_stream;
struct ArrowArray __pyx_v_batch;
int __pyx_v_rc;
char const *__pyx_v_stream_err;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_AddTraceback("questdb._client._capsule_consume_stream", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_stream_capsule);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07969: qwp_direct_sender* conn,
07970: object stream_owner,
07971: line_sender_table_name c_table_name,
07972: line_sender_column_name* c_ts_column_ptr,
07973: bint at_scalar_set,
07974: int64_t at_scalar_nanos,
07975: ArrowSchema* c_schema,
07976: const qwp_arrow_override* c_overrides,
07977: size_t c_overrides_len,
07978: bint* any_flushed,
07979: size_t* deferred_since_sync,
07980: bint* may_have_committed_prefix,
07981: object binary_names,
07982: object unlabelled) except -1:
07983: # `c_schema` is in/out and owned by the caller: zero-init on first
07984: # call (this function populates it via get_schema), reused as-is on
07985: # subsequent calls (Arrow C Data Interface guarantees slices of the
07986: # same source share schema), and released by the caller.
+07987: cdef object stream_capsule = stream_owner.__arrow_c_stream__()
__pyx_t_2 = __pyx_v_stream_owner; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_arrow_c_stream_2, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7987, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_stream_capsule = __pyx_t_1; __pyx_t_1 = 0;
+07988: if not PyCapsule_IsValid(stream_capsule, b'arrow_array_stream'):
__pyx_t_4 = (!PyCapsule_IsValid(__pyx_v_stream_capsule, __pyx_k_arrow_array_stream));
if (unlikely(__pyx_t_4)) {
/* … */
}
+07989: raise TypeError(
__pyx_t_2 = NULL;
__pyx_t_3 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_arrow_c_stream___did_not_retur};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7989, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 7989, __pyx_L1_error)
07990: '__arrow_c_stream__ did not return a valid arrow_array_stream '
07991: 'PyCapsule.')
+07992: cdef ArrowArrayStream* stream = <ArrowArrayStream*>PyCapsule_GetPointer(
__pyx_t_5 = PyCapsule_GetPointer(__pyx_v_stream_capsule, __pyx_k_arrow_array_stream); if (unlikely(__pyx_t_5 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 7992, __pyx_L1_error) __pyx_v_stream = ((struct ArrowArrayStream *)__pyx_t_5);
07993: stream_capsule, b'arrow_array_stream')
07994: cdef ArrowArray batch
07995: cdef int rc
07996: cdef const char* stream_err
07997:
+07998: if (stream == NULL or stream.get_schema == NULL or
__pyx_t_6 = (__pyx_v_stream == NULL);
if (!__pyx_t_6) {
} else {
__pyx_t_4 = __pyx_t_6;
goto __pyx_L5_bool_binop_done;
}
__pyx_t_6 = (__pyx_v_stream->get_schema == NULL);
if (!__pyx_t_6) {
} else {
__pyx_t_4 = __pyx_t_6;
goto __pyx_L5_bool_binop_done;
}
/* … */
if (unlikely(__pyx_t_4)) {
/* … */
}
+07999: stream.get_next == NULL or stream.get_last_error == NULL):
__pyx_t_6 = (__pyx_v_stream->get_next == NULL);
if (!__pyx_t_6) {
} else {
__pyx_t_4 = __pyx_t_6;
goto __pyx_L5_bool_binop_done;
}
__pyx_t_6 = (__pyx_v_stream->get_last_error == NULL);
__pyx_t_4 = __pyx_t_6;
__pyx_L5_bool_binop_done:;
+08000: raise TypeError(
__pyx_t_2 = NULL;
__pyx_t_3 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_arrow_c_stream___returned_a_ma};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8000, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 8000, __pyx_L1_error)
08001: '__arrow_c_stream__ returned a malformed arrow_array_stream '
08002: 'PyCapsule with NULL callbacks.')
08003:
+08004: if c_schema.release == NULL:
__pyx_t_4 = (__pyx_v_c_schema->release == NULL);
if (__pyx_t_4) {
/* … */
}
+08005: rc = stream.get_schema(stream, c_schema)
__pyx_v_rc = __pyx_v_stream->get_schema(__pyx_v_stream, __pyx_v_c_schema);
+08006: if rc != 0:
__pyx_t_4 = (__pyx_v_rc != 0);
if (unlikely(__pyx_t_4)) {
/* … */
}
+08007: stream_err = stream.get_last_error(stream)
__pyx_v_stream_err = __pyx_v_stream->get_last_error(__pyx_v_stream);
+08008: raise QuestDBError(
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8008, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
+08009: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8009, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8009, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+08010: f'Arrow stream get_schema failed: '
__pyx_t_8 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_Arrow_stream_get_schema_failed, __pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8010, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_3 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_3 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_9, __pyx_t_8}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8008, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 8008, __pyx_L1_error)
+08011: f'{stream_err.decode("utf-8", errors="replace") if stream_err != NULL else "unknown"}')
__pyx_t_4 = (__pyx_v_stream_err != NULL);
if (__pyx_t_4) {
__pyx_t_12 = __Pyx_PyBytes_FromString(__pyx_v_stream_err); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8011, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_12);
__pyx_t_11 = __pyx_t_12;
__Pyx_INCREF(__pyx_t_11);
#if CYTHON_VECTORCALL
#endif
__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[43];
if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 8011, __pyx_L1_error)
__Pyx_INCREF(__pyx_t_13);
#else
{
PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_errors_2};
__pyx_t_13 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 8011, __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;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8011, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
}
if (!(likely(PyUnicode_CheckExact(__pyx_t_10))||((__pyx_t_10) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_10))) __PYX_ERR(0, 8011, __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, 8011, __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_2};
__pyx_mstate_global->__pyx_tuple[43] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[43])) __PYX_ERR(0, 8011, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[43]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[43]);
08012: # Before the first batch is read: every Arrow source reaches the
08013: # client through this one schema, so a polars `Object` column is
08014: # caught here however it was exported. The caller releases
08015: # `c_schema`.
+08016: _refuse_fsb8_columns(c_schema)
__pyx_t_14 = __pyx_f_7questdb_7_client__refuse_fsb8_columns(__pyx_v_c_schema); if (unlikely(__pyx_t_14 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8016, __pyx_L1_error)
08017: # Once per call, since `c_schema` is fetched once and reused for
08018: # every slice. It only collects the unlabelled columns: the
08019: # caller reports them once the write is done
08020: # (`_log_unlabelled_fsb_columns`).
+08021: _check_fsb_columns(
__pyx_t_14 = __pyx_f_7questdb_7_client__check_fsb_columns(__pyx_v_c_schema, __pyx_v_c_overrides, __pyx_v_c_overrides_len, __pyx_v_binary_names, __pyx_v_unlabelled); if (unlikely(__pyx_t_14 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8021, __pyx_L1_error)
08022: c_schema, c_overrides, c_overrides_len,
08023: binary_names, unlabelled)
08024: # Field metadata goes on to the native client unchanged, by
08025: # design. A `questdb.column_type` claim the field's Arrow type
08026: # cannot carry -- 'short' on int32, 'ipv4' on int64 -- makes the
08027: # native Arrow ingest refuse the write with ArrowIngest before
08028: # anything is sent. That refusal is the intended contract for
08029: # this route, and the client neither strips such a claim nor
08030: # turns the refusal into a log record.
08031: #
08032: # A `df.attrs['questdb']` claim that no longer fits is logged and
08033: # dropped instead (`_log_roundtrip_claim_dropped`), and the two
08034: # routes differ on purpose. Field metadata is the input contract
08035: # of the native Arrow ingest, which refuses such a field for
08036: # every language that uses it (c-questdb-client #186). A field
08037: # claim also goes stale only when the caller carries the old
08038: # field onto a new type -- `field.with_type(...)`, or a
08039: # permissive `pa.concat_tables` with the claimed table first --
08040: # whereas `df.attrs` belongs to the whole frame and survives
08041: # `astype` and arithmetic, so a stale claim there is the normal
08042: # case.
08043: #
08044: # `test_stale_arrow_field_claim_is_refused` pins this. Changing
08045: # it changes the public contract (`QuestDB.dataframe`,
08046: # docs/sender.rst, CHANGELOG); it is not a local fix.
08047:
+08048: while True:
while (1) {
+08049: memset(&batch, 0, sizeof(ArrowArray))
(void)(memset((&__pyx_v_batch), 0, (sizeof(struct ArrowArray))));
+08050: rc = stream.get_next(stream, &batch)
__pyx_v_rc = __pyx_v_stream->get_next(__pyx_v_stream, (&__pyx_v_batch));
+08051: if rc != 0:
__pyx_t_4 = (__pyx_v_rc != 0);
if (unlikely(__pyx_t_4)) {
/* … */
}
+08052: stream_err = stream.get_last_error(stream)
__pyx_v_stream_err = __pyx_v_stream->get_last_error(__pyx_v_stream);
+08053: raise QuestDBError(
__pyx_t_7 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8053, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
+08054: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8054, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8054, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+08055: f'Arrow stream get_next failed: '
__pyx_t_9 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_Arrow_stream_get_next_failed, __pyx_t_10); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8055, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_3 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_8))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_8, __pyx__function); __pyx_t_3 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_2, __pyx_t_9}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8053, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 8053, __pyx_L1_error)
+08056: f'{stream_err.decode("utf-8", errors="replace") if stream_err != NULL else "unknown"}')
__pyx_t_4 = (__pyx_v_stream_err != NULL);
if (__pyx_t_4) {
__pyx_t_13 = __Pyx_PyBytes_FromString(__pyx_v_stream_err); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 8056, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_13);
__pyx_t_12 = __pyx_t_13;
__Pyx_INCREF(__pyx_t_12);
#if CYTHON_VECTORCALL
#endif
__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[43];
if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8056, __pyx_L1_error)
__Pyx_INCREF(__pyx_t_11);
#else
{
PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_errors_2};
__pyx_t_11 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8056, __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;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8056, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
}
if (!(likely(PyUnicode_CheckExact(__pyx_t_10))||((__pyx_t_10) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_10))) __PYX_ERR(0, 8056, __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, 8056, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+08057: if batch.release == NULL:
__pyx_t_4 = (__pyx_v_batch.release == NULL);
if (__pyx_t_4) {
/* … */
}
+08058: break
goto __pyx_L12_break;
+08059: try:
/*try:*/ {
+08060: if deferred_since_sync[0] >= _QWP_MAX_DEFERRED_ARROW_FRAMES:
__pyx_t_4 = ((__pyx_v_deferred_since_sync[0]) >= __pyx_v_7questdb_7_client__QWP_MAX_DEFERRED_ARROW_FRAMES);
if (__pyx_t_4) {
/* … */
}
+08061: _dataframe_columnar_sync(conn)
__pyx_t_14 = __pyx_f_7questdb_7_client__dataframe_columnar_sync(__pyx_v_conn); if (unlikely(__pyx_t_14 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8061, __pyx_L18_error)
+08062: may_have_committed_prefix[0] = True
(__pyx_v_may_have_committed_prefix[0]) = 1;
+08063: deferred_since_sync[0] = 0
(__pyx_v_deferred_since_sync[0]) = 0;
+08064: _dataframe_arrow_flush_batch(
__pyx_t_14 = __pyx_f_7questdb_7_client__dataframe_arrow_flush_batch(__pyx_v_conn, __pyx_v_c_table_name, (&__pyx_v_batch), __pyx_v_c_schema, __pyx_v_c_ts_column_ptr, __pyx_v_at_scalar_set, __pyx_v_at_scalar_nanos, __pyx_v_c_overrides, __pyx_v_c_overrides_len, 1, __pyx_v_may_have_committed_prefix, __pyx_v_deferred_since_sync); if (unlikely(__pyx_t_14 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8064, __pyx_L18_error)
08065: conn, c_table_name, &batch, c_schema, c_ts_column_ptr,
08066: at_scalar_set, at_scalar_nanos,
08067: c_overrides, c_overrides_len,
08068: True, may_have_committed_prefix,
08069: deferred_since_sync)
+08070: any_flushed[0] = True
(__pyx_v_any_flushed[0]) = 1;
+08071: deferred_since_sync[0] += 1
__pyx_t_15 = 0;
(__pyx_v_deferred_since_sync[__pyx_t_15]) = ((__pyx_v_deferred_since_sync[__pyx_t_15]) + 1);
}
08072: finally:
+08073: if batch.release != NULL:
/*finally:*/ {
/*normal exit:*/{
__pyx_t_4 = (__pyx_v_batch.release != NULL);
if (__pyx_t_4) {
/* … */
}
goto __pyx_L19;
}
__pyx_L18_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);
if ( unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
__Pyx_XGOTREF(__pyx_t_19);
__Pyx_XGOTREF(__pyx_t_20);
__Pyx_XGOTREF(__pyx_t_21);
__Pyx_XGOTREF(__pyx_t_22);
__Pyx_XGOTREF(__pyx_t_23);
__Pyx_XGOTREF(__pyx_t_24);
__pyx_t_16 = __pyx_lineno; __pyx_t_17 = __pyx_clineno; __pyx_t_18 = __pyx_filename;
{
__pyx_t_4 = (__pyx_v_batch.release != NULL);
if (__pyx_t_4) {
/* … */
}
}
__Pyx_XGIVEREF(__pyx_t_22);
__Pyx_XGIVEREF(__pyx_t_23);
__Pyx_XGIVEREF(__pyx_t_24);
__Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_20);
__Pyx_XGIVEREF(__pyx_t_21);
__Pyx_ErrRestore(__pyx_t_19, __pyx_t_20, __pyx_t_21);
__pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
__pyx_lineno = __pyx_t_16; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_18;
goto __pyx_L1_error;
}
__pyx_L19:;
}
}
__pyx_L12_break:;
+08074: batch.release(&batch)
__pyx_v_batch.release((&__pyx_v_batch));
/* … */
__pyx_v_batch.release((&__pyx_v_batch));
08075:
08076:
08077: # `schema_overrides` kind `'binary'`. The native Arrow ingest has no such
08078: # override: an unlabelled fixed-size binary column already lands as
08079: # BINARY. The kind is a label for this client alone -- it keeps a pandas
08080: # frame's 16- or 32-byte column from being refused, and a native one from
08081: # being warned about -- so the capsule path takes it out of the list
08082: # before building the native overrides array, and checks what the
08083: # native side would otherwise have checked (`_check_fsb_columns`).
+08084: cdef int _SCHEMA_OVERRIDE_BINARY = -1
__pyx_v_7questdb_7_client__SCHEMA_OVERRIDE_BINARY = -1;
08085:
08086:
+08087: cdef object _validate_schema_overrides(object schema_overrides):
static PyObject *__pyx_f_7questdb_7_client__validate_schema_overrides(PyObject *__pyx_v_schema_overrides) {
PyObject *__pyx_v_out = 0;
PyObject *__pyx_v_name = 0;
PyObject *__pyx_v_override = 0;
PyObject *__pyx_v_kind = 0;
PyObject *__pyx_v_value = 0;
PyObject *__pyx_v_bits = 0;
int __pyx_v_kind_int;
int __pyx_v_arg_int;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_AddTraceback("questdb._client._validate_schema_overrides", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_out);
__Pyx_XDECREF(__pyx_v_name);
__Pyx_XDECREF(__pyx_v_override);
__Pyx_XDECREF(__pyx_v_kind);
__Pyx_XDECREF(__pyx_v_value);
__Pyx_XDECREF(__pyx_v_bits);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08088: """Convert the public schema_overrides dict into a list of
08089: (name_bytes, kind_int, arg_int) tuples. Returns None if empty.
08090:
08091: Keeping `name_bytes` alive on the Python side lets the C overrides
08092: array borrow the underlying char* without an extra copy. A
08093: `'binary'` entry carries `_SCHEMA_OVERRIDE_BINARY`, which is not a
08094: native kind.
08095: """
+08096: if not schema_overrides:
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_schema_overrides); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8096, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+08097: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+08098: if not isinstance(schema_overrides, dict):
__pyx_t_2 = PyDict_Check(__pyx_v_schema_overrides);
__pyx_t_1 = (!__pyx_t_2);
if (unlikely(__pyx_t_1)) {
/* … */
}
+08099: raise TypeError(
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_schema_overrides_must_be_a_dict};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8099, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 8099, __pyx_L1_error)
08100: 'schema_overrides must be a dict mapping column name to '
08101: "one of: 'symbol', 'ipv4', 'char', 'uuid', 'long256', "
08102: "'binary', or ('geohash', bits).")
+08103: cdef list out = []
__pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8103, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_out = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0;
08104: cdef object name, override, kind, value, bits
08105: cdef int kind_int
08106: cdef int arg_int
+08107: for name, override in schema_overrides.items():
__pyx_t_6 = 0;
if (unlikely(__pyx_v_schema_overrides == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
__PYX_ERR(0, 8107, __pyx_L1_error)
}
__pyx_t_4 = __Pyx_dict_iterator(__pyx_v_schema_overrides, 0, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_7), (&__pyx_t_8)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8107, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_3);
__pyx_t_3 = __pyx_t_4;
__pyx_t_4 = 0;
while (1) {
__pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_3, __pyx_t_7, &__pyx_t_6, &__pyx_t_4, &__pyx_t_9, NULL, __pyx_t_8);
if (unlikely(__pyx_t_10 == 0)) break;
if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 8107, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_GOTREF(__pyx_t_9);
__Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_4);
__pyx_t_4 = 0;
__Pyx_XDECREF_SET(__pyx_v_override, __pyx_t_9);
__pyx_t_9 = 0;
+08108: if not isinstance(name, str):
__pyx_t_1 = PyUnicode_Check(__pyx_v_name);
__pyx_t_2 = (!__pyx_t_1);
if (unlikely(__pyx_t_2)) {
/* … */
}
+08109: raise TypeError(
__pyx_t_4 = NULL;
+08110: f'schema_overrides key must be str, got '
__pyx_t_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, 8110, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_11};
__pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8109, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
}
__Pyx_Raise(__pyx_t_9, 0, 0, 0);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__PYX_ERR(0, 8109, __pyx_L1_error)
+08111: f'{type(name).__name__}.')
__pyx_t_11 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_name)), __pyx_mstate_global->__pyx_n_u_name_2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = __Pyx_PyObject_FormatSimple(__pyx_t_11, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_13[0] = __pyx_mstate_global->__pyx_kp_u_schema_overrides_key_must_be_str; __pyx_t_13[1] = __pyx_t_12; __pyx_t_13[2] = __pyx_mstate_global->__pyx_kp_u__3;
+08112: if isinstance(override, str):
__pyx_t_2 = PyUnicode_Check(__pyx_v_override);
if (__pyx_t_2) {
/* … */
goto __pyx_L8;
}
+08113: kind = override
__Pyx_INCREF(__pyx_v_override); __Pyx_XDECREF_SET(__pyx_v_kind, __pyx_v_override);
+08114: value = None
__Pyx_INCREF(Py_None); __Pyx_XDECREF_SET(__pyx_v_value, Py_None);
+08115: elif isinstance(override, tuple) and len(override) == 2:
__pyx_t_1 = PyTuple_Check(__pyx_v_override); if (__pyx_t_1) { } else { __pyx_t_2 = __pyx_t_1; goto __pyx_L9_bool_binop_done; } __pyx_t_14 = PyObject_Length(__pyx_v_override); if (unlikely(__pyx_t_14 == ((Py_ssize_t)-1))) __PYX_ERR(0, 8115, __pyx_L1_error) __pyx_t_1 = (__pyx_t_14 == 2); __pyx_t_2 = __pyx_t_1; __pyx_L9_bool_binop_done:; if (likely(__pyx_t_2)) { /* … */ goto __pyx_L8; }
+08116: kind, value = override
if ((likely(PyTuple_CheckExact(__pyx_v_override))) || (PyList_CheckExact(__pyx_v_override))) { PyObject* sequence = __pyx_v_override; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 8116, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); __Pyx_INCREF(__pyx_t_9); __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_11); } else { __pyx_t_9 = __Pyx_PyList_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8116, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_9); __pyx_t_11 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8116, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_11); } #else __pyx_t_9 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8116, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_11 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8116, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); #endif } else { Py_ssize_t index = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_override); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8116, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_15 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); index = 0; __pyx_t_9 = __pyx_t_15(__pyx_t_4); if (unlikely(!__pyx_t_9)) goto __pyx_L11_unpacking_failed; __Pyx_GOTREF(__pyx_t_9); index = 1; __pyx_t_11 = __pyx_t_15(__pyx_t_4); if (unlikely(!__pyx_t_11)) goto __pyx_L11_unpacking_failed; __Pyx_GOTREF(__pyx_t_11); if (__Pyx_IternextUnpackEndCheck(__pyx_t_15(__pyx_t_4), 2) < (0)) __PYX_ERR(0, 8116, __pyx_L1_error) __pyx_t_15 = NULL; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L12_unpacking_done; __pyx_L11_unpacking_failed:; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_15 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 8116, __pyx_L1_error) __pyx_L12_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_kind, __pyx_t_9); __pyx_t_9 = 0; __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_11); __pyx_t_11 = 0;
08117: else:
+08118: raise TypeError(
/*else*/ {
__pyx_t_9 = NULL;
+08119: f'schema_overrides[{name!r}] has invalid shape '
__pyx_t_4 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8119, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); /* … */ __pyx_t_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, 8119, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_5 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_17}; __pyx_t_11 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8118, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); } __Pyx_Raise(__pyx_t_11, 0, 0, 0); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __PYX_ERR(0, 8118, __pyx_L1_error) } __pyx_L8:;
+08120: f'{override!r}; expected str or (kind, value) tuple.')
__pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_override), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8120, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_16[0] = __pyx_mstate_global->__pyx_kp_u_schema_overrides; __pyx_t_16[1] = __pyx_t_4; __pyx_t_16[2] = __pyx_mstate_global->__pyx_kp_u_has_invalid_shape; __pyx_t_16[3] = __pyx_t_12; __pyx_t_16[4] = __pyx_mstate_global->__pyx_kp_u_expected_str_or_kind_value_tupl;
+08121: arg_int = 0
__pyx_v_arg_int = 0;
+08122: if kind == 'symbol':
__pyx_t_2 = __Pyx_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, 8122, __pyx_L1_error) if (__pyx_t_2) { /* … */ goto __pyx_L13; }
+08123: kind_int = <int>qwp_arrow_override_symbol
__pyx_v_kind_int = ((int)qwp_arrow_override_symbol);
+08124: elif kind == 'ipv4':
__pyx_t_2 = __Pyx_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, 8124, __pyx_L1_error) if (__pyx_t_2) { /* … */ goto __pyx_L13; }
+08125: kind_int = <int>qwp_arrow_override_ipv4
__pyx_v_kind_int = ((int)qwp_arrow_override_ipv4);
+08126: elif kind == 'char':
__pyx_t_2 = __Pyx_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, 8126, __pyx_L1_error) if (__pyx_t_2) { /* … */ goto __pyx_L13; }
+08127: kind_int = <int>qwp_arrow_override_char
__pyx_v_kind_int = ((int)qwp_arrow_override_char);
+08128: elif kind == 'uuid':
__pyx_t_2 = __Pyx_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, 8128, __pyx_L1_error) if (__pyx_t_2) { /* … */ goto __pyx_L13; }
+08129: kind_int = <int>qwp_arrow_override_uuid
__pyx_v_kind_int = ((int)qwp_arrow_override_uuid);
+08130: elif kind == 'long256':
__pyx_t_2 = __Pyx_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, 8130, __pyx_L1_error) if (__pyx_t_2) { /* … */ goto __pyx_L13; }
+08131: kind_int = <int>qwp_arrow_override_long256
__pyx_v_kind_int = ((int)qwp_arrow_override_long256);
+08132: elif kind == 'binary':
__pyx_t_2 = __Pyx_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, 8132, __pyx_L1_error) if (__pyx_t_2) { /* … */ goto __pyx_L13; }
+08133: kind_int = _SCHEMA_OVERRIDE_BINARY
__pyx_v_kind_int = __pyx_v_7questdb_7_client__SCHEMA_OVERRIDE_BINARY;
+08134: elif kind == 'geohash':
__pyx_t_2 = __Pyx_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, 8134, __pyx_L1_error) if (likely(__pyx_t_2)) { /* … */ goto __pyx_L13; }
08135: # Held to the range as a Python object, so a number too
08136: # wide for the C field is refused rather than overflowing
08137: # on the way into it.
+08138: bits = int(value) if _is_integral_not_bool(value) else None
__pyx_t_2 = __pyx_f_7questdb_7_client__is_integral_not_bool(__pyx_v_value); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8138, __pyx_L1_error) if (__pyx_t_2) { __pyx_t_17 = __Pyx_PyNumber_Int(__pyx_v_value); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8138, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_11 = __pyx_t_17; __pyx_t_17 = 0; } else { __Pyx_INCREF(Py_None); __pyx_t_11 = Py_None; } __Pyx_XDECREF_SET(__pyx_v_bits, __pyx_t_11); __pyx_t_11 = 0;
+08139: if bits is None or bits < 1 or bits > 60:
__pyx_t_1 = (__pyx_v_bits == Py_None);
if (!__pyx_t_1) {
} else {
__pyx_t_2 = __pyx_t_1;
goto __pyx_L15_bool_binop_done;
}
__pyx_t_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, 8139, __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, 8139, __pyx_L1_error)
__pyx_t_2 = __pyx_t_1;
__pyx_L15_bool_binop_done:;
if (unlikely(__pyx_t_2)) {
/* … */
}
+08140: raise ValueError(
__pyx_t_17 = NULL;
+08141: f'schema_overrides[{name!r}] geohash bits must '
__pyx_t_9 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8141, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); /* … */ __pyx_t_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, 8141, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_5 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_t_4}; __pyx_t_11 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8140, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); } __Pyx_Raise(__pyx_t_11, 0, 0, 0); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __PYX_ERR(0, 8140, __pyx_L1_error)
+08142: f'be a whole number in 1..=60, got {value!r}.')
__pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_value), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8142, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_16[0] = __pyx_mstate_global->__pyx_kp_u_schema_overrides; __pyx_t_16[1] = __pyx_t_9; __pyx_t_16[2] = __pyx_mstate_global->__pyx_kp_u_geohash_bits_must_be_a_whole_nu; __pyx_t_16[3] = __pyx_t_12; __pyx_t_16[4] = __pyx_mstate_global->__pyx_kp_u__3;
+08143: kind_int = <int>qwp_arrow_override_geohash
__pyx_v_kind_int = ((int)qwp_arrow_override_geohash);
+08144: arg_int = bits
__pyx_t_10 = __Pyx_PyLong_As_int(__pyx_v_bits); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8144, __pyx_L1_error) __pyx_v_arg_int = __pyx_t_10;
08145: else:
+08146: raise ValueError(
/*else*/ {
__pyx_t_4 = NULL;
+08147: f'schema_overrides[{name!r}] kind {kind!r} not '
__pyx_t_17 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8147, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_kind), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8147, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_16[0] = __pyx_mstate_global->__pyx_kp_u_schema_overrides; __pyx_t_16[1] = __pyx_t_17; __pyx_t_16[2] = __pyx_mstate_global->__pyx_kp_u_kind_2; __pyx_t_16[3] = __pyx_t_12; __pyx_t_16[4] = __pyx_mstate_global->__pyx_kp_u_not_in_symbol_ipv4_char_uuid_lo; __pyx_t_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, 8147, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_5 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_9}; __pyx_t_11 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8146, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); } __Pyx_Raise(__pyx_t_11, 0, 0, 0); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __PYX_ERR(0, 8146, __pyx_L1_error) } __pyx_L13:;
08148: "in {'symbol', 'ipv4', 'char', 'uuid', 'long256', "
08149: "'binary', 'geohash'}.")
+08150: out.append((name.encode('utf-8'), kind_int, arg_int))
__pyx_t_9 = __pyx_v_name;
__Pyx_INCREF(__pyx_t_9);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_mstate_global->__pyx_kp_u_utf_8};
__pyx_t_11 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8150, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
}
__pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_kind_int); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8150, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_arg_int); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8150, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8150, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_12);
__Pyx_GIVEREF(__pyx_t_11);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_11) != (0)) __PYX_ERR(0, 8150, __pyx_L1_error);
__Pyx_GIVEREF(__pyx_t_9);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_9) != (0)) __PYX_ERR(0, 8150, __pyx_L1_error);
__Pyx_GIVEREF(__pyx_t_4);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_t_4) != (0)) __PYX_ERR(0, 8150, __pyx_L1_error);
__pyx_t_11 = 0;
__pyx_t_9 = 0;
__pyx_t_4 = 0;
__pyx_t_18 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_12); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 8150, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+08151: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
08152:
08153:
+08154: cdef object _capsule_get_column_names(object sliceable):
static PyObject *__pyx_f_7questdb_7_client__capsule_get_column_names(PyObject *__pyx_v_sliceable) {
PyObject *__pyx_v_names = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client._capsule_get_column_names", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_names);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08155: """Return list of str column names from polars / pyarrow input,
08156: or None if the input doesn't expose a uniform name list."""
08157: cdef object names
+08158: names = getattr(sliceable, 'column_names', None)
__pyx_t_1 = __Pyx_GetAttr3(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_column_names, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8158, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_names = __pyx_t_1; __pyx_t_1 = 0;
+08159: if names is not None:
__pyx_t_2 = (__pyx_v_names != Py_None);
if (__pyx_t_2) {
/* … */
}
+08160: return list(names)
__pyx_t_1 = PySequence_List(__pyx_v_names); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8160, __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;
+08161: names = getattr(sliceable, 'columns', None)
__pyx_t_1 = __Pyx_GetAttr3(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_columns, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8161, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_names, __pyx_t_1); __pyx_t_1 = 0;
+08162: if names is not None:
__pyx_t_2 = (__pyx_v_names != Py_None);
if (__pyx_t_2) {
/* … */
}
+08163: return list(names)
__pyx_t_1 = PySequence_List(__pyx_v_names); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8163, __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;
+08164: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
08165:
08166:
+08167: cdef object _capsule_at_index_to_name(object sliceable, int idx):
static PyObject *__pyx_f_7questdb_7_client__capsule_at_index_to_name(PyObject *__pyx_v_sliceable, int __pyx_v_idx) {
PyObject *__pyx_v_names = 0;
int __pyx_v_orig;
int __pyx_v_n;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_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;
}
08168: """Resolve an integer `at` column index (negative allowed) to its name,
08169: mirroring the numpy path's `_bind_col_index`."""
+08170: cdef object names = _capsule_get_column_names(sliceable)
__pyx_t_1 = __pyx_f_7questdb_7_client__capsule_get_column_names(__pyx_v_sliceable); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8170, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_names = __pyx_t_1; __pyx_t_1 = 0;
+08171: cdef int orig = idx
__pyx_v_orig = __pyx_v_idx;
08172: cdef int n
+08173: if names is None:
__pyx_t_2 = (__pyx_v_names == Py_None);
if (unlikely(__pyx_t_2)) {
/* … */
}
+08174: raise TypeError(
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Cannot_resolve_an_integer_at_ind};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8174, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 8174, __pyx_L1_error)
08175: 'Cannot resolve an integer `at` index for this Arrow-native '
08176: 'input; pass the designated timestamp column name as a str.')
+08177: n = <int>len(names)
__pyx_t_5 = PyObject_Length(__pyx_v_names); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 8177, __pyx_L1_error) __pyx_v_n = ((int)__pyx_t_5);
+08178: if idx < 0:
__pyx_t_2 = (__pyx_v_idx < 0);
if (__pyx_t_2) {
/* … */
}
+08179: idx += n
__pyx_v_idx = (__pyx_v_idx + __pyx_v_n);
+08180: if idx < 0 or idx >= n:
__pyx_t_6 = (__pyx_v_idx < 0);
if (!__pyx_t_6) {
} else {
__pyx_t_2 = __pyx_t_6;
goto __pyx_L6_bool_binop_done;
}
__pyx_t_6 = (__pyx_v_idx >= __pyx_v_n);
__pyx_t_2 = __pyx_t_6;
__pyx_L6_bool_binop_done:;
if (unlikely(__pyx_t_2)) {
/* … */
}
+08181: raise IndexError(f'Bad argument `at`: {orig} index out of range')
__pyx_t_3 = NULL;
__pyx_t_7 = __Pyx_PyUnicode_From_int(__pyx_v_orig, 0, ' ', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8181, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_Bad_argument_at;
__pyx_t_8[1] = __pyx_t_7;
__pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u_index_out_of_range;
__pyx_t_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, 8181, __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, 8181, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 8181, __pyx_L1_error)
+08182: return names[idx]
__pyx_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, 8182, __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;
08183:
08184:
+08185: cdef bint _capsule_polars_dtype_is_string_like(object dtype) except -1:
static int __pyx_f_7questdb_7_client__capsule_polars_dtype_is_string_like(PyObject *__pyx_v_dtype) {
PyObject *__pyx_v_enum_t = 0;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._capsule_polars_dtype_is_string_like", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_enum_t);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08186: """polars: Utf8 / String / Categorical / Enum count as string-like."""
+08187: if _POLARS is None:
__pyx_t_1 = (__pyx_v_7questdb_7_client__POLARS == Py_None);
if (__pyx_t_1) {
/* … */
}
+08188: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+08189: if dtype == _POLARS.Utf8:
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_Utf8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8189, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_v_dtype, __pyx_t_2, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8189, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_1) { /* … */ }
+08190: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+08191: 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, 8191, __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, 8191, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_1) { /* … */ }
+08192: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+08193: cdef object enum_t = getattr(_POLARS, 'Enum', None)
__pyx_t_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, 8193, __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;
+08194: if enum_t is not None and isinstance(dtype, enum_t):
__pyx_t_4 = (__pyx_v_enum_t != Py_None);
if (__pyx_t_4) {
} else {
__pyx_t_1 = __pyx_t_4;
goto __pyx_L7_bool_binop_done;
}
__pyx_t_4 = PyObject_IsInstance(__pyx_v_dtype, __pyx_v_enum_t); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 8194, __pyx_L1_error)
__pyx_t_1 = __pyx_t_4;
__pyx_L7_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+08195: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+08196: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
08197:
08198:
+08199: cdef bint _capsule_pyarrow_type_is_utf8(object pa_type) except -1:
static int __pyx_f_7questdb_7_client__capsule_pyarrow_type_is_utf8(PyObject *__pyx_v_pa_type) {
PyObject *__pyx_v_is_string_view = 0;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client._capsule_pyarrow_type_is_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_is_string_view);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+08200: cdef object is_string_view = getattr(
__pyx_t_2 = __Pyx_GetAttr3(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_is_string_view, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8200, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_is_string_view = __pyx_t_2; __pyx_t_2 = 0;
+08201: _PYARROW.types, 'is_string_view', None)
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8201, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1);
+08202: return (_PYARROW.types.is_string(pa_type)
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8202, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __pyx_t_4; __Pyx_INCREF(__pyx_t_1); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_pa_type}; __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_string, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8202, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 8202, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (!__pyx_t_6) { } else { __pyx_t_3 = __pyx_t_6; goto __pyx_L3_bool_binop_done; }
+08203: or _PYARROW.types.is_large_string(pa_type)
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8203, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __pyx_t_1; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_pa_type}; __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_large_string, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8203, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 8203, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (!__pyx_t_6) { } else { __pyx_t_3 = __pyx_t_6; goto __pyx_L3_bool_binop_done; }
+08204: or (is_string_view is not None and is_string_view(pa_type)))
__pyx_t_6 = (__pyx_v_is_string_view != Py_None);
if (__pyx_t_6) {
} else {
__pyx_t_3 = __pyx_t_6;
goto __pyx_L3_bool_binop_done;
}
__pyx_t_1 = NULL;
__Pyx_INCREF(__pyx_v_is_string_view);
__pyx_t_4 = __pyx_v_is_string_view;
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_1);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_1);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_pa_type};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8204, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 8204, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_3 = __pyx_t_6;
__pyx_L3_bool_binop_done:;
{
__pyx_r = __pyx_t_3;
}
goto __pyx_L0;
08205:
08206:
+08207: cdef bint _capsule_pyarrow_type_is_string_like(object field_type) except -1:
static int __pyx_f_7questdb_7_client__capsule_pyarrow_type_is_string_like(PyObject *__pyx_v_field_type) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client._capsule_pyarrow_type_is_string_like", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08208: """pyarrow: utf8 / large_utf8 / utf8_view, plus Dictionary whose
08209: value type is one of those."""
+08210: if _PYARROW is None:
__pyx_t_1 = (__pyx_v_7questdb_7_client__PYARROW == Py_None);
if (__pyx_t_1) {
/* … */
}
+08211: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+08212: if _capsule_pyarrow_type_is_utf8(field_type):
__pyx_t_1 = __pyx_f_7questdb_7_client__capsule_pyarrow_type_is_utf8(__pyx_v_field_type); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 8212, __pyx_L1_error)
if (__pyx_t_1) {
/* … */
}
+08213: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+08214: return (_PYARROW.types.is_dictionary(field_type)
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8214, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __pyx_t_4; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_field_type}; __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_dictionary, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8214, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 8214, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_6) { } else { __pyx_t_1 = __pyx_t_6; goto __pyx_L5_bool_binop_done; }
+08215: and _capsule_pyarrow_type_is_utf8(field_type.value_type))
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_field_type, __pyx_mstate_global->__pyx_n_u_value_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8215, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = __pyx_f_7questdb_7_client__capsule_pyarrow_type_is_utf8(__pyx_t_2); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 8215, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_1 = __pyx_t_6; __pyx_L5_bool_binop_done:; { __pyx_r = __pyx_t_1; } goto __pyx_L0;
08216:
08217:
+08218: cdef object _capsule_schema(object sliceable, object symbols):
static PyObject *__pyx_f_7questdb_7_client__capsule_schema(PyObject *__pyx_v_sliceable, PyObject *__pyx_v_symbols) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client._capsule_schema", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08219: """Arrow schema of a pyarrow Table / RecordBatch when resolving
08220: `symbols` needs one, else None. Pandas input takes its schema from its
08221: first exported batch instead."""
+08222: if (symbols is None or symbols == 'auto'
__pyx_t_2 = (__pyx_v_symbols == Py_None);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
/* … */
__pyx_t_2 = __Pyx_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, 8222, __pyx_L1_error)
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
/* … */
if (__pyx_t_1) {
/* … */
}
+08223: or _is_polars_dataframe_or_lazy(sliceable)):
__pyx_t_2 = __pyx_f_7questdb_7_client__is_polars_dataframe_or_lazy(__pyx_v_sliceable); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8223, __pyx_L1_error) __pyx_t_1 = __pyx_t_2; __pyx_L4_bool_binop_done:;
+08224: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+08225: if _PYARROW is None:
__pyx_t_1 = (__pyx_v_7questdb_7_client__PYARROW == Py_None);
if (__pyx_t_1) {
/* … */
}
+08226: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L13_try_end;
__pyx_L8_error:;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
__pyx_L10_except_error:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L1_error;
__pyx_L11_except_return:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L0;
__pyx_L13_try_end:;
}
+08227: _dataframe_require_pyarrow()
__pyx_t_6 = __pyx_f_7questdb_7_client__dataframe_require_pyarrow(); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8227, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+08228: except ImportError:
__pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_ImportError)))); if (__pyx_t_7) { __Pyx_ErrRestore(0,0,0);
+08229: return None
{
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;
+08230: if isinstance(sliceable, (_PYARROW.Table, _PYARROW.RecordBatch)):
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_Table); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8230, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_RecordBatch); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8230, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_2 = PyObject_IsInstance(__pyx_v_sliceable, __pyx_t_6); if (!__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L17_bool_binop_done; } __pyx_t_2 = PyObject_IsInstance(__pyx_v_sliceable, __pyx_t_8); __pyx_t_1 = __pyx_t_2; __pyx_L17_bool_binop_done:; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (__pyx_t_1) { /* … */ }
+08231: return sliceable.schema
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8231, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_6; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_6 = 0; goto __pyx_L0;
+08232: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
08233:
08234:
+08235: cdef object _capsule_get_string_column_names(
static PyObject *__pyx_f_7questdb_7_client__capsule_get_string_column_names(PyObject *__pyx_v_sliceable, PyObject *__pyx_v_schema) {
PyObject *__pyx_v_out = 0;
PyObject *__pyx_v_name = 0;
PyObject *__pyx_v_dtype = 0;
PyObject *__pyx_v_field = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client._capsule_get_string_column_names", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_out);
__Pyx_XDECREF(__pyx_v_name);
__Pyx_XDECREF(__pyx_v_dtype);
__Pyx_XDECREF(__pyx_v_field);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08236: object sliceable, object schema):
08237: """Return names of all string-like columns (utf8 / large_utf8 /
08238: dict-of-utf8). Returns None if schema introspection is not
08239: available on the input."""
08240: cdef object out
08241: cdef object name
08242: cdef object dtype
08243: cdef object field
+08244: if _POLARS is not None and isinstance(sliceable, _POLARS_DATAFRAME_T):
__pyx_t_2 = (__pyx_v_7questdb_7_client__POLARS != Py_None);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_3 = __pyx_v_7questdb_7_client__POLARS_DATAFRAME_T;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_2 = PyObject_IsInstance(__pyx_v_sliceable, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8244, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+08245: out = []
__pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8245, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_out = __pyx_t_3; __pyx_t_3 = 0;
+08246: for name, dtype in sliceable.schema.items():
__pyx_t_4 = 0;
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8246, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
if (unlikely(__pyx_t_7 == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
__PYX_ERR(0, 8246, __pyx_L1_error)
}
__pyx_t_8 = __Pyx_dict_iterator(__pyx_t_7, 0, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_5), (&__pyx_t_6)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8246, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_3);
__pyx_t_3 = __pyx_t_8;
__pyx_t_8 = 0;
while (1) {
__pyx_t_9 = __Pyx_dict_iter_next(__pyx_t_3, __pyx_t_5, &__pyx_t_4, &__pyx_t_8, &__pyx_t_7, NULL, __pyx_t_6);
if (unlikely(__pyx_t_9 == 0)) break;
if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 8246, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_GOTREF(__pyx_t_7);
__Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_8);
__pyx_t_8 = 0;
__Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_7);
__pyx_t_7 = 0;
+08247: if _capsule_polars_dtype_is_string_like(dtype):
__pyx_t_1 = __pyx_f_7questdb_7_client__capsule_polars_dtype_is_string_like(__pyx_v_dtype); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 8247, __pyx_L1_error) if (__pyx_t_1) { /* … */ } } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+08248: out.append(name)
__pyx_t_10 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_v_name); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 8248, __pyx_L1_error)
+08249: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+08250: if schema is None:
__pyx_t_1 = (__pyx_v_schema == Py_None);
if (__pyx_t_1) {
/* … */
}
+08251: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+08252: out = []
__pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8252, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_out = __pyx_t_3; __pyx_t_3 = 0;
+08253: for field in schema:
if (likely(PyList_CheckExact(__pyx_v_schema)) || PyTuple_CheckExact(__pyx_v_schema)) { __pyx_t_3 = __pyx_v_schema; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0; __pyx_t_11 = NULL; } else { __pyx_t_5 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_schema); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8253, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_11 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8253, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_11)) { if (likely(PyList_CheckExact(__pyx_t_3))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8253, __pyx_L1_error) #endif if (__pyx_t_5 >= __pyx_temp) break; } __pyx_t_7 = __Pyx_PyList_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, 8253, __pyx_L1_error) #endif if (__pyx_t_5 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_7 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_5)); #else __pyx_t_7 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_5); #endif ++__pyx_t_5; } if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8253, __pyx_L1_error) } else { __pyx_t_7 = __pyx_t_11(__pyx_t_3); if (unlikely(!__pyx_t_7)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 8253, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_7); __Pyx_XDECREF_SET(__pyx_v_field, __pyx_t_7); __pyx_t_7 = 0; /* … */ } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+08254: if _capsule_pyarrow_type_is_string_like(field.type):
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_type); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8254, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = __pyx_f_7questdb_7_client__capsule_pyarrow_type_is_string_like(__pyx_t_7); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 8254, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (__pyx_t_1) { /* … */ }
+08255: out.append(field.name)
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8255, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_10 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_t_7); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 8255, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+08256: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
08257:
08258:
+08259: cdef object _capsule_column_is_string_like(
static PyObject *__pyx_f_7questdb_7_client__capsule_column_is_string_like(PyObject *__pyx_v_sliceable, PyObject *__pyx_v_schema, PyObject *__pyx_v_name) {
PyObject *__pyx_v_dtype = 0;
PyObject *__pyx_v_field_type = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_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;
}
08260: object sliceable, object schema, str name):
08261: """Returns True iff `name` is a string-like column on `sliceable`,
08262: False iff it is some other type, or None if schema introspection
08263: is not available on the input."""
08264: cdef object dtype
08265: cdef object field_type
+08266: if _POLARS is not None and isinstance(sliceable, _POLARS_DATAFRAME_T):
__pyx_t_2 = (__pyx_v_7questdb_7_client__POLARS != Py_None);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_3 = __pyx_v_7questdb_7_client__POLARS_DATAFRAME_T;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_2 = PyObject_IsInstance(__pyx_v_sliceable, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8266, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+08267: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
goto __pyx_L11_try_end;
__pyx_L6_error:;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
__pyx_L8_except_error:;
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
goto __pyx_L1_error;
__pyx_L11_try_end:;
}
+08268: dtype = sliceable.schema[name]
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8268, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyObject_Dict_GetItem(__pyx_t_3, __pyx_v_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8268, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_dtype = __pyx_t_7; __pyx_t_7 = 0;
+08269: except KeyError:
__pyx_t_8 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_KeyError)))); if (__pyx_t_8) { __Pyx_AddTraceback("questdb._client._capsule_column_is_string_like", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_3, &__pyx_t_9) < 0) __PYX_ERR(0, 8269, __pyx_L8_except_error) __Pyx_XGOTREF(__pyx_t_7); __Pyx_XGOTREF(__pyx_t_3); __Pyx_XGOTREF(__pyx_t_9);
+08270: raise KeyError(
__pyx_t_11 = NULL;
+08271: f'symbols column {name!r} not found in the dataframe.')
__pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8271, __pyx_L8_except_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_13[0] = __pyx_mstate_global->__pyx_kp_u_symbols_column; __pyx_t_13[1] = __pyx_t_12; __pyx_t_13[2] = __pyx_mstate_global->__pyx_kp_u_not_found_in_the_dataframe; __pyx_t_14 = 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, 8271, __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, 8270, __pyx_L8_except_error) __Pyx_GOTREF(__pyx_t_10); } __Pyx_Raise(__pyx_t_10, 0, 0, 0); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __PYX_ERR(0, 8270, __pyx_L8_except_error) } goto __pyx_L8_except_error;
+08272: return _capsule_polars_dtype_is_string_like(dtype)
__pyx_t_1 = __pyx_f_7questdb_7_client__capsule_polars_dtype_is_string_like(__pyx_v_dtype); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 8272, __pyx_L1_error) __pyx_t_9 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8272, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_9; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_9 = 0; goto __pyx_L0;
+08273: if schema is None:
__pyx_t_1 = (__pyx_v_schema == Py_None);
if (__pyx_t_1) {
/* … */
}
+08274: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+08275: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L20_try_end;
__pyx_L15_error:;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_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:;
}
+08276: 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, 8276, __pyx_L15_error)
__Pyx_GOTREF(__pyx_t_9);
}
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_type); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8276, __pyx_L15_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__pyx_v_field_type = __pyx_t_3;
__pyx_t_3 = 0;
+08277: except (KeyError, ValueError):
__pyx_t_8 = __Pyx_PyErr_ExceptionMatches2(((PyObject *)(((PyTypeObject*)PyExc_KeyError))), ((PyObject *)(((PyTypeObject*)PyExc_ValueError))));
if (__pyx_t_8) {
__Pyx_AddTraceback("questdb._client._capsule_column_is_string_like", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_9, &__pyx_t_7) < 0) __PYX_ERR(0, 8277, __pyx_L17_except_error)
__Pyx_XGOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_7);
+08278: raise KeyError(
__pyx_t_15 = NULL;
+08279: f'symbols column {name!r} not found in the dataframe.')
__pyx_t_11 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8279, __pyx_L17_except_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_13[0] = __pyx_mstate_global->__pyx_kp_u_symbols_column; __pyx_t_13[1] = __pyx_t_11; __pyx_t_13[2] = __pyx_mstate_global->__pyx_kp_u_not_found_in_the_dataframe; __pyx_t_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, 8279, __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, 8278, __pyx_L17_except_error) __Pyx_GOTREF(__pyx_t_10); } __Pyx_Raise(__pyx_t_10, 0, 0, 0); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __PYX_ERR(0, 8278, __pyx_L17_except_error) } goto __pyx_L17_except_error;
+08280: return _capsule_pyarrow_type_is_string_like(field_type)
__pyx_t_1 = __pyx_f_7questdb_7_client__capsule_pyarrow_type_is_string_like(__pyx_v_field_type); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 8280, __pyx_L1_error) __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8280, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_7; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_7 = 0; goto __pyx_L0;
08281:
08282:
+08283: cdef object _capsule_get_dict_string_column_names(
static PyObject *__pyx_f_7questdb_7_client__capsule_get_dict_string_column_names(PyObject *__pyx_v_sliceable, PyObject *__pyx_v_schema) {
PyObject *__pyx_v_out = 0;
PyObject *__pyx_v_name = 0;
PyObject *__pyx_v_dtype = 0;
PyObject *__pyx_v_field = 0;
PyObject *__pyx_v_enum_t = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_AddTraceback("questdb._client._capsule_get_dict_string_column_names", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_out);
__Pyx_XDECREF(__pyx_v_name);
__Pyx_XDECREF(__pyx_v_dtype);
__Pyx_XDECREF(__pyx_v_field);
__Pyx_XDECREF(__pyx_v_enum_t);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08284: object sliceable, object schema):
08285: """Return names of dict-encoded string-like columns (polars
08286: Categorical / Enum or pyarrow Dictionary(*, utf8/large_utf8/utf8_view)).
08287: Returns None if schema introspection is not available."""
08288: cdef object out
08289: cdef object name
08290: cdef object dtype
08291: cdef object field
08292: cdef object enum_t
+08293: if _POLARS is not None and isinstance(sliceable, _POLARS_DATAFRAME_T):
__pyx_t_2 = (__pyx_v_7questdb_7_client__POLARS != Py_None);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_3 = __pyx_v_7questdb_7_client__POLARS_DATAFRAME_T;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_2 = PyObject_IsInstance(__pyx_v_sliceable, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8293, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+08294: out = []
__pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_out = __pyx_t_3; __pyx_t_3 = 0;
+08295: enum_t = getattr(_POLARS, 'Enum', None)
__pyx_t_3 = __pyx_v_7questdb_7_client__POLARS;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = __Pyx_GetAttr3(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Enum, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8295, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_v_enum_t = __pyx_t_4;
__pyx_t_4 = 0;
+08296: for name, dtype in sliceable.schema.items():
__pyx_t_5 = 0;
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8296, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
if (unlikely(__pyx_t_3 == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
__PYX_ERR(0, 8296, __pyx_L1_error)
}
__pyx_t_8 = __Pyx_dict_iterator(__pyx_t_3, 0, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_6), (&__pyx_t_7)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8296, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4);
__pyx_t_4 = __pyx_t_8;
__pyx_t_8 = 0;
while (1) {
__pyx_t_9 = __Pyx_dict_iter_next(__pyx_t_4, __pyx_t_6, &__pyx_t_5, &__pyx_t_8, &__pyx_t_3, NULL, __pyx_t_7);
if (unlikely(__pyx_t_9 == 0)) break;
if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 8296, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_GOTREF(__pyx_t_3);
__Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_8);
__pyx_t_8 = 0;
__Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_3);
__pyx_t_3 = 0;
+08297: if isinstance(dtype, _POLARS.Categorical):
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_Categorical); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8297, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_3); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 8297, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_1) { /* … */ goto __pyx_L8; }
+08298: out.append(name)
__pyx_t_10 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_v_name); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 8298, __pyx_L1_error)
+08299: elif enum_t is not None and isinstance(dtype, enum_t):
__pyx_t_2 = (__pyx_v_enum_t != Py_None);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L9_bool_binop_done;
}
__pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_v_enum_t); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8299, __pyx_L1_error)
__pyx_t_1 = __pyx_t_2;
__pyx_L9_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
__pyx_L8:;
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+08300: out.append(name)
__pyx_t_10 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_v_name); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 8300, __pyx_L1_error)
+08301: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+08302: if schema is None:
__pyx_t_1 = (__pyx_v_schema == Py_None);
if (__pyx_t_1) {
/* … */
}
+08303: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+08304: out = []
__pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8304, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_out = __pyx_t_4; __pyx_t_4 = 0;
+08305: for field in schema:
if (likely(PyList_CheckExact(__pyx_v_schema)) || PyTuple_CheckExact(__pyx_v_schema)) { __pyx_t_4 = __pyx_v_schema; __Pyx_INCREF(__pyx_t_4); __pyx_t_6 = 0; __pyx_t_11 = NULL; } else { __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_schema); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8305, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_11 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8305, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_11)) { if (likely(PyList_CheckExact(__pyx_t_4))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8305, __pyx_L1_error) #endif if (__pyx_t_6 >= __pyx_temp) break; } __pyx_t_3 = __Pyx_PyList_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, 8305, __pyx_L1_error) #endif if (__pyx_t_6 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_3 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6)); #else __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_6); #endif ++__pyx_t_6; } if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8305, __pyx_L1_error) } else { __pyx_t_3 = __pyx_t_11(__pyx_t_4); if (unlikely(!__pyx_t_3)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 8305, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_field, __pyx_t_3); __pyx_t_3 = 0; /* … */ } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+08306: if (_PYARROW.types.is_dictionary(field.type)
__pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8306, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_8 = __pyx_t_12; __Pyx_INCREF(__pyx_t_8); __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_type); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 8306, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_13}; __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_dictionary, __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8306, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8306, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L15_bool_binop_done; } /* … */ if (__pyx_t_1) { /* … */ }
+08307: and _capsule_pyarrow_type_is_utf8(field.type.value_type)):
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_type); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8307, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_value_type); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8307, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_2 = __pyx_f_7questdb_7_client__capsule_pyarrow_type_is_utf8(__pyx_t_12); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8307, __pyx_L1_error) __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_1 = __pyx_t_2; __pyx_L15_bool_binop_done:;
+08308: out.append(field.name)
__pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8308, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_10 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_t_12); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 8308, __pyx_L1_error) __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+08309: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
08310:
08311:
+08312: cdef object _resolve_symbols_to_overrides(
static PyObject *__pyx_f_7questdb_7_client__resolve_symbols_to_overrides(PyObject *__pyx_v_sliceable, PyObject *__pyx_v_schema, PyObject *__pyx_v_symbols) {
PyObject *__pyx_v_out = 0;
int __pyx_v_symbol_kind;
int __pyx_v_not_symbol_kind;
PyObject *__pyx_v_col_names = 0;
PyObject *__pyx_v_entry = 0;
PyObject *__pyx_v_name = 0;
PyObject *__pyx_v_is_str = 0;
int __pyx_v_idx;
PyObject *__pyx_v_listed = 0;
PyObject *__pyx_v_dict_names = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_AddTraceback("questdb._client._resolve_symbols_to_overrides", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_out);
__Pyx_XDECREF(__pyx_v_col_names);
__Pyx_XDECREF(__pyx_v_entry);
__Pyx_XDECREF(__pyx_v_name);
__Pyx_XDECREF(__pyx_v_is_str);
__Pyx_XDECREF(__pyx_v_listed);
__Pyx_XDECREF(__pyx_v_dict_names);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08313: object sliceable, object schema, object symbols):
08314: """Translate `symbols` into a list of
08315: (name_bytes, kind, arg) tuples matching the shape returned by
08316: _validate_schema_overrides. `kind` is `qwp_arrow_override_symbol`
08317: to mark a column as SYMBOL or `qwp_arrow_override_not_symbol`
08318: to force a dict-encoded column to VARCHAR; `arg` is unused (0) for both.
08319: Returns:
08320:
08321: - [] for None / 'auto' (no overrides, Rust default applies —
08322: Dictionary columns auto-classify as SymbolDict).
08323: - list for True (auto-detect str cols) / False (force NotSymbol
08324: on every dict-encoded str col) / List[str] / List[int].
08325: - None if resolution requires introspection not available on the
08326: input; caller falls back to Manual plan.
08327:
08328: Raises QuestDBError(BadDataFrame) when an explicitly-named symbols
08329: entry targets a non-string column (matches Manual plan semantics).
08330: """
08331: cdef list out
+08332: cdef int symbol_kind = <int>qwp_arrow_override_symbol
__pyx_v_symbol_kind = ((int)qwp_arrow_override_symbol);
+08333: cdef int not_symbol_kind = <int>qwp_arrow_override_not_symbol
__pyx_v_not_symbol_kind = ((int)qwp_arrow_override_not_symbol);
08334: cdef object col_names
08335: cdef object entry
08336: cdef object name
08337: cdef object is_str
08338: cdef int idx
08339: cdef set listed
08340: cdef object dict_names
08341:
+08342: if symbols is None or symbols == 'auto':
__pyx_t_2 = (__pyx_v_symbols == Py_None);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = __Pyx_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, 8342, __pyx_L1_error)
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+08343: return []
__pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8343, __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;
08344:
+08345: if symbols is False:
__pyx_t_1 = (__pyx_v_symbols == Py_False);
if (__pyx_t_1) {
/* … */
}
+08346: col_names = _capsule_get_dict_string_column_names(sliceable, schema)
__pyx_t_3 = __pyx_f_7questdb_7_client__capsule_get_dict_string_column_names(__pyx_v_sliceable, __pyx_v_schema); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8346, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_col_names = __pyx_t_3; __pyx_t_3 = 0;
+08347: if col_names is None:
__pyx_t_1 = (__pyx_v_col_names == Py_None);
if (__pyx_t_1) {
/* … */
}
+08348: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+08349: out = []
__pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8349, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_out = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0;
+08350: for entry in col_names:
if (likely(PyList_CheckExact(__pyx_v_col_names)) || PyTuple_CheckExact(__pyx_v_col_names)) { __pyx_t_3 = __pyx_v_col_names; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_col_names); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8350, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8350, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_5)) { if (likely(PyList_CheckExact(__pyx_t_3))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8350, __pyx_L1_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } __pyx_t_6 = __Pyx_PyList_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, 8350, __pyx_L1_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_6 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4)); #else __pyx_t_6 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4); #endif ++__pyx_t_4; } if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8350, __pyx_L1_error) } else { __pyx_t_6 = __pyx_t_5(__pyx_t_3); if (unlikely(!__pyx_t_6)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 8350, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_6); __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_6); __pyx_t_6 = 0; /* … */ } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+08351: out.append((entry.encode('utf-8'), not_symbol_kind, 0))
__pyx_t_7 = __pyx_v_entry;
__Pyx_INCREF(__pyx_t_7);
__pyx_t_8 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_utf_8};
__pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8351, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
}
__pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_not_symbol_kind); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8351, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8351, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_GIVEREF(__pyx_t_6);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_6) != (0)) __PYX_ERR(0, 8351, __pyx_L1_error);
__Pyx_GIVEREF(__pyx_t_7);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_7) != (0)) __PYX_ERR(0, 8351, __pyx_L1_error);
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_0);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_mstate_global->__pyx_int_0) != (0)) __PYX_ERR(0, 8351, __pyx_L1_error);
__pyx_t_6 = 0;
__pyx_t_7 = 0;
__pyx_t_10 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_9); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 8351, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+08352: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
08353:
+08354: if symbols is True:
__pyx_t_1 = (__pyx_v_symbols == Py_True);
if (__pyx_t_1) {
/* … */
}
+08355: col_names = _capsule_get_string_column_names(sliceable, schema)
__pyx_t_3 = __pyx_f_7questdb_7_client__capsule_get_string_column_names(__pyx_v_sliceable, __pyx_v_schema); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8355, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_col_names = __pyx_t_3; __pyx_t_3 = 0;
+08356: if col_names is None:
__pyx_t_1 = (__pyx_v_col_names == Py_None);
if (__pyx_t_1) {
/* … */
}
+08357: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+08358: out = []
__pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8358, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_out = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0;
+08359: for entry in col_names:
if (likely(PyList_CheckExact(__pyx_v_col_names)) || PyTuple_CheckExact(__pyx_v_col_names)) { __pyx_t_3 = __pyx_v_col_names; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_col_names); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8359, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8359, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_5)) { if (likely(PyList_CheckExact(__pyx_t_3))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8359, __pyx_L1_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } __pyx_t_9 = __Pyx_PyList_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, 8359, __pyx_L1_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_9 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4)); #else __pyx_t_9 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4); #endif ++__pyx_t_4; } if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8359, __pyx_L1_error) } else { __pyx_t_9 = __pyx_t_5(__pyx_t_3); if (unlikely(!__pyx_t_9)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 8359, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_9); __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_9); __pyx_t_9 = 0; /* … */ } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+08360: out.append((entry.encode('utf-8'), symbol_kind, 0))
__pyx_t_7 = __pyx_v_entry;
__Pyx_INCREF(__pyx_t_7);
__pyx_t_8 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_utf_8};
__pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8360, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
}
__pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_symbol_kind); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8360, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8360, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_GIVEREF(__pyx_t_9);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_9) != (0)) __PYX_ERR(0, 8360, __pyx_L1_error);
__Pyx_GIVEREF(__pyx_t_7);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_7) != (0)) __PYX_ERR(0, 8360, __pyx_L1_error);
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_0);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_mstate_global->__pyx_int_0) != (0)) __PYX_ERR(0, 8360, __pyx_L1_error);
__pyx_t_9 = 0;
__pyx_t_7 = 0;
__pyx_t_10 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_6); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 8360, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+08361: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
08362:
+08363: if not isinstance(symbols, (list, tuple)):
__pyx_t_2 = PyList_Check(__pyx_v_symbols); if (!__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L17_bool_binop_done; } __pyx_t_2 = PyTuple_Check(__pyx_v_symbols); __pyx_t_1 = __pyx_t_2; __pyx_L17_bool_binop_done:; __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+08364: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
08365:
+08366: out = []
__pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8366, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_out = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0;
+08367: col_names = None
__Pyx_INCREF(Py_None);
__pyx_v_col_names = Py_None;
+08368: listed = set()
__pyx_t_3 = PySet_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8368, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_listed = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0;
+08369: for entry in symbols:
if (likely(PyList_CheckExact(__pyx_v_symbols)) || PyTuple_CheckExact(__pyx_v_symbols)) { __pyx_t_3 = __pyx_v_symbols; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_symbols); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8369, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8369, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_5)) { if (likely(PyList_CheckExact(__pyx_t_3))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8369, __pyx_L1_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } __pyx_t_6 = __Pyx_PyList_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, 8369, __pyx_L1_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_6 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4)); #else __pyx_t_6 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4); #endif ++__pyx_t_4; } if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8369, __pyx_L1_error) } else { __pyx_t_6 = __pyx_t_5(__pyx_t_3); if (unlikely(!__pyx_t_6)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 8369, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_6); __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_6); __pyx_t_6 = 0; /* … */ } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+08370: if isinstance(entry, str):
__pyx_t_2 = PyUnicode_Check(__pyx_v_entry);
if (__pyx_t_2) {
/* … */
goto __pyx_L21;
}
+08371: name = entry
__Pyx_INCREF(__pyx_v_entry); __Pyx_XDECREF_SET(__pyx_v_name, __pyx_v_entry);
+08372: elif isinstance(entry, int):
__pyx_t_2 = PyLong_Check(__pyx_v_entry);
if (likely(__pyx_t_2)) {
/* … */
goto __pyx_L21;
}
+08373: if col_names is None:
__pyx_t_2 = (__pyx_v_col_names == Py_None);
if (__pyx_t_2) {
/* … */
}
+08374: col_names = _capsule_get_column_names(sliceable)
__pyx_t_6 = __pyx_f_7questdb_7_client__capsule_get_column_names(__pyx_v_sliceable); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8374, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF_SET(__pyx_v_col_names, __pyx_t_6); __pyx_t_6 = 0;
+08375: if col_names is None:
__pyx_t_2 = (__pyx_v_col_names == Py_None);
if (__pyx_t_2) {
/* … */
}
+08376: return None
{
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;
+08377: idx = <int>entry
__pyx_t_11 = __Pyx_PyLong_As_int(__pyx_v_entry); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8377, __pyx_L1_error) __pyx_v_idx = ((int)__pyx_t_11);
+08378: if idx < 0:
__pyx_t_2 = (__pyx_v_idx < 0);
if (__pyx_t_2) {
/* … */
}
+08379: idx += len(col_names)
__pyx_t_12 = PyObject_Length(__pyx_v_col_names); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(0, 8379, __pyx_L1_error) __pyx_v_idx = (__pyx_v_idx + __pyx_t_12);
+08380: if idx < 0 or idx >= len(col_names):
__pyx_t_1 = (__pyx_v_idx < 0);
if (!__pyx_t_1) {
} else {
__pyx_t_2 = __pyx_t_1;
goto __pyx_L26_bool_binop_done;
}
__pyx_t_12 = PyObject_Length(__pyx_v_col_names); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(0, 8380, __pyx_L1_error)
__pyx_t_1 = (__pyx_v_idx >= __pyx_t_12);
__pyx_t_2 = __pyx_t_1;
__pyx_L26_bool_binop_done:;
if (unlikely(__pyx_t_2)) {
/* … */
}
+08381: raise ValueError(
__pyx_t_7 = NULL;
+08382: f'symbols index {entry} out of range '
__pyx_t_9 = __Pyx_PyObject_FormatSimple(__pyx_v_entry, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8382, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); /* … */ __pyx_t_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, 8382, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __pyx_t_8 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_15}; __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8381, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); } __Pyx_Raise(__pyx_t_6, 0, 0, 0); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __PYX_ERR(0, 8381, __pyx_L1_error)
+08383: f'(have {len(col_names)} columns).')
__pyx_t_12 = PyObject_Length(__pyx_v_col_names); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(0, 8383, __pyx_L1_error) __pyx_t_13 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_12, 0, ' ', 'd'); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 8383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14[0] = __pyx_mstate_global->__pyx_kp_u_symbols_index; __pyx_t_14[1] = __pyx_t_9; __pyx_t_14[2] = __pyx_mstate_global->__pyx_kp_u_out_of_range_have; __pyx_t_14[3] = __pyx_t_13; __pyx_t_14[4] = __pyx_mstate_global->__pyx_kp_u_columns_4;
+08384: name = col_names[idx]
__pyx_t_6 = __Pyx_GetItemInt(__pyx_v_col_names, __pyx_v_idx, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8384, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_6); __pyx_t_6 = 0;
08385: else:
+08386: raise TypeError(
/*else*/ {
__pyx_t_15 = NULL;
+08387: f'symbols entry must be str or int, got '
__pyx_t_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, 8387, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
__pyx_t_8 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_t_7};
__pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8386, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
}
__Pyx_Raise(__pyx_t_6, 0, 0, 0);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__PYX_ERR(0, 8386, __pyx_L1_error)
}
__pyx_L21:;
+08388: f'{type(entry).__name__}.')
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_entry)), __pyx_mstate_global->__pyx_n_u_name_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8388, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_13 = __Pyx_PyObject_FormatSimple(__pyx_t_7, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 8388, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_16[0] = __pyx_mstate_global->__pyx_kp_u_symbols_entry_must_be_str_or_int; __pyx_t_16[1] = __pyx_t_13; __pyx_t_16[2] = __pyx_mstate_global->__pyx_kp_u__3;
+08389: is_str = _capsule_column_is_string_like(sliceable, schema, name)
__pyx_t_6 = __pyx_v_name;
__Pyx_INCREF(__pyx_t_6);
if (!(likely(PyUnicode_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_6))) __PYX_ERR(0, 8389, __pyx_L1_error)
__pyx_t_7 = __pyx_f_7questdb_7_client__capsule_column_is_string_like(__pyx_v_sliceable, __pyx_v_schema, ((PyObject*)__pyx_t_6)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8389, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF_SET(__pyx_v_is_str, __pyx_t_7);
__pyx_t_7 = 0;
+08390: if is_str is None:
__pyx_t_2 = (__pyx_v_is_str == Py_None);
if (__pyx_t_2) {
/* … */
}
+08391: return None
{
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;
+08392: if not is_str:
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_is_str); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8392, __pyx_L1_error) __pyx_t_1 = (!__pyx_t_2); if (unlikely(__pyx_t_1)) { /* … */ }
+08393: raise QuestDBError(
__pyx_t_6 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 8393, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_15);
+08394: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 8394, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8394, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+08395: f'Bad argument `symbols`: column {name!r} is not a '
__pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 8395, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_16[0] = __pyx_mstate_global->__pyx_kp_u_Bad_argument_symbols_column; __pyx_t_16[1] = __pyx_t_13; __pyx_t_16[2] = __pyx_mstate_global->__pyx_kp_u_is_not_a_strings_column; __pyx_t_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, 8395, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_15))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_15); assert(__pyx_t_6); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_15); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_15, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_9, __pyx_t_17}; __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_15, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8393, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __Pyx_Raise(__pyx_t_7, 0, 0, 0); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __PYX_ERR(0, 8393, __pyx_L1_error)
08396: f'strings column.')
+08397: listed.add(name)
__pyx_t_10 = PySet_Add(__pyx_v_listed, __pyx_v_name); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 8397, __pyx_L1_error)
+08398: out.append((name.encode('utf-8'), symbol_kind, 0))
__pyx_t_15 = __pyx_v_name;
__Pyx_INCREF(__pyx_t_15);
__pyx_t_8 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_mstate_global->__pyx_kp_u_utf_8};
__pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8398, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
}
__pyx_t_15 = __Pyx_PyLong_From_int(__pyx_v_symbol_kind); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 8398, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_15);
__pyx_t_17 = PyTuple_New(3); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8398, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
__Pyx_GIVEREF(__pyx_t_7);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_7) != (0)) __PYX_ERR(0, 8398, __pyx_L1_error);
__Pyx_GIVEREF(__pyx_t_15);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_17, 1, __pyx_t_15) != (0)) __PYX_ERR(0, 8398, __pyx_L1_error);
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_0);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_17, 2, __pyx_mstate_global->__pyx_int_0) != (0)) __PYX_ERR(0, 8398, __pyx_L1_error);
__pyx_t_7 = 0;
__pyx_t_15 = 0;
__pyx_t_10 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_17); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 8398, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
08399:
08400: # Match the row/numpy planner: an explicit symbols list marks only the
08401: # listed columns as symbols; every other dict-encoded (categorical)
08402: # column is forced to a plain VARCHAR field rather than auto-symbolized.
+08403: dict_names = _capsule_get_dict_string_column_names(sliceable, schema)
__pyx_t_3 = __pyx_f_7questdb_7_client__capsule_get_dict_string_column_names(__pyx_v_sliceable, __pyx_v_schema); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8403, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_dict_names = __pyx_t_3; __pyx_t_3 = 0;
+08404: if dict_names is None:
__pyx_t_1 = (__pyx_v_dict_names == Py_None);
if (__pyx_t_1) {
/* … */
}
+08405: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+08406: for name in dict_names:
if (likely(PyList_CheckExact(__pyx_v_dict_names)) || PyTuple_CheckExact(__pyx_v_dict_names)) { __pyx_t_3 = __pyx_v_dict_names; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_dict_names); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8406, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8406, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_5)) { if (likely(PyList_CheckExact(__pyx_t_3))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8406, __pyx_L1_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } __pyx_t_17 = __Pyx_PyList_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, 8406, __pyx_L1_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_17 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4)); #else __pyx_t_17 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4); #endif ++__pyx_t_4; } if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8406, __pyx_L1_error) } else { __pyx_t_17 = __pyx_t_5(__pyx_t_3); if (unlikely(!__pyx_t_17)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 8406, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_17); __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_17); __pyx_t_17 = 0; /* … */ } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+08407: if name not in listed:
__pyx_t_1 = (__Pyx_PySet_ContainsTF(__pyx_v_name, __pyx_v_listed, Py_NE)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8407, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+08408: out.append((name.encode('utf-8'), not_symbol_kind, 0))
__pyx_t_15 = __pyx_v_name;
__Pyx_INCREF(__pyx_t_15);
__pyx_t_8 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_mstate_global->__pyx_kp_u_utf_8};
__pyx_t_17 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8408, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
}
__pyx_t_15 = __Pyx_PyLong_From_int(__pyx_v_not_symbol_kind); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 8408, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_15);
__pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8408, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_GIVEREF(__pyx_t_17);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_17) != (0)) __PYX_ERR(0, 8408, __pyx_L1_error);
__Pyx_GIVEREF(__pyx_t_15);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_15) != (0)) __PYX_ERR(0, 8408, __pyx_L1_error);
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_0);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_mstate_global->__pyx_int_0) != (0)) __PYX_ERR(0, 8408, __pyx_L1_error);
__pyx_t_17 = 0;
__pyx_t_15 = 0;
__pyx_t_10 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_7); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 8408, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+08409: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
08410:
08411:
+08412: cdef object _merge_capsule_overrides(
static PyObject *__pyx_f_7questdb_7_client__merge_capsule_overrides(PyObject *__pyx_v_weaker, PyObject *__pyx_v_stronger) {
PyObject *__pyx_v_stronger_names = 0;
PyObject *__pyx_v_merged = 0;
PyObject *__pyx_v_entry = 0;
PyObject *__pyx_9genexpr22__pyx_v_entry = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client._merge_capsule_overrides", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_stronger_names);
__Pyx_XDECREF(__pyx_v_merged);
__Pyx_XDECREF(__pyx_v_entry);
__Pyx_XDECREF(__pyx_9genexpr22__pyx_v_entry);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08413: object weaker, object stronger):
08414: """Merge two override lists, `stronger` winning on name collision.
08415:
08416: The three sources rank: `schema_overrides` states a type outright,
08417: `symbols` states one for string columns, and `df.attrs['questdb']`
08418: only recalls what a column held when it was read back out of
08419: QuestDB.
08420: """
08421: cdef set stronger_names
08422: cdef list merged
08423: cdef object entry
+08424: if not weaker and stronger is None:
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_weaker); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8424, __pyx_L1_error) __pyx_t_3 = (!__pyx_t_2); if (__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; goto __pyx_L4_bool_binop_done; } __pyx_t_3 = (__pyx_v_stronger == Py_None); __pyx_t_1 = __pyx_t_3; __pyx_L4_bool_binop_done:; if (__pyx_t_1) { /* … */ }
+08425: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+08426: if not weaker:
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_weaker); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8426, __pyx_L1_error) __pyx_t_3 = (!__pyx_t_1); if (__pyx_t_3) { /* … */ }
+08427: return stronger
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_stronger);
__pyx_r = __pyx_v_stronger;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+08428: if stronger is None:
__pyx_t_3 = (__pyx_v_stronger == Py_None);
if (__pyx_t_3) {
/* … */
}
+08429: 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;
+08430: stronger_names = {entry[0] for entry in stronger}
{ /* enter inner scope */
__pyx_t_4 = PySet_New(NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8430, __pyx_L10_error)
__Pyx_GOTREF(__pyx_t_4);
if (likely(PyList_CheckExact(__pyx_v_stronger)) || PyTuple_CheckExact(__pyx_v_stronger)) {
__pyx_t_5 = __pyx_v_stronger; __Pyx_INCREF(__pyx_t_5);
__pyx_t_6 = 0;
__pyx_t_7 = NULL;
} else {
__pyx_t_6 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_stronger); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8430, __pyx_L10_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8430, __pyx_L10_error)
}
for (;;) {
if (likely(!__pyx_t_7)) {
if (likely(PyList_CheckExact(__pyx_t_5))) {
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_5);
#if !CYTHON_ASSUME_SAFE_SIZE
if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8430, __pyx_L10_error)
#endif
if (__pyx_t_6 >= __pyx_temp) break;
}
__pyx_t_8 = __Pyx_PyList_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, 8430, __pyx_L10_error)
#endif
if (__pyx_t_6 >= __pyx_temp) break;
}
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
__pyx_t_8 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_6));
#else
__pyx_t_8 = __Pyx_PySequence_ITEM(__pyx_t_5, __pyx_t_6);
#endif
++__pyx_t_6;
}
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8430, __pyx_L10_error)
} else {
__pyx_t_8 = __pyx_t_7(__pyx_t_5);
if (unlikely(!__pyx_t_8)) {
PyObject* exc_type = PyErr_Occurred();
if (exc_type) {
if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 8430, __pyx_L10_error)
PyErr_Clear();
}
break;
}
}
__Pyx_GOTREF(__pyx_t_8);
__Pyx_XDECREF_SET(__pyx_9genexpr22__pyx_v_entry, __pyx_t_8);
__pyx_t_8 = 0;
__pyx_t_8 = __Pyx_GetItemInt(__pyx_9genexpr22__pyx_v_entry, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8430, __pyx_L10_error)
__Pyx_GOTREF(__pyx_t_8);
if (unlikely(PySet_Add(__pyx_t_4, __pyx_t_8))) __PYX_ERR(0, 8430, __pyx_L10_error)
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_9genexpr22__pyx_v_entry); __pyx_9genexpr22__pyx_v_entry = 0;
goto __pyx_L14_exit_scope;
__pyx_L10_error:;
__Pyx_XDECREF(__pyx_9genexpr22__pyx_v_entry); __pyx_9genexpr22__pyx_v_entry = 0;
goto __pyx_L1_error;
__pyx_L14_exit_scope:;
} /* exit inner scope */
__pyx_v_stronger_names = ((PyObject*)__pyx_t_4);
__pyx_t_4 = 0;
+08431: merged = list(stronger)
__pyx_t_4 = PySequence_List(__pyx_v_stronger); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8431, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_merged = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0;
+08432: for entry in weaker:
if (likely(PyList_CheckExact(__pyx_v_weaker)) || PyTuple_CheckExact(__pyx_v_weaker)) { __pyx_t_4 = __pyx_v_weaker; __Pyx_INCREF(__pyx_t_4); __pyx_t_6 = 0; __pyx_t_7 = NULL; } else { __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_weaker); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8432, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8432, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_7)) { if (likely(PyList_CheckExact(__pyx_t_4))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8432, __pyx_L1_error) #endif if (__pyx_t_6 >= __pyx_temp) break; } __pyx_t_5 = __Pyx_PyList_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, 8432, __pyx_L1_error) #endif if (__pyx_t_6 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_5 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6)); #else __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_6); #endif ++__pyx_t_6; } if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8432, __pyx_L1_error) } else { __pyx_t_5 = __pyx_t_7(__pyx_t_4); if (unlikely(!__pyx_t_5)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 8432, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_5); __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_5); __pyx_t_5 = 0; /* … */ } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+08433: if entry[0] not in stronger_names:
__pyx_t_5 = __Pyx_GetItemInt(__pyx_v_entry, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8433, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = (__Pyx_PySet_ContainsTF(__pyx_t_5, __pyx_v_stronger_names, Py_NE)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 8433, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_3) { /* … */ }
+08434: merged.append(entry)
__pyx_t_9 = __Pyx_PyList_Append(__pyx_v_merged, __pyx_v_entry); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 8434, __pyx_L1_error)
+08435: return merged
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_merged);
__pyx_r = __pyx_v_merged;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
08436:
08437:
08438: # `df.attrs['questdb']` column kinds that an Arrow override can restore.
08439: # The other kinds either survive on their storage type alone (VARCHAR,
08440: # SYMBOL, TIMESTAMP, ...) or have no override to restore them with
08441: # (BYTE / SHORT / INT, which the Arrow classifier widens). DATE is the
08442: # one kind restored by reshaping the column rather than by an override,
08443: # in `_dataframe_normalize_claimed_date`: no Arrow override names it,
08444: # and the Arrow type it needs is the whole claim.
08445: #: How long `QuestDB.close()` with no `timeout` waits while a lease is
08446: #: outstanding before it stops waiting and raises. Generous, because a
08447: #: lease held by another thread may be part-way through a large load
08448: #: and that wait is the correct one; finite, because a lease held by
08449: #: the calling thread, or by one that has since finished, is never
08450: #: coming back and an unbounded wait there is a hang with no way out.
08451: #: Hitting the bound leaves the handle closing; a later `close()`
08452: #: resumes the wait. A `close()` with no `timeout` puts no bound on
08453: #: calls in progress: a caller whose calls may never finish passes one.
+08454: cdef double _CLOSE_LEASE_WAIT_LIMIT_S = 60.0
__pyx_v_7questdb_7_client__CLOSE_LEASE_WAIT_LIMIT_S = 60.0;
08455:
08456:
+08457: class _CloseTimeoutDefault:
__pyx_t_18 = __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_18)) __PYX_ERR(0, 8457, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); /* … */ __pyx_t_20 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_mstate_global->__pyx_n_u_CloseTimeoutDefault, __pyx_mstate_global->__pyx_empty_tuple, __pyx_t_18, NULL, 0, 0); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 8457, __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_CloseTimeoutDefault, __pyx_t_20) < (0)) __PYX_ERR(0, 8457, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
08458: """What `QuestDB.close()` gets when no `timeout` is passed.
08459:
08460: `None` already means "no limit", so the default -- the lease bound
08461: above and no bound on calls -- needs a value of its own.
08462: """
+08463: __slots__ = ()
if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_slots, __pyx_mstate_global->__pyx_empty_tuple) < (0)) __PYX_ERR(0, 8463, __pyx_L1_error)
08464:
+08465: def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_20_CloseTimeoutDefault_1__repr__(PyObject *__pyx_self,
#if CYTHON_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, 8465, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 8465, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__repr__", 0) < (0)) __PYX_ERR(0, 8465, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__repr__", 1, 1, 1, i); __PYX_ERR(0, 8465, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 1)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 8465, __pyx_L3_error)
}
__pyx_v_self = values[0];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__repr__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 8465, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client._CloseTimeoutDefault.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_20_CloseTimeoutDefault___repr__(__pyx_self, __pyx_v_self);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_20_CloseTimeoutDefault___repr__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_20_CloseTimeoutDefault_1__repr__, 0, __pyx_mstate_global->__pyx_n_u_CloseTimeoutDefault___repr, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[207])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 8465, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_20);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20);
#endif
if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_repr, __pyx_t_20) < (0)) __PYX_ERR(0, 8465, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+08466: 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;
08467:
08468:
+08469: _CLOSE_TIMEOUT_DEFAULT = _CloseTimeoutDefault()
__pyx_t_20 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_CloseTimeoutDefault); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 8469, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_20, NULL}; __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_25, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 8469, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); } if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_CLOSE_TIMEOUT_DEFAULT, __pyx_t_18) < (0)) __PYX_ERR(0, 8469, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
08470:
08471:
+08472: cdef double _close_timeout_seconds(object timeout) except -1.0:
static double __pyx_f_7questdb_7_client__close_timeout_seconds(PyObject *__pyx_v_timeout) {
double __pyx_v_seconds;
double __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client._close_timeout_seconds", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = (-1.0);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08473: """`QuestDB.close()`'s `timeout` as seconds, refused unless it is a
08474: number of seconds, 0 or more."""
08475: cdef double seconds
+08476: if isinstance(timeout, bool) or not isinstance(timeout, _numbers.Real):
__pyx_t_2 = __Pyx_TypeCheck(__pyx_v_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); if (!__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L4_bool_binop_done; } __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_numbers); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8476, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Real); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8476, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_2 = PyObject_IsInstance(__pyx_v_timeout, __pyx_t_4); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8476, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = (!__pyx_t_2); __pyx_t_1 = __pyx_t_5; __pyx_L4_bool_binop_done:; if (unlikely(__pyx_t_1)) { /* … */ }
+08477: raise TypeError(
__pyx_t_3 = NULL;
+08478: 'close() timeout must be None or a number of seconds, not '
__pyx_t_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, 8478, __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, 8477, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 8477, __pyx_L1_error)
+08479: f'{_fqn(type(timeout))}.')
__pyx_t_6 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_timeout)))); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8479, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8479, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_close_timeout_must_be_None_or_a; __pyx_t_8[1] = __pyx_t_7; __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u__3;
+08480: 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, 8480, __pyx_L1_error) __pyx_v_seconds = __pyx_t_12;
08481: # Written so that NaN, which compares false either way, is refused.
+08482: if not seconds >= 0.0:
__pyx_t_1 = (!(__pyx_v_seconds >= 0.0));
if (unlikely(__pyx_t_1)) {
/* … */
}
+08483: raise ValueError(
__pyx_t_6 = NULL;
+08484: 'close() timeout must be a number of seconds, 0 or more, '
__pyx_t_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, 8484, __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, 8483, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 8483, __pyx_L1_error)
+08485: f'not {timeout!r}.')
__pyx_t_3 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_timeout), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8485, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_close_timeout_must_be_a_number_o; __pyx_t_8[1] = __pyx_t_3; __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u__3;
+08486: return seconds
{
__pyx_r = __pyx_v_seconds;
}
goto __pyx_L0;
08487:
08488:
+08489: cdef str _close_gave_up_message(
static PyObject *__pyx_f_7questdb_7_client__close_gave_up_message(double __pyx_v_waited, size_t __pyx_v_leases, size_t __pyx_v_calls) {
PyObject *__pyx_v_message = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_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;
}
08490: double waited, size_t leases, size_t calls):
08491: """What a `close()` that ran out of time says it left behind."""
08492: cdef str message = (
+08493: f'close() stopped waiting after {waited:g}s: {leases} '
__pyx_t_1 = __Pyx_PyUnicode_FromDouble(__pyx_v_waited, 'g', 6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8493, __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, 8493, __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, 8493, __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;
08494: 'outstanding sender()/reader() lease(s) and '
+08495: f'{calls} call(s) in progress on this handle.')
__pyx_t_3 = __Pyx_PyUnicode_From_size_t(__pyx_v_calls, 0, ' ', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8495, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4[0] = __pyx_mstate_global->__pyx_kp_u_close_stopped_waiting_after; __pyx_t_4[1] = __pyx_t_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;
+08496: if leases:
__pyx_t_8 = (__pyx_v_leases != 0);
if (__pyx_t_8) {
/* … */
}
+08497: 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, 8497, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF_SET(__pyx_v_message, ((PyObject*)__pyx_t_7)); __pyx_t_7 = 0;
08498: ' A lease is returned only by the code holding it -- one '
08499: 'held by this thread, or by a thread that has finished, '
08500: 'never will be.')
+08501: if calls:
__pyx_t_8 = (__pyx_v_calls != 0);
if (__pyx_t_8) {
/* … */
}
+08502: 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, 8502, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF_SET(__pyx_v_message, ((PyObject*)__pyx_t_7)); __pyx_t_7 = 0;
08503: " A call in progress returns once its work is done; close() "
08504: "can't interrupt it.")
+08505: 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, 8505, __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;
08506: ' The handle stays closing and takes no new work. Call close() '
08507: 'again once nothing is outstanding, or with a larger timeout -- '
08508: 'timeout=None waits without a limit.')
08509:
08510:
+08511: cdef bint _in_bounded_wait_callback() except -1:
static int __pyx_f_7questdb_7_client__in_bounded_wait_callback(void) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client._in_bounded_wait_callback", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
return __pyx_r;
}
08512: """Whether a wait made on this thread must be bounded, because a lease
08513: or a call on another thread may be waiting for this thread to return: it
08514: is inside an OIDC renderer or persistence-warning callback, whose
08515: provider cannot supply a token until the callback returns, or inside a
08516: ``bearer_token_provider=`` call, which is the token request itself.
08517:
08518: Only the caller's own callback counts: on the main thread, another
08519: greenlet suspended inside a token callback does not make this one's
08520: waits bounded."""
+08521: return (_oidc_callback_on_this_thread()
__pyx_t_2 = __pyx_f_7questdb_7_client__oidc_callback_on_this_thread(); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8521, __pyx_L1_error)
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L3_bool_binop_done;
}
+08522: or _token_callback_in_this_context())
__pyx_t_2 = __pyx_f_7questdb_7_client__token_callback_in_this_context();
__pyx_t_1 = __pyx_t_2;
__pyx_L3_bool_binop_done:;
{
__pyx_r = __pyx_t_1;
}
goto __pyx_L0;
08523:
08524:
+08525: cdef str _bounded_wait_callback_name():
static PyObject *__pyx_f_7questdb_7_client__bounded_wait_callback_name(void) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client._bounded_wait_callback_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08526: """The callback `_in_bounded_wait_callback` found, for messages."""
+08527: if _oidc_callback_on_this_thread():
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_callback_on_this_thread(); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 8527, __pyx_L1_error)
if (__pyx_t_1) {
/* … */
}
+08528: return 'an OIDC callback'
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_an_OIDC_callback);
__pyx_r = __pyx_mstate_global->__pyx_kp_u_an_OIDC_callback;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+08529: return 'a token-provider callback'
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_a_token_provider_callback);
__pyx_r = __pyx_mstate_global->__pyx_kp_u_a_token_provider_callback;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
08530:
08531:
+08532: cdef object _callback_wait_refused(str message):
static PyObject *__pyx_f_7questdb_7_client__callback_wait_refused(PyObject *__pyx_v_message) {
PyObject *__pyx_v_exc = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client._callback_wait_refused", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08533: """The `InvalidApiCall` a bounded wait inside such a callback raises.
08534:
08535: Marked so that, if it escapes a ``bearer_token_provider=``'s
08536: ``token()``, it counts as a retryable failure rather than the terminal
08537: stop an `InvalidApiCall` from a provider otherwise means: the lease or
08538: pool it gave up on is busy, not broken (see `_tp_sink_exception`)."""
+08539: cdef object exc = QuestDBError(QuestDBErrorCode.InvalidApiCall, message)
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8539, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8539, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8539, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_5, __pyx_v_message}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8539, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_exc = __pyx_t_1; __pyx_t_1 = 0;
+08540: exc._callback_wait_refused = True
if (__Pyx_PyObject_SetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_callback_wait_refused, Py_True) < (0)) __PYX_ERR(0, 8540, __pyx_L1_error)
+08541: return exc
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_exc);
__pyx_r = __pyx_v_exc;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
08542:
08543:
+08544: cdef str _close_callback_gave_up_message(
static PyObject *__pyx_f_7questdb_7_client__close_callback_gave_up_message(int __pyx_v_concurrent, size_t __pyx_v_leases, size_t __pyx_v_calls) {
PyObject *__pyx_v_message = 0;
PyObject *__pyx_v_callback = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client._close_callback_gave_up_message", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_message);
__Pyx_XDECREF(__pyx_v_callback);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08545: bint concurrent, size_t leases, size_t calls):
08546: """What a `close()` called from inside such a callback says when its
08547: bounded wait runs out. `concurrent` says another `close()` had already
08548: started, and that close is left to finish the teardown."""
08549: cdef str message
+08550: cdef str callback = _bounded_wait_callback_name()
__pyx_t_1 = __pyx_f_7questdb_7_client__bounded_wait_callback_name(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8550, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_callback = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
+08551: if concurrent:
if (__pyx_v_concurrent) {
/* … */
}
08552: return (
+08553: 'QuestDB.close() cannot wait for a concurrent close() on '
__pyx_t_3 = 220;
#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;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_4 |= __Pyx_PyUnicode_KIND_04(__pyx_t_2[1]);
#endif
__pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_3, __pyx_t_4);
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8553, __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 = ((PyObject*)__pyx_t_5);
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_5 = 0;
goto __pyx_L0;
+08554: f'another thread inside {callback}: that close may be '
__pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_v_callback); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8554, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2[0] = __pyx_mstate_global->__pyx_kp_u_QuestDB_close_cannot_wait_for_a; __pyx_t_2[1] = __pyx_t_1; __pyx_t_2[2] = __pyx_mstate_global->__pyx_kp_u_that_close_may_be_waiting_for_a;
08555: 'waiting for a lease that needs this callback to return. '
08556: 'Return from the callback; the other close() finishes the '
08557: 'teardown.')
08558: message = (
+08559: f'QuestDB.close() cannot wait for {leases} outstanding lease(s) '
__pyx_t_5 = __Pyx_PyUnicode_From_size_t(__pyx_v_leases, 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8559, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); /* … */ __pyx_t_3 = 61; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6[3]); #endif __pyx_t_4 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_4 |= __Pyx_PyUnicode_KIND_04(__pyx_t_6[3]); #endif __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_6, 4, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8559, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_message = ((PyObject*)__pyx_t_7); __pyx_t_7 = 0;
+08560: f'inside {callback}')
__pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_v_callback); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8560, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_6[0] = __pyx_mstate_global->__pyx_kp_u_QuestDB_close_cannot_wait_for; __pyx_t_6[1] = __pyx_t_5; __pyx_t_6[2] = __pyx_mstate_global->__pyx_kp_u_outstanding_lease_s_inside; __pyx_t_6[3] = __pyx_t_1;
+08561: if calls:
__pyx_t_8 = (__pyx_v_calls != 0);
if (__pyx_t_8) {
/* … */
}
+08562: message += f', or for {calls} call(s) in progress on this handle'
__pyx_t_7 = __Pyx_PyUnicode_From_size_t(__pyx_v_calls, 0, ' ', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8562, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_2[0] = __pyx_mstate_global->__pyx_kp_u_or_for; __pyx_t_2[1] = __pyx_t_7; __pyx_t_2[2] = __pyx_mstate_global->__pyx_kp_u_call_s_in_progress_on_this_hand_2; __pyx_t_3 = 44; #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_1 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8562, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_v_message, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8562, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_message, ((PyObject*)__pyx_t_7)); __pyx_t_7 = 0;
+08563: return message + (
__pyx_t_7 = __Pyx_PyUnicode_Concat(__pyx_v_message, __pyx_mstate_global->__pyx_kp_u_other_threads_hold_them_and_may); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8563, __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;
08564: ': other threads hold them and may be waiting for this callback '
08565: 'to return. The handle stays closing and takes no new work; '
08566: 'return from the callback and call close() again to finish the '
08567: 'teardown.')
08568:
08569:
+08570: def _debug_close_lease_wait_limit_s():
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_117_debug_close_lease_wait_limit_s(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_116_debug_close_lease_wait_limit_s, "The bound `QuestDB.close()` puts on waiting for leases.\n\n Not part of the public API. Exposed so a test can reach the give-up\n path in a second rather than a minute; the bound is deliberately\n longer than any wait worth testing.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_117_debug_close_lease_wait_limit_s = {"_debug_close_lease_wait_limit_s", (PyCFunction)__pyx_pw_7questdb_7_client_117_debug_close_lease_wait_limit_s, METH_NOARGS, __pyx_doc_7questdb_7_client_116_debug_close_lease_wait_limit_s}; static PyObject *__pyx_pw_7questdb_7_client_117_debug_close_lease_wait_limit_s(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_debug_close_lease_wait_limit_s (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_7questdb_7_client_116_debug_close_lease_wait_limit_s(__pyx_self); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_116_debug_close_lease_wait_limit_s(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("questdb._client._debug_close_lease_wait_limit_s", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_117_debug_close_lease_wait_limit_s, 0, __pyx_mstate_global->__pyx_n_u_debug_close_lease_wait_limit_s, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[208])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 8570, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_close_lease_wait_limit_s, __pyx_t_18) < (0)) __PYX_ERR(0, 8570, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
08571: """The bound `QuestDB.close()` puts on waiting for leases.
08572:
08573: Not part of the public API. Exposed so a test can reach the give-up
08574: path in a second rather than a minute; the bound is deliberately
08575: longer than any wait worth testing.
08576: """
+08577: return _CLOSE_LEASE_WAIT_LIMIT_S
__pyx_t_1 = PyFloat_FromDouble(__pyx_v_7questdb_7_client__CLOSE_LEASE_WAIT_LIMIT_S); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8577, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
08578:
08579:
+08580: def _debug_set_close_lease_wait_limit_s(double seconds):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_119_debug_set_close_lease_wait_limit_s(PyObject *__pyx_self, #if CYTHON_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_118_debug_set_close_lease_wait_limit_s, "Set the bound above. Not part of the public API."); static PyMethodDef __pyx_mdef_7questdb_7_client_119_debug_set_close_lease_wait_limit_s = {"_debug_set_close_lease_wait_limit_s", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_119_debug_set_close_lease_wait_limit_s, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_118_debug_set_close_lease_wait_limit_s}; static PyObject *__pyx_pw_7questdb_7_client_119_debug_set_close_lease_wait_limit_s(PyObject *__pyx_self, #if CYTHON_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, 8580, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 8580, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_set_close_lease_wait_limit_s", 0) < (0)) __PYX_ERR(0, 8580, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_set_close_lease_wait_limit_s", 1, 1, 1, i); __PYX_ERR(0, 8580, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 8580, __pyx_L3_error) } __pyx_v_seconds = __Pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_seconds == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 8580, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_debug_set_close_lease_wait_limit_s", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 8580, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client._debug_set_close_lease_wait_limit_s", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_118_debug_set_close_lease_wait_limit_s(__pyx_self, __pyx_v_seconds); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_118_debug_set_close_lease_wait_limit_s(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_seconds) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_119_debug_set_close_lease_wait_limit_s, 0, __pyx_mstate_global->__pyx_n_u_debug_set_close_lease_wait_limi, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[209])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 8580, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_set_close_lease_wait_limi, __pyx_t_18) < (0)) __PYX_ERR(0, 8580, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
08581: """Set the bound above. Not part of the public API."""
08582: global _CLOSE_LEASE_WAIT_LIMIT_S
+08583: _CLOSE_LEASE_WAIT_LIMIT_S = seconds
__pyx_v_7questdb_7_client__CLOSE_LEASE_WAIT_LIMIT_S = __pyx_v_seconds;
08584:
08585:
08586: cdef dict _ATTRS_OVERRIDE_KINDS = {
+08587: 'ipv4': <int>qwp_arrow_override_ipv4,
__pyx_t_18 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 8587, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_25 = __Pyx_PyLong_From_int(((int)qwp_arrow_override_ipv4)); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 8587, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_ipv4, __pyx_t_25) < (0)) __PYX_ERR(0, 8587, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
+08588: 'char': <int>qwp_arrow_override_char,
__pyx_t_25 = __Pyx_PyLong_From_int(((int)qwp_arrow_override_char)); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 8588, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_char_2, __pyx_t_25) < (0)) __PYX_ERR(0, 8587, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
+08589: 'uuid': <int>qwp_arrow_override_uuid,
__pyx_t_25 = __Pyx_PyLong_From_int(((int)qwp_arrow_override_uuid)); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 8589, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_uuid, __pyx_t_25) < (0)) __PYX_ERR(0, 8587, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
+08590: 'long256': <int>qwp_arrow_override_long256,
__pyx_t_25 = __Pyx_PyLong_From_int(((int)qwp_arrow_override_long256)); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 8590, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_long256, __pyx_t_25) < (0)) __PYX_ERR(0, 8587, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
+08591: 'geohash': <int>qwp_arrow_override_geohash,
__pyx_t_25 = __Pyx_PyLong_From_int(((int)qwp_arrow_override_geohash)); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 8591, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_geohash_2, __pyx_t_25) < (0)) __PYX_ERR(0, 8587, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 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_18)); __Pyx_GIVEREF(__pyx_t_18); __pyx_t_18 = 0;
08592: }
08593:
08594:
+08595: cdef object _capsule_pandas_dtype(object dtypes, object name):
static PyObject *__pyx_f_7questdb_7_client__capsule_pandas_dtype(PyObject *__pyx_v_dtypes, PyObject *__pyx_v_name) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client._capsule_pandas_dtype", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08596: """The pandas dtype of column `name`, or None where the frame has
08597: no such column.
08598:
08599: Takes the frame's `dtypes` rather than the frame: reading
08600: `frame.dtypes` builds a fresh Series every time, so looking it up
08601: per column was quadratic in the column count, on a path a streaming
08602: `iter_pandas` feeds per batch.
08603: """
+08604: try:
{
/*try:*/ {
/* … */
}
__pyx_L3_error:;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
__pyx_L5_except_error:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L1_error;
__pyx_L7_try_return:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L0;
__pyx_L6_except_return:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L0;
}
+08605: return dtypes[name]
__pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_dtypes, __pyx_v_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8605, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_4); { 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;
+08606: except Exception:
__pyx_t_5 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception)))); if (__pyx_t_5) { __Pyx_ErrRestore(0,0,0);
+08607: return None
{
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;
08608:
08609:
+08610: cdef object _capsule_arrow_type_of(object arrow_dtype, object dtype):
static PyObject *__pyx_f_7questdb_7_client__capsule_arrow_type_of(PyObject *__pyx_v_arrow_dtype, PyObject *__pyx_v_dtype) {
PyObject *__pyx_v_ty = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client._capsule_arrow_type_of", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_ty);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08611: """The Arrow storage type inside a pandas dtype, or None where the
08612: dtype holds none.
08613:
08614: A dtype with no Arrow type inside it is a real answer, separate
08615: from a column that is not in the frame: the column is there and
08616: cannot carry the claim. A pandas 3 string column reaches the
08617: capsule path this way, so the two have to be told apart.
08618:
08619: The caller has already established that `arrow_dtype` is a class,
08620: so a None here would be a third answer -- "cannot tell" -- that no
08621: caller is prepared to read.
08622: """
08623: cdef object ty
+08624: if arrow_dtype is None or not isinstance(dtype, arrow_dtype):
__pyx_t_2 = (__pyx_v_arrow_dtype == Py_None);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_v_arrow_dtype); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8624, __pyx_L1_error)
__pyx_t_3 = (!__pyx_t_2);
__pyx_t_1 = __pyx_t_3;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+08625: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+08626: ty = dtype.pyarrow_dtype
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_pyarrow_dtype); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8626, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_ty = __pyx_t_4; __pyx_t_4 = 0;
+08627: if isinstance(ty, _PYARROW.lib.BaseExtensionType):
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_lib); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8627, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_BaseExtensionType); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8627, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_1 = PyObject_IsInstance(__pyx_v_ty, __pyx_t_5); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 8627, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_1) { /* … */ }
+08628: ty = ty.storage_type
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_ty, __pyx_mstate_global->__pyx_n_u_storage_type); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8628, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF_SET(__pyx_v_ty, __pyx_t_5); __pyx_t_5 = 0;
+08629: return ty
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_ty);
__pyx_r = __pyx_v_ty;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
08630:
08631:
+08632: cdef bint _attrs_override_fits(
static int __pyx_f_7questdb_7_client__attrs_override_fits(PyObject *__pyx_v_types, PyObject *__pyx_v_ty, PyObject *__pyx_v_kind, PyObject *__pyx_v_bits) {
int __pyx_r;
__Pyx_INCREF(__pyx_v_bits);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._attrs_override_fits", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_bits);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08633: object types, object ty, str kind, object bits) except -1:
08634: """Whether the Arrow type can carry the claimed kind.
08635:
08636: Mirrors what the native client accepts, so a claim that no longer
08637: matches the column is dropped here instead of erroring there. UUID
08638: and LONG256 are held to their fixed widths: those are what the
08639: egress emits, and a variable-width binary claim would only be
08640: caught value by value at encode time.
08641:
08642: `types` is `pyarrow.types`, passed in so the caller reads it once
08643: for the whole frame rather than once per column.
08644: """
+08645: if kind == 'ipv4':
__pyx_t_1 = __Pyx_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, 8645, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+08646: return types.is_uint32(ty)
__pyx_t_3 = __pyx_v_types;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_uint32, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8646, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8646, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
{
__pyx_r = __pyx_t_1;
}
goto __pyx_L0;
+08647: if kind == 'char':
__pyx_t_1 = __Pyx_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, 8647, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+08648: return types.is_uint16(ty)
__pyx_t_3 = __pyx_v_types;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_uint16, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8648, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8648, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
{
__pyx_r = __pyx_t_1;
}
goto __pyx_L0;
+08649: if kind == 'uuid':
__pyx_t_1 = __Pyx_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, 8649, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+08650: return types.is_fixed_size_binary(ty) and ty.byte_width == 16
__pyx_t_3 = __pyx_v_types;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_fixed_size_binary, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8650, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 8650, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_5) {
} else {
__pyx_t_1 = __pyx_t_5;
goto __pyx_L6_bool_binop_done;
}
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_ty, __pyx_mstate_global->__pyx_n_u_byte_width); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8650, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_5 = (__Pyx_PyLong_BoolEqObjC(__pyx_t_2, __pyx_mstate_global->__pyx_int_16, 16, 0)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 8650, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_1 = __pyx_t_5;
__pyx_L6_bool_binop_done:;
{
__pyx_r = __pyx_t_1;
}
goto __pyx_L0;
+08651: if kind == 'long256':
__pyx_t_1 = __Pyx_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, 8651, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+08652: return types.is_fixed_size_binary(ty) and ty.byte_width == 32
__pyx_t_3 = __pyx_v_types;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_fixed_size_binary, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8652, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 8652, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_5) {
} else {
__pyx_t_1 = __pyx_t_5;
goto __pyx_L9_bool_binop_done;
}
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_ty, __pyx_mstate_global->__pyx_n_u_byte_width); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8652, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_5 = (__Pyx_PyLong_BoolEqObjC(__pyx_t_2, __pyx_mstate_global->__pyx_int_32, 32, 0)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 8652, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_1 = __pyx_t_5;
__pyx_L9_bool_binop_done:;
{
__pyx_r = __pyx_t_1;
}
goto __pyx_L0;
+08653: if kind == 'geohash':
__pyx_t_1 = __Pyx_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, 8653, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+08654: if not _is_integral_not_bool(bits):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_integral_not_bool(__pyx_v_bits); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8654, __pyx_L1_error) __pyx_t_5 = (!__pyx_t_1); if (__pyx_t_5) { /* … */ }
+08655: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+08656: bits = int(bits)
__pyx_t_2 = __Pyx_PyNumber_Int(__pyx_v_bits); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8656, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF_SET(__pyx_v_bits, __pyx_t_2); __pyx_t_2 = 0;
+08657: if bits < 1 or bits > 60:
__pyx_t_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, 8657, __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, 8657, __pyx_L1_error) __pyx_t_5 = __pyx_t_1; __pyx_L14_bool_binop_done:; if (__pyx_t_5) { /* … */ }
+08658: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
08659: # Signed Arrow carriers preserve their raw two's-complement bits,
08660: # including the sign bit. The same four limits are returned by
08661: # `_geohash_dtype_max_bits`.
+08662: if types.is_int8(ty):
__pyx_t_3 = __pyx_v_types;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_int8, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8662, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 8662, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_5) {
/* … */
}
+08663: return bits <= 8
__pyx_t_2 = __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, 8663, __pyx_L1_error) __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8663, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { __pyx_r = __pyx_t_5; } goto __pyx_L0;
+08664: if types.is_int16(ty):
__pyx_t_3 = __pyx_v_types;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_int16, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8664, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 8664, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_5) {
/* … */
}
+08665: return bits <= 16
__pyx_t_2 = __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, 8665, __pyx_L1_error) __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8665, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { __pyx_r = __pyx_t_5; } goto __pyx_L0;
+08666: if types.is_int32(ty):
__pyx_t_3 = __pyx_v_types;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_int32, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8666, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 8666, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_5) {
/* … */
}
+08667: return bits <= 32
__pyx_t_2 = __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, 8667, __pyx_L1_error) __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8667, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { __pyx_r = __pyx_t_5; } goto __pyx_L0;
+08668: if types.is_int64(ty):
__pyx_t_3 = __pyx_v_types;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_int64, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8668, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 8668, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_5) {
/* … */
}
+08669: return bits <= 60
__pyx_t_2 = __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, 8669, __pyx_L1_error) __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8669, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { __pyx_r = __pyx_t_5; } goto __pyx_L0;
+08670: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+08671: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
08672:
08673:
+08674: cdef object _capsule_roundtrip_overrides(object frame, object dtypes):
static PyObject *__pyx_f_7questdb_7_client__capsule_roundtrip_overrides(PyObject *__pyx_v_frame, PyObject *__pyx_v_dtypes) {
PyObject *__pyx_v_out = 0;
PyObject *__pyx_v_cols_meta = 0;
PyObject *__pyx_v_meta = 0;
PyObject *__pyx_v_ty = 0;
PyObject *__pyx_v_bits = 0;
PyObject *__pyx_v_arrow_dtype = 0;
PyObject *__pyx_v_types = 0;
PyObject *__pyx_v_dtype = 0;
PyObject *__pyx_v_kind = 0;
int __pyx_v_kind_int;
int __pyx_v_arg_int;
PyObject *__pyx_v_name = NULL;
PyObject *__pyx_r = NULL;
__Pyx_INCREF(__pyx_v_dtypes);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_AddTraceback("questdb._client._capsule_roundtrip_overrides", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_out);
__Pyx_XDECREF(__pyx_v_cols_meta);
__Pyx_XDECREF(__pyx_v_meta);
__Pyx_XDECREF(__pyx_v_ty);
__Pyx_XDECREF(__pyx_v_bits);
__Pyx_XDECREF(__pyx_v_arrow_dtype);
__Pyx_XDECREF(__pyx_v_types);
__Pyx_XDECREF(__pyx_v_dtype);
__Pyx_XDECREF(__pyx_v_kind);
__Pyx_XDECREF(__pyx_v_name);
__Pyx_XDECREF(__pyx_v_dtypes);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08675: """Arrow overrides rebuilt from the `df.attrs['questdb']` metadata
08676: that `QueryResult.to_pandas()` attaches.
08677:
08678: A pandas dtype holds an Arrow type and no field, so the
08679: `questdb.column_type` claim the egress stamps on the field is gone
08680: by the time a frame comes back in; without it a UUID or LONG256
08681: column would go back out as BINARY and IPV4 / CHAR / GEOHASH as
08682: plain integers. The claim recalls what the frame held when it was
08683: read, so a column since dropped, renamed or retyped is skipped
08684: rather than rejected.
08685: """
+08686: cdef list out = []
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8686, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_out = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
08687: cdef object cols_meta, meta, ty, bits, arrow_dtype, types
08688: cdef object dtype
08689: cdef str kind
08690: cdef int kind_int
08691: cdef int arg_int
+08692: if not _is_pandas_dataframe_object(frame):
__pyx_t_2 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_frame); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8692, __pyx_L1_error) __pyx_t_3 = (!__pyx_t_2); if (__pyx_t_3) { /* … */ }
+08693: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+08694: cols_meta = _roundtrip_columns_meta(frame)
__pyx_t_1 = __pyx_f_7questdb_7_client__roundtrip_columns_meta(__pyx_v_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_cols_meta = __pyx_t_1; __pyx_t_1 = 0;
+08695: if not cols_meta:
__pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_cols_meta); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 8695, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_3); if (__pyx_t_2) { /* … */ }
+08696: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+08697: _dataframe_may_import_deps()
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8697, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+08698: if not _dataframe_try_import_pyarrow():
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_try_import_pyarrow(); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8698, __pyx_L1_error) __pyx_t_3 = (!__pyx_t_2); if (__pyx_t_3) { /* … */ }
+08699: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
08700: # Read once for the whole frame, not once per column; the capsule
08701: # path hands over the `df.dtypes` it already read.
+08702: if dtypes is None:
__pyx_t_3 = (__pyx_v_dtypes == Py_None);
if (__pyx_t_3) {
/* … */
}
+08703: dtypes = frame.dtypes
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8703, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_dtypes, __pyx_t_1); __pyx_t_1 = 0;
+08704: arrow_dtype = getattr(_PANDAS, 'ArrowDtype', None)
__pyx_t_1 = __pyx_v_7questdb_7_client__PANDAS; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetAttr3(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ArrowDtype, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8704, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_arrow_dtype = __pyx_t_4; __pyx_t_4 = 0;
+08705: if arrow_dtype is None:
__pyx_t_3 = (__pyx_v_arrow_dtype == Py_None);
if (__pyx_t_3) {
/* … */
}
08706: # No `ArrowDtype` in this pandas, so no column can be shown to
08707: # hold an Arrow type and every claim would be reported as one
08708: # the column cannot carry. That is "cannot tell", not "cannot
08709: # carry". A frame reaches here through `__arrow_c_stream__`,
08710: # which arrived in the same pandas `ArrowDtype` did, so this is
08711: # the shape of the answer rather than a case that comes up.
+08712: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+08713: types = _PYARROW.types
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_types = __pyx_t_4; __pyx_t_4 = 0;
+08714: for name, meta in cols_meta.items():
__pyx_t_5 = 0;
if (unlikely(__pyx_v_cols_meta == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
__PYX_ERR(0, 8714, __pyx_L1_error)
}
__pyx_t_1 = __Pyx_dict_iterator(__pyx_v_cols_meta, 0, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_6), (&__pyx_t_7)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8714, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_4);
__pyx_t_4 = __pyx_t_1;
__pyx_t_1 = 0;
while (1) {
__pyx_t_9 = __Pyx_dict_iter_next(__pyx_t_4, __pyx_t_6, &__pyx_t_5, &__pyx_t_1, &__pyx_t_8, NULL, __pyx_t_7);
if (unlikely(__pyx_t_9 == 0)) break;
if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 8714, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_GOTREF(__pyx_t_8);
__Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_1);
__pyx_t_1 = 0;
__Pyx_XDECREF_SET(__pyx_v_meta, __pyx_t_8);
__pyx_t_8 = 0;
+08715: if not isinstance(name, str):
__pyx_t_3 = PyUnicode_Check(__pyx_v_name);
__pyx_t_2 = (!__pyx_t_3);
if (__pyx_t_2) {
/* … */
}
+08716: continue
goto __pyx_L8_continue;
+08717: kind = _roundtrip_kind(meta)
__pyx_t_8 = __pyx_f_7questdb_7_client__roundtrip_kind(__pyx_v_meta); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8717, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_XDECREF_SET(__pyx_v_kind, ((PyObject*)__pyx_t_8)); __pyx_t_8 = 0;
+08718: if kind is None or kind not in _ATTRS_OVERRIDE_KINDS:
__pyx_t_3 = (__pyx_v_kind == ((PyObject*)Py_None));
if (!__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L12_bool_binop_done;
}
if (unlikely(__pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not iterable");
__PYX_ERR(0, 8718, __pyx_L1_error)
}
__pyx_t_3 = (__Pyx_PyDict_ContainsTF(__pyx_v_kind, __pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS, Py_NE)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 8718, __pyx_L1_error)
__pyx_t_2 = __pyx_t_3;
__pyx_L12_bool_binop_done:;
if (__pyx_t_2) {
/* … */
}
+08719: continue
goto __pyx_L8_continue;
+08720: kind_int = <int>_ATTRS_OVERRIDE_KINDS[kind]
if (unlikely(__pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
__PYX_ERR(0, 8720, __pyx_L1_error)
}
__pyx_t_8 = __Pyx_PyDict_GetItem(__pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS, __pyx_v_kind); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8720, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_9 = __Pyx_PyLong_As_int(__pyx_t_8); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8720, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_v_kind_int = ((int)__pyx_t_9);
+08721: bits = meta.get('precision_bits') or 0
__pyx_t_10 = __pyx_v_meta;
__Pyx_INCREF(__pyx_t_10);
__pyx_t_11 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_mstate_global->__pyx_n_u_precision_bits};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8721, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8721, __pyx_L1_error)
if (!__pyx_t_2) {
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
} else {
__Pyx_INCREF(__pyx_t_1);
__pyx_t_8 = __pyx_t_1;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L14_bool_binop_done;
}
__pyx_t_1 = __Pyx_PyLong_From_long(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8721, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_8 = __pyx_t_1;
__pyx_t_1 = 0;
__pyx_L14_bool_binop_done:;
__Pyx_XDECREF_SET(__pyx_v_bits, __pyx_t_8);
__pyx_t_8 = 0;
+08722: dtype = _capsule_pandas_dtype(dtypes, name)
__pyx_t_8 = __pyx_f_7questdb_7_client__capsule_pandas_dtype(__pyx_v_dtypes, __pyx_v_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8722, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_8); __pyx_t_8 = 0;
+08723: if dtype is None:
__pyx_t_2 = (__pyx_v_dtype == Py_None);
if (__pyx_t_2) {
/* … */
}
08724: # The column is gone or renamed. That is the drift the
08725: # claim is meant to survive quietly.
+08726: continue
goto __pyx_L8_continue;
+08727: ty = _capsule_arrow_type_of(arrow_dtype, dtype)
__pyx_t_8 = __pyx_f_7questdb_7_client__capsule_arrow_type_of(__pyx_v_arrow_dtype, __pyx_v_dtype); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8727, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_XDECREF_SET(__pyx_v_ty, __pyx_t_8); __pyx_t_8 = 0;
+08728: if ty is None:
__pyx_t_2 = (__pyx_v_ty == Py_None);
if (__pyx_t_2) {
/* … */
}
08729: # The column is here in a dtype that holds no Arrow type --
08730: # a pandas 3 string column, say -- so no claim of any kind
08731: # fits it. The NumPy planner answers the same frame with a
08732: # log notice, and both planners answering alike is the point.
+08733: _log_roundtrip_claim_dropped(name, kind, dtype)
__pyx_t_8 = __pyx_f_7questdb_7_client__log_roundtrip_claim_dropped(__pyx_v_name, __pyx_v_kind, __pyx_v_dtype); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8733, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+08734: continue
goto __pyx_L8_continue;
+08735: if not _attrs_override_fits(types, ty, kind, bits):
__pyx_t_2 = __pyx_f_7questdb_7_client__attrs_override_fits(__pyx_v_types, __pyx_v_ty, __pyx_v_kind, __pyx_v_bits); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8735, __pyx_L1_error)
__pyx_t_3 = (!__pyx_t_2);
if (__pyx_t_3) {
/* … */
}
+08736: _log_roundtrip_claim_dropped(name, kind, ty)
__pyx_t_8 = __pyx_f_7questdb_7_client__log_roundtrip_claim_dropped(__pyx_v_name, __pyx_v_kind, __pyx_v_ty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8736, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+08737: continue
goto __pyx_L8_continue;
08738: # Only GEOHASH takes an argument, and `_attrs_override_fits` has
08739: # already held it to a whole number in 1..=60.
+08740: arg_int = int(bits) if kind == 'geohash' else 0
__pyx_t_3 = __Pyx_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, 8740, __pyx_L1_error) if (__pyx_t_3) { __pyx_t_8 = __Pyx_PyNumber_Int(__pyx_v_bits); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8740, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_12 = __Pyx_PyLong_As_int(__pyx_t_8); if (unlikely((__pyx_t_12 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8740, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_9 = __pyx_t_12; } else { __pyx_t_9 = 0; } __pyx_v_arg_int = __pyx_t_9;
+08741: out.append((name.encode('utf-8'), kind_int, arg_int))
__pyx_t_1 = __pyx_v_name;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_11 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_mstate_global->__pyx_kp_u_utf_8};
__pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8741, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
}
__pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_kind_int); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8741, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_10 = __Pyx_PyLong_From_int(__pyx_v_arg_int); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8741, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 8741, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_13);
__Pyx_GIVEREF(__pyx_t_8);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_8) != (0)) __PYX_ERR(0, 8741, __pyx_L1_error);
__Pyx_GIVEREF(__pyx_t_1);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_1) != (0)) __PYX_ERR(0, 8741, __pyx_L1_error);
__Pyx_GIVEREF(__pyx_t_10);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_13, 2, __pyx_t_10) != (0)) __PYX_ERR(0, 8741, __pyx_L1_error);
__pyx_t_8 = 0;
__pyx_t_1 = 0;
__pyx_t_10 = 0;
__pyx_t_14 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_13); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(0, 8741, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
__pyx_L8_continue:;
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+08742: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
08743:
08744:
+08745: cdef bint _is_pandas_dataframe_object(object obj):
static int __pyx_f_7questdb_7_client__is_pandas_dataframe_object(PyObject *__pyx_v_obj) {
PyObject *__pyx_v_cls = 0;
PyObject *__pyx_v_module = 0;
PyObject *__pyx_v_name = 0;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_AddTraceback("questdb._client._is_pandas_dataframe_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_cls);
__Pyx_XDECREF(__pyx_v_module);
__Pyx_XDECREF(__pyx_v_name);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08746: cdef object cls
08747: cdef object module
08748: cdef object name
+08749: if _PANDAS is not None and isinstance(obj, _PANDAS.DataFrame):
__pyx_t_2 = (__pyx_v_7questdb_7_client__PANDAS != Py_None);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PANDAS, __pyx_mstate_global->__pyx_n_u_DataFrame); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8749, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_2 = PyObject_IsInstance(__pyx_v_obj, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8749, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+08750: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+08751: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
goto __pyx_L11_try_end;
__pyx_L6_error:;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
__pyx_L8_except_error:;
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
goto __pyx_L1_error;
__pyx_L10_try_return:;
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
goto __pyx_L0;
__pyx_L9_except_return:;
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
goto __pyx_L0;
__pyx_L11_try_end:;
}
+08752: for cls in type(obj).__mro__:
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_obj)), __pyx_mstate_global->__pyx_n_u_mro); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8752, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_3); if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) { __pyx_t_7 = __pyx_t_3; __Pyx_INCREF(__pyx_t_7); __pyx_t_8 = 0; __pyx_t_9 = NULL; } else { __pyx_t_8 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8752, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_9 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8752, __pyx_L6_error) } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; for (;;) { if (likely(!__pyx_t_9)) { if (likely(PyList_CheckExact(__pyx_t_7))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_7); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8752, __pyx_L6_error) #endif if (__pyx_t_8 >= __pyx_temp) break; } __pyx_t_3 = __Pyx_PyList_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, 8752, __pyx_L6_error) #endif if (__pyx_t_8 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_3 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_8)); #else __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_7, __pyx_t_8); #endif ++__pyx_t_8; } if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8752, __pyx_L6_error) } else { __pyx_t_3 = __pyx_t_9(__pyx_t_7); if (unlikely(!__pyx_t_3)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 8752, __pyx_L6_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_cls, __pyx_t_3); __pyx_t_3 = 0; /* … */ } __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+08753: module = getattr(cls, '__module__', '')
__pyx_t_3 = __Pyx_GetAttr3(__pyx_v_cls, __pyx_mstate_global->__pyx_n_u_module, __pyx_mstate_global->__pyx_kp_u__6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8753, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_module, __pyx_t_3); __pyx_t_3 = 0;
+08754: name = getattr(cls, '__name__', '')
__pyx_t_3 = __Pyx_GetAttr3(__pyx_v_cls, __pyx_mstate_global->__pyx_n_u_name_2, __pyx_mstate_global->__pyx_kp_u__6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8754, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_3); __pyx_t_3 = 0;
+08755: if (name == 'DataFrame' and
__pyx_t_2 = __Pyx_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, 8755, __pyx_L6_error) if (__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L15_bool_binop_done; } /* … */ if (__pyx_t_1) { /* … */ }
+08756: isinstance(module, str) and
__pyx_t_2 = PyUnicode_Check(__pyx_v_module);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L15_bool_binop_done;
}
+08757: (module == 'pandas' or module.startswith('pandas.'))):
__pyx_t_2 = __Pyx_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, 8757, __pyx_L6_error) if (!__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L15_bool_binop_done; } __pyx_t_10 = __pyx_v_module; __Pyx_INCREF(__pyx_t_10); __pyx_t_11 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_mstate_global->__pyx_kp_u_pandas_3}; __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_startswith, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8757, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8757, __pyx_L6_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_1 = __pyx_t_2; __pyx_L15_bool_binop_done:;
+08758: return True
{
__pyx_r = 1;
}
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
goto __pyx_L10_try_return;
+08759: except Exception:
__pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception)))); if (__pyx_t_12) { __Pyx_ErrRestore(0,0,0);
+08760: return False
{
__pyx_r = 0;
}
goto __pyx_L9_except_return;
}
goto __pyx_L8_except_error;
+08761: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
08762:
08763:
+08764: cdef object _MASKED_DTYPE = None
__Pyx_INCREF(Py_None); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__MASKED_DTYPE); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__MASKED_DTYPE, Py_None); __Pyx_GIVEREF(Py_None);
+08765: cdef bint _MASKED_DTYPE_READY = False
__pyx_v_7questdb_7_client__MASKED_DTYPE_READY = 0;
08766:
08767:
+08768: cdef object _pandas_masked_dtype():
static PyObject *__pyx_f_7questdb_7_client__pandas_masked_dtype(void) {
PyObject *__pyx_v_BaseMaskedDtype = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client._pandas_masked_dtype", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_BaseMaskedDtype);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08769: global _MASKED_DTYPE, _MASKED_DTYPE_READY
+08770: if not _MASKED_DTYPE_READY:
__pyx_t_1 = (!__pyx_v_7questdb_7_client__MASKED_DTYPE_READY);
if (__pyx_t_1) {
/* … */
}
+08771: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L1_error;
__pyx_L5_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
__pyx_L9_try_end:;
}
+08772: from pandas.core.arrays.masked import BaseMaskedDtype
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_BaseMaskedDtype};
__pyx_t_6 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_pandas_core_arrays_masked, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8772, __pyx_L4_error)
}
__pyx_t_5 = __pyx_t_6;
__Pyx_GOTREF(__pyx_t_5);
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_BaseMaskedDtype};
__pyx_t_7 = 0; {
__pyx_t_8 = __Pyx_ImportFrom(__pyx_t_5, __pyx_imported_names[__pyx_t_7]); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8772, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_8);
switch (__pyx_t_7) {
case 0:
__Pyx_INCREF(__pyx_t_8);
__pyx_v_BaseMaskedDtype = __pyx_t_8;
break;
default:;
}
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
}
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+08773: _MASKED_DTYPE = BaseMaskedDtype
__Pyx_INCREF(__pyx_v_BaseMaskedDtype); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__MASKED_DTYPE); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__MASKED_DTYPE, __pyx_v_BaseMaskedDtype); __Pyx_GIVEREF(__pyx_v_BaseMaskedDtype);
+08774: except Exception:
__pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception)))); if (__pyx_t_9) { __Pyx_ErrRestore(0,0,0);
+08775: _MASKED_DTYPE = ()
__Pyx_INCREF(__pyx_mstate_global->__pyx_empty_tuple); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__MASKED_DTYPE); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__MASKED_DTYPE, __pyx_mstate_global->__pyx_empty_tuple); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_empty_tuple); goto __pyx_L5_exception_handled; } goto __pyx_L6_except_error;
+08776: _MASKED_DTYPE_READY = True
__pyx_v_7questdb_7_client__MASKED_DTYPE_READY = 1;
+08777: return _MASKED_DTYPE
{
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;
08778:
08779:
+08780: cdef bint _pandas_dtypes_require_manual_planner(object dtypes) except -1:
static int __pyx_f_7questdb_7_client__pandas_dtypes_require_manual_planner(PyObject *__pyx_v_dtypes) {
PyObject *__pyx_v_dtype = 0;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client._pandas_dtypes_require_manual_planner", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_dtype);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08781: # A fully Arrow-backed frame takes the zero-copy capsule path; any
08782: # numpy / object / masked / categorical column routes the whole frame to
08783: # the manual planner (which ingests those directly and the Arrow-backed
08784: # columns via the arrow-import path). `dtypes` is the frame's
08785: # `df.dtypes`.
08786: cdef object dtype
+08787: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L8_try_end;
__pyx_L3_error:;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
__pyx_L5_except_error:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L1_error;
__pyx_L7_try_return:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L0;
__pyx_L6_except_return:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L0;
__pyx_L8_try_end:;
}
+08788: for dtype in dtypes:
if (likely(PyList_CheckExact(__pyx_v_dtypes)) || PyTuple_CheckExact(__pyx_v_dtypes)) { __pyx_t_4 = __pyx_v_dtypes; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; __pyx_t_6 = NULL; } else { __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_dtypes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8788, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8788, __pyx_L3_error) } for (;;) { if (likely(!__pyx_t_6)) { if (likely(PyList_CheckExact(__pyx_t_4))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8788, __pyx_L3_error) #endif if (__pyx_t_5 >= __pyx_temp) break; } __pyx_t_7 = __Pyx_PyList_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, 8788, __pyx_L3_error) #endif if (__pyx_t_5 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_7 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5)); #else __pyx_t_7 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_5); #endif ++__pyx_t_5; } if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8788, __pyx_L3_error) } else { __pyx_t_7 = __pyx_t_6(__pyx_t_4); if (unlikely(!__pyx_t_7)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 8788, __pyx_L3_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_7); __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_7); __pyx_t_7 = 0; /* … */ } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+08789: if not _pandas_dtype_is_arrow(dtype):
__pyx_t_8 = __pyx_f_7questdb_7_client__pandas_dtype_is_arrow(__pyx_v_dtype); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 8789, __pyx_L3_error)
__pyx_t_9 = (!__pyx_t_8);
if (__pyx_t_9) {
/* … */
}
+08790: return True
{
__pyx_r = 1;
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L7_try_return;
+08791: except Exception:
__pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception)))); if (__pyx_t_10) { __Pyx_ErrRestore(0,0,0);
+08792: return True
{
__pyx_r = 1;
}
goto __pyx_L6_except_return;
}
goto __pyx_L5_except_error;
+08793: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
08794:
08795:
+08796: cdef bint _pandas_dtype_is_arrow(object dtype) except -1:
static int __pyx_f_7questdb_7_client__pandas_dtype_is_arrow(PyObject *__pyx_v_dtype) {
PyObject *__pyx_v_arrow_dtype = 0;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client._pandas_dtype_is_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_arrow_dtype);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_gb_7questdb_7_client_36_schema_overrides_need_arrow_message_2generator7(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
+08797: cdef object arrow_dtype = getattr(_PANDAS, 'ArrowDtype', None)
__pyx_t_1 = __pyx_v_7questdb_7_client__PANDAS; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetAttr3(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ArrowDtype, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8797, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_arrow_dtype = __pyx_t_2; __pyx_t_2 = 0;
+08798: if arrow_dtype is not None and isinstance(dtype, arrow_dtype):
__pyx_t_4 = (__pyx_v_arrow_dtype != Py_None);
if (__pyx_t_4) {
} else {
__pyx_t_3 = __pyx_t_4;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_4 = PyObject_IsInstance(__pyx_v_dtype, __pyx_v_arrow_dtype); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 8798, __pyx_L1_error)
__pyx_t_3 = __pyx_t_4;
__pyx_L4_bool_binop_done:;
if (__pyx_t_3) {
/* … */
}
+08799: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+08800: return (isinstance(dtype, _PANDAS.StringDtype)
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PANDAS, __pyx_mstate_global->__pyx_n_u_StringDtype); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8800, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_2); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 8800, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_4) { } else { __pyx_t_3 = __pyx_t_4; goto __pyx_L6_bool_binop_done; }
+08801: and getattr(dtype, 'storage', None) == 'pyarrow')
__pyx_t_2 = __Pyx_GetAttr3(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_storage, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8801, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_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, 8801, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __pyx_t_4; __pyx_L6_bool_binop_done:; { __pyx_r = __pyx_t_3; } goto __pyx_L0;
08802:
08803:
+08804: cdef str _schema_overrides_need_arrow_message(object df):
static PyObject *__pyx_f_7questdb_7_client__schema_overrides_need_arrow_message(PyObject *__pyx_v_df) {
PyObject *__pyx_v_names = 0;
PyObject *__pyx_v_listed = 0;
PyObject *__pyx_9genexpr23__pyx_v_name = NULL;
PyObject *__pyx_9genexpr23__pyx_v_dtype = NULL;
PyObject *__pyx_gb_7questdb_7_client_36_schema_overrides_need_arrow_message_2generator7 = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_AddTraceback("questdb._client._schema_overrides_need_arrow_message", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_names);
__Pyx_XDECREF(__pyx_v_listed);
__Pyx_XDECREF(__pyx_9genexpr23__pyx_v_name);
__Pyx_XDECREF(__pyx_9genexpr23__pyx_v_dtype);
__Pyx_XDECREF(__pyx_gb_7questdb_7_client_36_schema_overrides_need_arrow_message_2generator7);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08805: """Why `schema_overrides` cannot apply to `df`, naming the pandas
08806: columns that are not Arrow-backed when there are any."""
+08807: cdef list names = []
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8807, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_names = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
08808: cdef str listed
+08809: if _is_pandas_dataframe_object(df):
__pyx_t_2 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_df); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8809, __pyx_L1_error) if (__pyx_t_2) { /* … */ }
+08810: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L1_error;
__pyx_L5_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
__pyx_L9_try_end:;
}
+08811: names = [
{ /* enter inner scope */
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8811, __pyx_L12_error)
__Pyx_GOTREF(__pyx_t_1);
+08812: name for name, dtype in df.dtypes.items()
__pyx_t_7 = 0;
__pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8812, __pyx_L12_error)
__Pyx_GOTREF(__pyx_t_10);
if (unlikely(__pyx_t_10 == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
__PYX_ERR(0, 8812, __pyx_L12_error)
}
__pyx_t_11 = __Pyx_dict_iterator(__pyx_t_10, 0, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_8), (&__pyx_t_9)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8812, __pyx_L12_error)
__Pyx_GOTREF(__pyx_t_11);
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_6);
__pyx_t_6 = __pyx_t_11;
__pyx_t_11 = 0;
while (1) {
__pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_8, &__pyx_t_7, &__pyx_t_11, &__pyx_t_10, NULL, __pyx_t_9);
if (unlikely(__pyx_t_12 == 0)) break;
if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 8812, __pyx_L12_error)
__Pyx_GOTREF(__pyx_t_11);
__Pyx_GOTREF(__pyx_t_10);
__Pyx_XDECREF_SET(__pyx_9genexpr23__pyx_v_name, __pyx_t_11);
__pyx_t_11 = 0;
__Pyx_XDECREF_SET(__pyx_9genexpr23__pyx_v_dtype, __pyx_t_10);
__pyx_t_10 = 0;
/* … */
if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, __pyx_9genexpr23__pyx_v_name))) __PYX_ERR(0, 8811, __pyx_L12_error)
+08813: if not _pandas_dtype_is_arrow(dtype)]
__pyx_t_2 = __pyx_f_7questdb_7_client__pandas_dtype_is_arrow(__pyx_9genexpr23__pyx_v_dtype); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8813, __pyx_L12_error) __pyx_t_13 = (!__pyx_t_2); if (__pyx_t_13) { /* … */ } } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_9genexpr23__pyx_v_dtype); __pyx_9genexpr23__pyx_v_dtype = 0; __Pyx_XDECREF(__pyx_9genexpr23__pyx_v_name); __pyx_9genexpr23__pyx_v_name = 0; goto __pyx_L16_exit_scope; __pyx_L12_error:; __Pyx_XDECREF(__pyx_9genexpr23__pyx_v_dtype); __pyx_9genexpr23__pyx_v_dtype = 0; __Pyx_XDECREF(__pyx_9genexpr23__pyx_v_name); __pyx_9genexpr23__pyx_v_name = 0; goto __pyx_L4_error; __pyx_L16_exit_scope:; } /* exit inner scope */ __Pyx_DECREF_SET(__pyx_v_names, ((PyObject*)__pyx_t_1)); __pyx_t_1 = 0;
+08814: except Exception:
__pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception)))); if (__pyx_t_9) { __Pyx_AddTraceback("questdb._client._schema_overrides_need_arrow_message", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_10) < 0) __PYX_ERR(0, 8814, __pyx_L6_except_error) __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_10);
+08815: names = []
__pyx_t_11 = PyList_New(0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8815, __pyx_L6_except_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF_SET(__pyx_v_names, ((PyObject*)__pyx_t_11)); __pyx_t_11 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; goto __pyx_L5_exception_handled; } goto __pyx_L6_except_error;
+08816: listed = ''
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u__6);
__pyx_v_listed = __pyx_mstate_global->__pyx_kp_u__6;
+08817: if names:
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_names);
if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 8817, __pyx_L1_error)
__pyx_t_13 = (__pyx_temp != 0);
}
if (__pyx_t_13) {
/* … */
}
+08818: listed = ', '.join(repr(name) for name in names[:5])
static PyObject *__pyx_pf_7questdb_7_client_36_schema_overrides_need_arrow_message_genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_10_genexpr *__pyx_cur_scope;
PyObject *__pyx_r = NULL;
__pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_10_genexpr *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_10_genexpr(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_10_genexpr, __pyx_mstate_global->__pyx_empty_tuple, NULL);
if (unlikely(!__pyx_cur_scope)) {
__pyx_cur_scope = ((struct __pyx_obj_7questdb_7_client___pyx_scope_struct_10_genexpr *)Py_None);
__Pyx_INCREF(Py_None);
__PYX_ERR(0, 8818, __pyx_L1_error)
} else {
__Pyx_GOTREF((PyObject *)__pyx_cur_scope);
}
__pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
__Pyx_INCREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
{
__pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7questdb_7_client_36_schema_overrides_need_arrow_message_2generator7, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[7]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_schema_overrides_need_arrow_mes, __pyx_mstate_global->__pyx_n_u_questdb__client); if (unlikely(!gen)) __PYX_ERR(0, 8818, __pyx_L1_error)
__Pyx_DECREF(__pyx_cur_scope);
__Pyx_RefNannyFinishContext();
return (PyObject *) gen;
}
/* function exit code */
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client._schema_overrides_need_arrow_message.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__Pyx_DECREF((PyObject *)__pyx_cur_scope);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_gb_7questdb_7_client_36_schema_overrides_need_arrow_message_2generator7(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("genexpr", 0);
__pyx_L3_first_run:;
if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 8818, __pyx_L1_error)
__pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 8818, __pyx_L1_error)
__Pyx_GOTREF(__pyx_r);
if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 8818, __pyx_L1_error) }
__pyx_t_1 = __pyx_cur_scope->__pyx_genexpr_arg_0; __Pyx_INCREF(__pyx_t_1);
__pyx_t_2 = 0;
for (;;) {
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
#if !CYTHON_ASSUME_SAFE_SIZE
if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8818, __pyx_L1_error)
#endif
if (__pyx_t_2 >= __pyx_temp) break;
}
__pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_1, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
++__pyx_t_2;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8818, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_name);
__Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_name, __pyx_t_3);
__Pyx_GIVEREF(__pyx_t_3);
__pyx_t_3 = 0;
__pyx_t_3 = PyObject_Repr(__pyx_cur_scope->__pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8818, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_GIVEREF(__pyx_t_3);
if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_r, __pyx_t_3))) __PYX_ERR(0, 8818, __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, 8818, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_6 = __pyx_pf_7questdb_7_client_36_schema_overrides_need_arrow_message_genexpr(NULL, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8818, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
__pyx_t_10 = __Pyx_Generator_GetInlinedResult(__pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8818, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__pyx_t_6 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__28, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8818, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_DECREF_SET(__pyx_v_listed, ((PyObject*)__pyx_t_6));
__pyx_t_6 = 0;
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_10_genexpr {
PyObject_HEAD
PyObject *__pyx_genexpr_arg_0;
PyObject *__pyx_v_name;
};
+08819: if len(names) > 5:
__pyx_t_8 = __Pyx_PyList_GET_SIZE(__pyx_v_names); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 8819, __pyx_L1_error) __pyx_t_13 = (__pyx_t_8 > 5); if (__pyx_t_13) { /* … */ }
+08820: listed += f' and {len(names) - 5} more'
__pyx_t_8 = __Pyx_PyList_GET_SIZE(__pyx_v_names); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 8820, __pyx_L1_error) __pyx_t_6 = __Pyx_PyUnicode_From_Py_ssize_t((__pyx_t_8 - 5), 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8820, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_14[0] = __pyx_mstate_global->__pyx_kp_u_and; __pyx_t_14[1] = __pyx_t_6; __pyx_t_14[2] = __pyx_mstate_global->__pyx_kp_u_more; __pyx_t_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, 8820, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_v_listed, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8820, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF_SET(__pyx_v_listed, ((PyObject*)__pyx_t_6)); __pyx_t_6 = 0;
+08821: listed = f'In this DataFrame, these columns do not: {listed}. '
__pyx_t_6 = __Pyx_PyUnicode_Unicode(__pyx_v_listed); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8821, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_14[0] = __pyx_mstate_global->__pyx_kp_u_In_this_DataFrame_these_columns; __pyx_t_14[1] = __pyx_t_6; __pyx_t_14[2] = __pyx_mstate_global->__pyx_kp_u__35; __pyx_t_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, 8821, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF_SET(__pyx_v_listed, ((PyObject*)__pyx_t_10)); __pyx_t_10 = 0;
08822: return (
08823: '`schema_overrides` works only on input in Arrow format: a '
08824: 'pyarrow Table or RecordBatch, a polars DataFrame, or a pandas '
08825: 'DataFrame (pandas 2.2 or newer) whose columns all have Arrow '
+08826: 'dtypes (`pd.ArrowDtype`). ' + listed +
__pyx_t_10 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_schema_overrides_works_only_on, __pyx_v_listed); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8826, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_6 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_10, __pyx_mstate_global->__pyx_kp_u_Convert_the_DataFrame_e_g_df_df); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8826, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = ((PyObject*)__pyx_t_6); } __Pyx_XDECREF(__pyx_temp); } __pyx_t_6 = 0; goto __pyx_L0;
08827: 'Convert the DataFrame, e.g. '
08828: '`df = df.convert_dtypes(dtype_backend="pyarrow")`, or drop '
08829: '`schema_overrides`.')
08830:
08831:
+08832: cdef bint _pandas_dataframe_is_timestamp_only_at(
static int __pyx_f_7questdb_7_client__pandas_dataframe_is_timestamp_only_at(PyObject *__pyx_v_df, PyObject *__pyx_v_at) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_AddTraceback("questdb._client._pandas_dataframe_is_timestamp_only_at", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08833: object df,
08834: object at) except -1:
+08835: if not _is_pandas_dataframe_object(df) or not isinstance(at, str):
__pyx_t_2 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_df); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8835, __pyx_L1_error) __pyx_t_3 = (!__pyx_t_2); if (!__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; goto __pyx_L4_bool_binop_done; } __pyx_t_3 = PyUnicode_Check(__pyx_v_at); __pyx_t_2 = (!__pyx_t_3); __pyx_t_1 = __pyx_t_2; __pyx_L4_bool_binop_done:; if (__pyx_t_1) { /* … */ }
+08836: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+08837: try:
{
/*try:*/ {
/* … */
}
__pyx_L6_error:;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
__pyx_L8_except_error:;
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
goto __pyx_L1_error;
__pyx_L10_try_return:;
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
goto __pyx_L0;
__pyx_L9_except_return:;
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
goto __pyx_L0;
}
+08838: return len(df.columns) == 1 and df.columns[0] == at
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8838, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = PyObject_Length(__pyx_t_7); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 8838, __pyx_L6_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_2 = (__pyx_t_8 == 1); if (__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L12_bool_binop_done; } __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8838, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_7, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8838, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_9, __pyx_v_at, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8838, __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;
+08839: except Exception:
__pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception)))); if (__pyx_t_10) { __Pyx_ErrRestore(0,0,0);
+08840: return False
{
__pyx_r = 0;
}
goto __pyx_L9_except_return;
}
goto __pyx_L8_except_error;
08841:
08842:
+08843: cdef Py_ssize_t _capsule_row_count(object sliceable) except -2:
static Py_ssize_t __pyx_f_7questdb_7_client__capsule_row_count(PyObject *__pyx_v_sliceable) {
PyObject *__pyx_v_row_count_obj = 0;
Py_ssize_t __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client._capsule_row_count", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -2L;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_row_count_obj);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+08844: cdef object row_count_obj = getattr(sliceable, 'num_rows', None)
__pyx_t_1 = __Pyx_GetAttr3(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_num_rows, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8844, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_row_count_obj = __pyx_t_1; __pyx_t_1 = 0;
+08845: if row_count_obj is None:
__pyx_t_2 = (__pyx_v_row_count_obj == Py_None);
if (__pyx_t_2) {
/* … */
}
+08846: row_count_obj = getattr(sliceable, 'height', None)
__pyx_t_1 = __Pyx_GetAttr3(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_height, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8846, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_row_count_obj, __pyx_t_1); __pyx_t_1 = 0;
+08847: if row_count_obj is not None:
__pyx_t_2 = (__pyx_v_row_count_obj != Py_None);
if (__pyx_t_2) {
/* … */
}
+08848: return <Py_ssize_t>row_count_obj
__pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_v_row_count_obj); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 8848, __pyx_L1_error) { __pyx_r = ((Py_ssize_t)__pyx_t_3); } goto __pyx_L0;
+08849: if _is_pandas_dataframe_object(sliceable):
__pyx_t_2 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_sliceable); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8849, __pyx_L1_error) if (__pyx_t_2) { /* … */ }
+08850: return <Py_ssize_t>len(sliceable)
__pyx_t_3 = PyObject_Length(__pyx_v_sliceable); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(0, 8850, __pyx_L1_error) { __pyx_r = ((Py_ssize_t)__pyx_t_3); } goto __pyx_L0;
+08851: return -1
{
__pyx_r = -1L;
}
goto __pyx_L0;
08852:
08853:
+08854: cdef object _capsule_slice_rows(
static PyObject *__pyx_f_7questdb_7_client__capsule_slice_rows(PyObject *__pyx_v_sliceable, Py_ssize_t __pyx_v_offset, Py_ssize_t __pyx_v_row_count) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client._capsule_slice_rows", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08855: object sliceable,
08856: Py_ssize_t offset,
08857: Py_ssize_t row_count):
+08858: if hasattr(sliceable, 'slice'):
__pyx_t_1 = __Pyx_HasAttr(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_slice); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 8858, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+08859: return sliceable.slice(offset, row_count)
__pyx_t_3 = __pyx_v_sliceable;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = PyLong_FromSsize_t(__pyx_v_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8859, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = PyLong_FromSsize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8859, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_6 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_4, __pyx_t_5};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_slice, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8859, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_2;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_2 = 0;
goto __pyx_L0;
+08860: if _is_pandas_dataframe_object(sliceable):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_sliceable); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8860, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+08861: return sliceable.iloc[offset:offset + row_count]
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8861, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = __Pyx_PyObject_GetSlice(__pyx_t_2, __pyx_v_offset, (__pyx_v_offset + __pyx_v_row_count), NULL, NULL, NULL, 1, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8861, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_5; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_5 = 0; goto __pyx_L0;
+08862: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
08863:
08864:
+08865: cdef struct direct_conn_source_t:
struct __pyx_t_7questdb_7_client_direct_conn_source_t {
struct questdb_db *db;
struct line_sender_opts const *opts;
int slice_for_oidc;
int connect_gave_up;
};
08866: # Pooled borrow when ``db != NULL``; otherwise a poolless standalone
08867: # connection opened from ``opts`` per call.
08868: questdb_db* db
08869: const line_sender_opts* opts
08870: # An OIDC provider is attached: split a retried connect into slices so the
08871: # foreground terminal-OIDC gate sees each outcome (see
08872: # `_direct_conn_open_checked`).
08873: bint slice_for_oidc
08874: # Set by `_direct_conn_open_checked` when a pooled borrow that was given a
08875: # retry budget fails. Native has then spent that budget, or stopped early
08876: # on a failure it does not retry for a caller that waits, so
08877: # `_direct_dataframe_run` must not borrow again.
08878: bint connect_gave_up
08879:
08880:
+08881: cdef qwp_direct_sender* _direct_conn_open(
static struct qwp_direct_sender *__pyx_f_7questdb_7_client__direct_conn_open(struct __pyx_t_7questdb_7_client_direct_conn_source_t *__pyx_v_src, uint64_t __pyx_v_budget_ms, struct line_sender_error **__pyx_v_err) {
struct qwp_direct_sender *__pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
08882: direct_conn_source_t* src,
08883: uint64_t budget_ms,
08884: line_sender_error** err) noexcept nogil:
+08885: if src.db != NULL:
__pyx_t_1 = (__pyx_v_src->db != NULL);
if (__pyx_t_1) {
/* … */
}
+08886: if budget_ms == 0:
__pyx_t_1 = (__pyx_v_budget_ms == 0);
if (__pyx_t_1) {
/* … */
}
+08887: return questdb_db_borrow_direct_sender(src.db, err)
{
__pyx_r = questdb_db_borrow_direct_sender(__pyx_v_src->db, __pyx_v_err);
}
goto __pyx_L0;
+08888: return questdb_db_borrow_direct_sender_with_retry(
{
__pyx_r = questdb_db_borrow_direct_sender_with_retry(__pyx_v_src->db, __pyx_v_budget_ms, __pyx_v_err);
}
goto __pyx_L0;
08889: src.db, budget_ms, err)
+08890: return qwp_direct_sender_from_opts(src.opts, err)
{
__pyx_r = qwp_direct_sender_from_opts(__pyx_v_src->opts, __pyx_v_err);
}
goto __pyx_L0;
08891:
08892:
+08893: cdef qwp_direct_sender* _direct_conn_open_checked(
static struct qwp_direct_sender *__pyx_f_7questdb_7_client__direct_conn_open_checked(struct __pyx_t_7questdb_7_client_direct_conn_source_t *__pyx_v_src, uint64_t __pyx_v_budget_ms) {
struct line_sender_error *__pyx_v_err;
struct qwp_direct_sender *__pyx_v_conn;
PyThreadState *__pyx_v_gs;
uint64_t __pyx_v_slice_ms;
double __pyx_v_deadline;
double __pyx_v_slice_start;
double __pyx_v_now;
double __pyx_v_remaining;
uint64_t __pyx_v_remaining_ms;
int __pyx_v_last_slice;
int __pyx_v_role_reject;
PyObject *__pyx_v_exc = 0;
struct qwp_direct_sender *__pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_AddTraceback("questdb._client._direct_conn_open_checked", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08894: direct_conn_source_t* src,
08895: uint64_t budget_ms) except NULL:
08896: """Open (or borrow) the attempt's connection, raising on failure.
08897:
08898: With an OIDC provider attached the native ``*_with_retry`` borrow is run
08899: in slices. The native side classifies a non-busy ``InteractionRequired``
08900: as a retryable ``SocketError`` -- right for background drainers, which
08901: keep queued frames alive while someone signs in -- so one call spanning
08902: the whole budget would poll the provider for up to 300s before the
08903: foreground gate ever saw the error it exists to fail fast on.
08904:
08905: Between slices that terminal OIDC case ends the wait early, and so does
08906: any error its reconnect loop treats as terminal (``AuthError`` from a
08907: 401/403 upgrade, ``ProtocolVersionError``, ...): recognised by its code,
08908: or by the native call returning *before* its slice ran out. The code
08909: check matters because native's last pick runs at the slice deadline, so
08910: a terminal error from it arrives on time. A 421 with a role header is
08911: ``RoleMismatch``; when durable ACK is required and every endpoint rejects
08912: by role, native synthesizes ``ProtocolVersionError`` with a role-rejection
08913: marker. That marker exempts it from the terminal gate: unlike terminal
08914: errors, role rejections are retried until the slice deadline. Re-dialling
08915: a terminal error would re-present a rejected credential and repeat
08916: terminal connection events. Every other failure keeps retrying
08917: until the caller's budget is spent, exactly as the single native call
08918: does without a provider: a primary election
08919: (``RoleMismatch``) or pool contention (``InvalidApiCall`` "pool
08920: exhausted") that outlasts one slice must not fail an OIDC-authenticated
08921: call that the same call without a provider rides out. The slicing lives
08922: here, inside one attempt, so the frame is prepared once per attempt rather
08923: than once per slice, and slices double so a long outage restarts the
08924: native reconnect backoff only a logarithmic number of times.
08925: """
+08926: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+08927: cdef qwp_direct_sender* conn = NULL
__pyx_v_conn = NULL;
+08928: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+08929: cdef uint64_t slice_ms = budget_ms
__pyx_v_slice_ms = __pyx_v_budget_ms;
+08930: cdef double deadline = 0.0
__pyx_v_deadline = 0.0;
+08931: cdef double slice_start = 0.0
__pyx_v_slice_start = 0.0;
+08932: cdef double now = 0.0
__pyx_v_now = 0.0;
+08933: cdef double remaining = 0.0
__pyx_v_remaining = 0.0;
+08934: cdef uint64_t remaining_ms = 0
__pyx_v_remaining_ms = 0;
+08935: cdef bint last_slice = True
__pyx_v_last_slice = 1;
+08936: cdef bint role_reject = False
__pyx_v_role_reject = 0;
08937: cdef object exc
+08938: if src.slice_for_oidc and budget_ms > _OIDC_FOREGROUND_RETRY_SLICE_MS:
if (__pyx_v_src->slice_for_oidc) {
} else {
__pyx_t_1 = __pyx_v_src->slice_for_oidc;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_budget_ms > __pyx_v_7questdb_7_client__OIDC_FOREGROUND_RETRY_SLICE_MS);
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+08939: slice_ms = _OIDC_FOREGROUND_RETRY_SLICE_MS
__pyx_v_slice_ms = __pyx_v_7questdb_7_client__OIDC_FOREGROUND_RETRY_SLICE_MS;
+08940: last_slice = False
__pyx_v_last_slice = 0;
+08941: deadline = time.monotonic() + budget_ms / 1000.0
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8941, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8941, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_6))) {
__pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
assert(__pyx_t_4);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
__Pyx_INCREF(__pyx_t_4);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8941, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__pyx_t_6 = PyFloat_FromDouble((((double)__pyx_v_budget_ms) / 1000.0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8941, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_4 = __Pyx_PyNumber_Add_object_float(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8941, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__pyx_t_8 = __Pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 8941, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_v_deadline = __pyx_t_8;
+08942: while True:
while (1) {
+08943: if not last_slice:
__pyx_t_1 = (!__pyx_v_last_slice);
if (__pyx_t_1) {
/* … */
}
+08944: slice_start = time.monotonic()
__pyx_t_6 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8944, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8944, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_5))) {
__pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
assert(__pyx_t_6);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
__Pyx_INCREF(__pyx_t_6);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8944, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__pyx_t_8 = __Pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 8944, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_v_slice_start = __pyx_t_8;
+08945: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+08946: conn = _direct_conn_open(src, slice_ms, &err)
__pyx_v_conn = __pyx_f_7questdb_7_client__direct_conn_open(__pyx_v_src, __pyx_v_slice_ms, (&__pyx_v_err));
+08947: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+08948: if conn != NULL:
__pyx_t_1 = (__pyx_v_conn != NULL);
if (__pyx_t_1) {
/* … */
}
+08949: src.connect_gave_up = False
__pyx_v_src->connect_gave_up = 0;
+08950: return conn
{
__pyx_r = __pyx_v_conn;
}
goto __pyx_L0;
08951: # A durable-ACK failure after *every* endpoint rejected by role has
08952: # ProtocolVersionError code but is retryable, unlike a genuinely
08953: # unsupported protocol. Capture its native role-rejection marker
08954: # before freeing the error.
+08955: role_reject = questdb_error_is_qwp_ws_role_reject(err)
__pyx_v_role_reject = questdb_error_is_qwp_ws_role_reject(__pyx_v_err);
+08956: exc = c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8956, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_XDECREF_SET(__pyx_v_exc, __pyx_t_4); __pyx_t_4 = 0;
+08957: err = NULL
__pyx_v_err = NULL;
08958: # Read by the caller if this raises below; a later slice that
08959: # connects clears it.
+08960: src.connect_gave_up = src.db != NULL and budget_ms > 0
__pyx_t_2 = (__pyx_v_src->db != NULL);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L10_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_budget_ms > 0);
__pyx_t_1 = __pyx_t_2;
__pyx_L10_bool_binop_done:;
__pyx_v_src->connect_gave_up = __pyx_t_1;
+08961: if last_slice or _is_oidc_terminal_for_foreground(exc):
if (!__pyx_v_last_slice) {
} else {
__pyx_t_1 = __pyx_v_last_slice;
goto __pyx_L13_bool_binop_done;
}
__pyx_t_2 = __pyx_f_7questdb_7_client__is_oidc_terminal_for_foreground(__pyx_v_exc); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8961, __pyx_L1_error)
__pyx_t_1 = __pyx_t_2;
__pyx_L13_bool_binop_done:;
if (unlikely(__pyx_t_1)) {
/* … */
}
+08962: raise exc
__Pyx_Raise(__pyx_v_exc, 0, 0, 0); __PYX_ERR(0, 8962, __pyx_L1_error)
08963: # Native makes one more pick after sleeping to its slice deadline, so
08964: # a terminal error from that pick comes back AT the deadline and the
08965: # timing test below cannot tell it from a retryable one. Re-dialling
08966: # it re-presented the rejected credential and fired a second terminal
08967: # `AuthFailed` event.
+08968: if exc.code in _NATIVE_RECONNECT_TERMINAL_CODES and not role_reject:
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8968, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_NATIVE_RECONNECT_TERMINAL_CODES); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8968, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_4, __pyx_t_5, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8968, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L16_bool_binop_done; } __pyx_t_2 = (!__pyx_v_role_reject); __pyx_t_1 = __pyx_t_2; __pyx_L16_bool_binop_done:; if (unlikely(__pyx_t_1)) { /* … */ }
+08969: raise exc
__Pyx_Raise(__pyx_v_exc, 0, 0, 0); __PYX_ERR(0, 8969, __pyx_L1_error)
+08970: now = time.monotonic()
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8970, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8970, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_3))) {
__pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
assert(__pyx_t_4);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
__Pyx_INCREF(__pyx_t_4);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
__pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8970, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
__pyx_t_8 = __Pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 8970, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__pyx_v_now = __pyx_t_8;
08971: # Native started its slice deadline after `slice_start`, and returns
08972: # a retryable error only once that deadline has passed. Returning
08973: # earlier means native gave up on a terminal error whose code the
08974: # check above may not know. The role-rejection exemption is defensive
08975: # if native ever gains an early-return path for one. The margin
08976: # absorbs a coarse monotonic clock.
+08977: if not role_reject and now < slice_start + (
__pyx_t_2 = (!__pyx_v_role_reject);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L19_bool_binop_done;
}
/* … */
__pyx_t_2 = (__pyx_v_now < (__pyx_v_slice_start + (((double)(__pyx_v_slice_ms - __pyx_v_7questdb_7_client__OIDC_FOREGROUND_SLICE_EARLY_MARGIN_MS)) / 1000.0)));
__pyx_t_1 = __pyx_t_2;
__pyx_L19_bool_binop_done:;
/* … */
if (unlikely(__pyx_t_1)) {
/* … */
}
08978: slice_ms - _OIDC_FOREGROUND_SLICE_EARLY_MARGIN_MS) / 1000.0:
+08979: raise exc
__Pyx_Raise(__pyx_v_exc, 0, 0, 0); __PYX_ERR(0, 8979, __pyx_L1_error)
+08980: remaining = deadline - now
__pyx_v_remaining = (__pyx_v_deadline - __pyx_v_now);
+08981: if remaining <= 0.0:
__pyx_t_1 = (__pyx_v_remaining <= 0.0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+08982: raise exc
__Pyx_Raise(__pyx_v_exc, 0, 0, 0); __PYX_ERR(0, 8982, __pyx_L1_error)
+08983: remaining_ms = <uint64_t>(remaining * 1000.0)
__pyx_v_remaining_ms = ((uint64_t)(__pyx_v_remaining * 1000.0));
+08984: if remaining_ms == 0:
__pyx_t_1 = (__pyx_v_remaining_ms == 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+08985: raise exc
__Pyx_Raise(__pyx_v_exc, 0, 0, 0); __PYX_ERR(0, 8985, __pyx_L1_error)
+08986: slice_ms = slice_ms * 2
__pyx_v_slice_ms = (__pyx_v_slice_ms * 2);
+08987: if slice_ms >= remaining_ms:
__pyx_t_1 = (__pyx_v_slice_ms >= __pyx_v_remaining_ms);
if (__pyx_t_1) {
/* … */
}
}
08988: # The final slice spans the rest of the budget, so its error is
08989: # the one a single native call would have returned.
+08990: slice_ms = remaining_ms
__pyx_v_slice_ms = __pyx_v_remaining_ms;
+08991: last_slice = True
__pyx_v_last_slice = 1;
08992:
08993:
+08994: cdef void _direct_conn_close(
static void __pyx_f_7questdb_7_client__direct_conn_close(struct __pyx_t_7questdb_7_client_direct_conn_source_t *__pyx_v_src, struct qwp_direct_sender *__pyx_v_conn, int __pyx_v_force_drop) {
/* … */
/* function exit code */
}
08995: direct_conn_source_t* src,
08996: qwp_direct_sender* conn,
08997: bint force_drop) noexcept nogil:
+08998: if src.db != NULL:
__pyx_t_1 = (__pyx_v_src->db != NULL);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+08999: if force_drop:
if (__pyx_v_force_drop) {
/* … */
goto __pyx_L4;
}
+09000: questdb_db_drop_direct_sender(src.db, conn)
questdb_db_drop_direct_sender(__pyx_v_src->db, __pyx_v_conn);
09001: else:
+09002: questdb_db_return_direct_sender(src.db, conn)
/*else*/ {
questdb_db_return_direct_sender(__pyx_v_src->db, __pyx_v_conn);
}
__pyx_L4:;
+09003: elif force_drop:
if (__pyx_v_force_drop) {
/* … */
goto __pyx_L3;
}
09004: # Destroying a poolless sender after a failure must discard its
09005: # uncommitted pipelined frames, and `qwp_direct_sender_free`
09006: # commits them best-effort, so the drop entry point is the only
09007: # bound way to get that. It ignores its `db` argument
09008: # (`qwp_sender.h`: "`db` is currently ignored - the sender
09009: # carries its own reference to the pool"), which is what makes
09010: # NULL safe for a handle that never came from a pool.
+09011: questdb_db_drop_direct_sender(NULL, conn)
questdb_db_drop_direct_sender(NULL, __pyx_v_conn);
09012: else:
+09013: qwp_direct_sender_free(conn)
/*else*/ {
qwp_direct_sender_free(__pyx_v_conn);
}
__pyx_L3:;
09014:
09015:
+09016: cdef bint _dataframe_client_try_capsule_path(
static int __pyx_f_7questdb_7_client__dataframe_client_try_capsule_path(struct __pyx_t_7questdb_7_client_direct_conn_source_t *__pyx_v_src, uint64_t __pyx_v_budget_ms, PyObject *__pyx_v_df, PyObject *__pyx_v_table_name, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at, size_t __pyx_v_max_rows_per_batch, PyObject *__pyx_v_validated_overrides, int *__pyx_v_may_have_committed_prefix, int *__pyx_v_nonreplayable_consumed) {
struct qdb_pystr_buf *__pyx_v_b;
struct qwp_direct_sender *__pyx_v_conn;
CYTHON_UNUSED struct line_sender_error *__pyx_v_err;
PyThreadState *__pyx_v_gs;
PyObject *__pyx_v_sliceable = 0;
int __pyx_v_any_flushed;
size_t __pyx_v_deferred_since_sync;
int __pyx_v_force_drop_conn;
PyObject *__pyx_v_row_slice = 0;
PyObject *__pyx_v_first_batch = 0;
PyObject *__pyx_v_schema = 0;
Py_ssize_t __pyx_v_total_rows;
Py_ssize_t __pyx_v_offset;
Py_ssize_t __pyx_v_chunk_rows;
PyObject *__pyx_v_symbol_overrides = 0;
PyObject *__pyx_v_merged_overrides = 0;
int __pyx_v_can_slice;
struct line_sender_table_name __pyx_v_c_table_name;
struct line_sender_column_name __pyx_v_c_ts_column;
struct line_sender_column_name *__pyx_v_c_ts_column_ptr;
struct ArrowSchema __pyx_v_c_schema;
struct qwp_arrow_override *__pyx_v_c_overrides;
size_t __pyx_v_c_overrides_len;
int __pyx_v_at_is_column;
int __pyx_v_at_scalar_set;
int64_t __pyx_v_at_scalar_nanos;
size_t __pyx_v_i;
PyObject *__pyx_v_name_bytes = 0;
PyObject *__pyx_v_roundtrip_overrides = 0;
int __pyx_v_kind_int;
int __pyx_v_arg_int;
PyObject *__pyx_v_pandas_dtypes = 0;
PyObject *__pyx_v_export_dtypes = 0;
PyObject *__pyx_v_binary_names = 0;
PyObject *__pyx_v_unlabelled = 0;
PyObject *__pyx_v_entry = 0;
PyObject *__pyx_9genexpr25__pyx_v_entry = NULL;
int __pyx_r;
__Pyx_INCREF(__pyx_v_at);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_AddTraceback("questdb._client._dataframe_client_try_capsule_path", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_sliceable);
__Pyx_XDECREF(__pyx_v_row_slice);
__Pyx_XDECREF(__pyx_v_first_batch);
__Pyx_XDECREF(__pyx_v_schema);
__Pyx_XDECREF(__pyx_v_symbol_overrides);
__Pyx_XDECREF(__pyx_v_merged_overrides);
__Pyx_XDECREF(__pyx_v_name_bytes);
__Pyx_XDECREF(__pyx_v_roundtrip_overrides);
__Pyx_XDECREF(__pyx_v_pandas_dtypes);
__Pyx_XDECREF(__pyx_v_export_dtypes);
__Pyx_XDECREF(__pyx_v_binary_names);
__Pyx_XDECREF(__pyx_v_unlabelled);
__Pyx_XDECREF(__pyx_v_entry);
__Pyx_XDECREF(__pyx_9genexpr25__pyx_v_entry);
__Pyx_XDECREF(__pyx_v_at);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
09017: direct_conn_source_t* src,
09018: uint64_t budget_ms,
09019: object df,
09020: object table_name,
09021: object symbols,
09022: object at,
09023: size_t max_rows_per_batch,
09024: object validated_overrides,
09025: bint* may_have_committed_prefix,
09026: bint* nonreplayable_consumed) except -1:
+09027: cdef qdb_pystr_buf* b = NULL
__pyx_v_b = NULL;
+09028: cdef qwp_direct_sender* conn = NULL
__pyx_v_conn = NULL;
+09029: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+09030: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+09031: cdef object sliceable = None
__Pyx_INCREF(Py_None);
__pyx_v_sliceable = Py_None;
+09032: cdef bint any_flushed = False
__pyx_v_any_flushed = 0;
+09033: cdef size_t deferred_since_sync = 0
__pyx_v_deferred_since_sync = 0;
+09034: cdef bint force_drop_conn = False
__pyx_v_force_drop_conn = 0;
+09035: cdef object row_slice = None
__Pyx_INCREF(Py_None);
__pyx_v_row_slice = Py_None;
+09036: cdef object first_batch = None
__Pyx_INCREF(Py_None);
__pyx_v_first_batch = Py_None;
09037: cdef object schema
+09038: cdef Py_ssize_t total_rows = 0
__pyx_v_total_rows = 0;
+09039: cdef Py_ssize_t offset = 0
__pyx_v_offset = 0;
09040: cdef Py_ssize_t chunk_rows
09041: cdef object symbol_overrides
09042: cdef object merged_overrides
+09043: cdef bint can_slice = False
__pyx_v_can_slice = 0;
09044: cdef line_sender_table_name c_table_name
09045: cdef line_sender_column_name c_ts_column
+09046: cdef line_sender_column_name* c_ts_column_ptr = NULL
__pyx_v_c_ts_column_ptr = NULL;
09047: cdef ArrowSchema c_schema
+09048: cdef qwp_arrow_override* c_overrides = NULL
__pyx_v_c_overrides = NULL;
+09049: cdef size_t c_overrides_len = 0
__pyx_v_c_overrides_len = 0;
+09050: cdef bint at_is_column = False
__pyx_v_at_is_column = 0;
+09051: cdef bint at_scalar_set = False
__pyx_v_at_scalar_set = 0;
+09052: cdef int64_t at_scalar_nanos = 0
__pyx_v_at_scalar_nanos = 0;
09053: cdef size_t i
09054: cdef object name_bytes
09055: cdef object roundtrip_overrides
09056: cdef int kind_int
09057: cdef int arg_int
+09058: cdef object pandas_dtypes = None
__Pyx_INCREF(Py_None);
__pyx_v_pandas_dtypes = Py_None;
09059: cdef object export_dtypes
+09060: cdef set binary_names = set()
__pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9060, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_binary_names = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
+09061: cdef list unlabelled = []
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9061, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_unlabelled = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
09062: cdef object entry
09063:
+09064: if _is_pandas_dataframe_object(df):
__pyx_t_2 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_df); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 9064, __pyx_L1_error) if (__pyx_t_2) { /* … */ }
09065: # Read once and shared by every per-column pass below: each
09066: # `df.dtypes` builds a fresh Series.
+09067: _dataframe_may_import_deps()
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9067, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+09068: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L1_error;
__pyx_L7_except_return:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L0;
__pyx_L9_try_end:;
}
+09069: pandas_dtypes = df.dtypes
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9069, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_pandas_dtypes, __pyx_t_1); __pyx_t_1 = 0;
+09070: except Exception:
__pyx_t_6 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception)))); if (__pyx_t_6) { __Pyx_ErrRestore(0,0,0);
+09071: return False
{
__pyx_r = 0;
}
goto __pyx_L7_except_return;
}
goto __pyx_L6_except_error;
+09072: if _pandas_dtypes_require_manual_planner(pandas_dtypes):
__pyx_t_2 = __pyx_f_7questdb_7_client__pandas_dtypes_require_manual_planner(__pyx_v_pandas_dtypes); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 9072, __pyx_L1_error)
if (__pyx_t_2) {
/* … */
}
+09073: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+09074: if _pandas_dataframe_is_timestamp_only_at(df, at):
__pyx_t_2 = __pyx_f_7questdb_7_client__pandas_dataframe_is_timestamp_only_at(__pyx_v_df, __pyx_v_at); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 9074, __pyx_L1_error)
if (__pyx_t_2) {
/* … */
}
+09075: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
09076:
09077: # LazyFrame: use the streaming engine (polars 1.32+) for lower peak
09078: # memory. `LazyFrame.collect_batches()` would stream natively but
09079: # upstream marks it unstable and "much slower than native sinks", so
09080: # we materialize and slice downstream.
+09081: if _is_polars_dataframe_or_lazy(df) and isinstance(
__pyx_t_7 = __pyx_f_7questdb_7_client__is_polars_dataframe_or_lazy(__pyx_v_df); if (unlikely(__pyx_t_7 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 9081, __pyx_L1_error) if (__pyx_t_7) { } else { __pyx_t_2 = __pyx_t_7; goto __pyx_L15_bool_binop_done; } /* … */ __pyx_t_7 = PyObject_IsInstance(__pyx_v_df, __pyx_t_1); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 9081, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = __pyx_t_7; __pyx_L15_bool_binop_done:; if (__pyx_t_2) { /* … */ goto __pyx_L14; }
+09082: df, _POLARS_LAZYFRAME_T):
__pyx_t_1 = __pyx_v_7questdb_7_client__POLARS_LAZYFRAME_T;
__Pyx_INCREF(__pyx_t_1);
+09083: sliceable = df.collect(engine='streaming')
__pyx_t_8 = __pyx_v_df;
__Pyx_INCREF(__pyx_t_8);
#if CYTHON_VECTORCALL
#endif
__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[44];
if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 9083, __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, 9083, __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;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9083, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF_SET(__pyx_v_sliceable, __pyx_t_1);
__pyx_t_1 = 0;
/* … */
{
PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_engine};
__pyx_mstate_global->__pyx_tuple[44] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[44])) __PYX_ERR(0, 9083, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[44]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[44]);
+09084: elif hasattr(df, '__arrow_c_stream__'):
__pyx_t_2 = __Pyx_HasAttr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_arrow_c_stream_2); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 9084, __pyx_L1_error) if (__pyx_t_2) { /* … */ goto __pyx_L14; }
+09085: sliceable = df
__Pyx_INCREF(__pyx_v_df); __Pyx_DECREF_SET(__pyx_v_sliceable, __pyx_v_df);
+09086: elif hasattr(df, '__arrow_c_array__'):
__pyx_t_2 = __Pyx_HasAttr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_arrow_c_array); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 9086, __pyx_L1_error) if (__pyx_t_2) { /* … */ goto __pyx_L14; }
+09087: _dataframe_require_pyarrow()
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_require_pyarrow(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9087, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+09088: sliceable = _PYARROW.Table.from_batches(
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_Table); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9088, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_10 = __pyx_t_8; __Pyx_INCREF(__pyx_t_10);
+09089: [_PYARROW.record_batch(df)])
__pyx_t_12 = __pyx_v_7questdb_7_client__PYARROW;
__Pyx_INCREF(__pyx_t_12);
__pyx_t_9 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_v_df};
__pyx_t_11 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_record_batch, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 9089, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
}
__pyx_t_12 = PyList_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 9089, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_12);
__Pyx_GIVEREF(__pyx_t_11);
if (__Pyx_PyList_SET_ITEM(__pyx_t_12, 0, __pyx_t_11) != (0)) __PYX_ERR(0, 9089, __pyx_L1_error);
__pyx_t_11 = 0;
__pyx_t_9 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_t_12};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_batches, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9088, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF_SET(__pyx_v_sliceable, __pyx_t_1);
__pyx_t_1 = 0;
09090: else:
+09091: return False
/*else*/ {
{
__pyx_r = 0;
}
goto __pyx_L0;
}
__pyx_L14:;
09092:
+09093: _reject_polars_object_columns(sliceable)
__pyx_t_13 = __pyx_f_7questdb_7_client__reject_polars_object_columns(__pyx_v_sliceable); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9093, __pyx_L1_error)
09094:
+09095: total_rows = _capsule_row_count(sliceable)
__pyx_t_14 = __pyx_f_7questdb_7_client__capsule_row_count(__pyx_v_sliceable); if (unlikely(__pyx_t_14 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 9095, __pyx_L1_error)
__pyx_v_total_rows = __pyx_t_14;
09096:
+09097: if not isinstance(table_name, str):
__pyx_t_2 = PyUnicode_Check(__pyx_v_table_name);
__pyx_t_7 = (!__pyx_t_2);
if (unlikely(__pyx_t_7)) {
/* … */
}
+09098: raise TypeError(
__pyx_t_8 = NULL;
__pyx_t_9 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_mstate_global->__pyx_kp_u_table_name_must_be_str_for_Arrow};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9098, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 9098, __pyx_L1_error)
09099: 'table_name must be str for Arrow-native DataFrame input.')
+09100: if at is None or isinstance(at, ServerTimestampType):
__pyx_t_2 = (__pyx_v_at == Py_None);
if (!__pyx_t_2) {
} else {
__pyx_t_7 = __pyx_t_2;
goto __pyx_L19_bool_binop_done;
}
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ServerTimestampType); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9100, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_2 = PyObject_IsInstance(__pyx_v_at, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 9100, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_7 = __pyx_t_2;
__pyx_L19_bool_binop_done:;
if (__pyx_t_7) {
/* … */
goto __pyx_L18;
}
+09101: at_is_column = False
__pyx_v_at_is_column = 0;
+09102: elif isinstance(at, TimestampNanos):
__pyx_t_7 = __Pyx_TypeCheck(__pyx_v_at, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos);
if (__pyx_t_7) {
/* … */
goto __pyx_L18;
}
+09103: at_scalar_set = True
__pyx_v_at_scalar_set = 1;
+09104: at_scalar_nanos = (<TimestampNanos>at)._value
__pyx_t_15 = ((struct __pyx_obj_7questdb_7_client_TimestampNanos *)__pyx_v_at)->_value;
__pyx_v_at_scalar_nanos = __pyx_t_15;
+09105: elif isinstance(at, datetime.datetime):
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9105, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9105, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_7 = PyObject_IsInstance(__pyx_v_at, __pyx_t_8); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 9105, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (__pyx_t_7) { /* … */ goto __pyx_L18; }
+09106: at_scalar_set = True
__pyx_v_at_scalar_set = 1;
+09107: at_scalar_nanos = datetime_to_nanos(at)
if (!(likely(((__pyx_v_at) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_at, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(0, 9107, __pyx_L1_error) __pyx_t_15 = __pyx_f_7questdb_7_client_datetime_to_nanos(((PyDateTime_DateTime *)__pyx_v_at)); if (unlikely(__pyx_t_15 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 9107, __pyx_L1_error) __pyx_v_at_scalar_nanos = __pyx_t_15;
+09108: elif isinstance(at, str):
__pyx_t_7 = PyUnicode_Check(__pyx_v_at);
if (__pyx_t_7) {
/* … */
goto __pyx_L18;
}
+09109: at_is_column = True
__pyx_v_at_is_column = 1;
+09110: elif isinstance(at, int) and not isinstance(at, bool):
__pyx_t_2 = PyLong_Check(__pyx_v_at); if (__pyx_t_2) { } else { __pyx_t_7 = __pyx_t_2; goto __pyx_L21_bool_binop_done; } __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_at, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); __pyx_t_16 = (!__pyx_t_2); __pyx_t_7 = __pyx_t_16; __pyx_L21_bool_binop_done:; if (likely(__pyx_t_7)) { /* … */ goto __pyx_L18; }
+09111: at = _capsule_at_index_to_name(sliceable, at)
__pyx_t_6 = __Pyx_PyLong_As_int(__pyx_v_at); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 9111, __pyx_L1_error) __pyx_t_8 = __pyx_f_7questdb_7_client__capsule_at_index_to_name(__pyx_v_sliceable, __pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF_SET(__pyx_v_at, __pyx_t_8); __pyx_t_8 = 0;
+09112: at_is_column = True
__pyx_v_at_is_column = 1;
09113: else:
+09114: raise TypeError(
/*else*/ {
__pyx_t_1 = NULL;
__pyx_t_9 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_mstate_global->__pyx_kp_u_at_must_be_a_column_name_str_int};
__pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9114, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
}
__Pyx_Raise(__pyx_t_8, 0, 0, 0);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__PYX_ERR(0, 9114, __pyx_L1_error)
}
__pyx_L18:;
09115: 'at must be a column name str, int index, TimestampNanos, '
09116: 'datetime, ServerTimestamp, or None for Arrow-native DataFrame '
09117: 'input.')
09118:
09119: # An empty frame is a no-op: it emits nothing and is never exported,
09120: # so it skips the name check and symbol-shape validation.
+09121: if total_rows == 0:
__pyx_t_7 = (__pyx_v_total_rows == 0);
if (__pyx_t_7) {
/* … */
}
+09122: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
09123:
+09124: _reject_nul_column_names(sliceable)
__pyx_t_13 = __pyx_f_7questdb_7_client__reject_nul_column_names(__pyx_v_sliceable); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9124, __pyx_L1_error)
09125:
+09126: if _is_pandas_dataframe_object(sliceable):
__pyx_t_7 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_sliceable); if (unlikely(__pyx_t_7 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 9126, __pyx_L1_error) if (__pyx_t_7) { /* … */ goto __pyx_L24; }
+09127: if _PYARROW is None:
__pyx_t_7 = (__pyx_v_7questdb_7_client__PYARROW == Py_None);
if (__pyx_t_7) {
/* … */
}
+09128: _dataframe_require_pyarrow()
__pyx_t_8 = __pyx_f_7questdb_7_client__dataframe_require_pyarrow(); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9128, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+09129: if not hasattr(_PYARROW.Table, '__arrow_c_stream__'):
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_Table); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9129, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_7 = __Pyx_HasAttr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_arrow_c_stream_2); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 9129, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_16 = (!__pyx_t_7); if (unlikely(__pyx_t_16)) { /* … */ }
+09130: raise ImportError(
__pyx_t_1 = NULL;
+09131: '`pyarrow` >= 14.0.0 is required for Arrow-backed pandas '
__pyx_t_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, 9131, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_12);
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
__pyx_t_9 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_12};
__pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ImportError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9130, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
}
__Pyx_Raise(__pyx_t_8, 0, 0, 0);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__PYX_ERR(0, 9130, __pyx_L1_error)
+09132: f'DataFrames (version {_PYARROW.__version__} is installed). '
__pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_version_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 9132, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_10 = __Pyx_PyObject_FormatSimple(__pyx_t_12, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 9132, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_17[0] = __pyx_mstate_global->__pyx_kp_u_pyarrow_14_0_0_is_required_for; __pyx_t_17[1] = __pyx_t_10; __pyx_t_17[2] = __pyx_mstate_global->__pyx_kp_u_is_installed_Upgrade_with_pip_i;
09133: 'Upgrade with `pip install -U pyarrow`.')
+09134: chunk_rows = max_rows_per_batch
__pyx_v_chunk_rows = __pyx_v_max_rows_per_batch;
+09135: if chunk_rows > total_rows:
__pyx_t_16 = (__pyx_v_chunk_rows > __pyx_v_total_rows);
if (__pyx_t_16) {
/* … */
}
+09136: chunk_rows = total_rows
__pyx_v_chunk_rows = __pyx_v_total_rows;
+09137: first_batch = _PYARROW.Table.from_pandas(
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_Table); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9137, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_12 = __pyx_t_1; __Pyx_INCREF(__pyx_t_12);
+09138: _capsule_slice_rows(sliceable, 0, chunk_rows))
__pyx_t_10 = __pyx_f_7questdb_7_client__capsule_slice_rows(__pyx_v_sliceable, 0, __pyx_v_chunk_rows); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 9138, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_9 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_10}; __pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_pandas, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9137, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_DECREF_SET(__pyx_v_first_batch, __pyx_t_8); __pyx_t_8 = 0;
+09139: schema = first_batch.schema
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_first_batch, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9139, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_v_schema = __pyx_t_8; __pyx_t_8 = 0;
09140: else:
+09141: schema = _capsule_schema(sliceable, symbols)
/*else*/ {
__pyx_t_8 = __pyx_f_7questdb_7_client__capsule_schema(__pyx_v_sliceable, __pyx_v_symbols); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9141, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_v_schema = __pyx_t_8;
__pyx_t_8 = 0;
}
__pyx_L24:;
+09142: symbol_overrides = _resolve_symbols_to_overrides(
__pyx_t_8 = __pyx_f_7questdb_7_client__resolve_symbols_to_overrides(__pyx_v_sliceable, __pyx_v_schema, __pyx_v_symbols); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9142, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_v_symbol_overrides = __pyx_t_8; __pyx_t_8 = 0;
09143: sliceable, schema, symbols)
+09144: if symbol_overrides is None:
__pyx_t_16 = (__pyx_v_symbol_overrides == Py_None);
if (__pyx_t_16) {
/* … */
}
+09145: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+09146: merged_overrides = _merge_capsule_overrides(
__pyx_t_8 = __pyx_f_7questdb_7_client__merge_capsule_overrides(__pyx_v_symbol_overrides, __pyx_v_validated_overrides); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9146, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_v_merged_overrides = __pyx_t_8; __pyx_t_8 = 0;
09147: symbol_overrides, validated_overrides)
09148: # The claim lookup and the refusal judge each exported column by its
09149: # pandas dtype, and the export includes the frame's index levels.
+09150: export_dtypes = _pandas_export_dtypes(df, pandas_dtypes)
__pyx_t_8 = __pyx_f_7questdb_7_client__pandas_export_dtypes(__pyx_v_df, __pyx_v_pandas_dtypes); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9150, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_v_export_dtypes = __pyx_t_8; __pyx_t_8 = 0;
+09151: roundtrip_overrides = _capsule_roundtrip_overrides(
__pyx_t_8 = __pyx_f_7questdb_7_client__capsule_roundtrip_overrides(__pyx_v_sliceable, __pyx_v_export_dtypes); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9151, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_v_roundtrip_overrides = __pyx_t_8; __pyx_t_8 = 0;
09152: sliceable, export_dtypes)
+09153: merged_overrides = _merge_capsule_overrides(
__pyx_t_8 = __pyx_f_7questdb_7_client__merge_capsule_overrides(__pyx_v_roundtrip_overrides, __pyx_v_merged_overrides); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9153, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF_SET(__pyx_v_merged_overrides, __pyx_t_8); __pyx_t_8 = 0;
09154: roundtrip_overrides, merged_overrides)
+09155: _refuse_unlabelled_fsb_pandas_columns(
__pyx_t_13 = __pyx_f_7questdb_7_client__refuse_unlabelled_fsb_pandas_columns(__pyx_v_df, __pyx_v_export_dtypes, __pyx_v_merged_overrides); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9155, __pyx_L1_error)
09156: df, export_dtypes, merged_overrides)
+09157: if merged_overrides:
__pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_v_merged_overrides); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 9157, __pyx_L1_error) if (__pyx_t_16) { /* … */ }
09158: # A `'binary'` override is a label for this client alone; the
09159: # native ingest gets the rest.
+09160: for entry in merged_overrides:
if (likely(PyList_CheckExact(__pyx_v_merged_overrides)) || PyTuple_CheckExact(__pyx_v_merged_overrides)) { __pyx_t_8 = __pyx_v_merged_overrides; __Pyx_INCREF(__pyx_t_8); __pyx_t_14 = 0; __pyx_t_18 = NULL; } else { __pyx_t_14 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_v_merged_overrides); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_18 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_8); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 9160, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_18)) { if (likely(PyList_CheckExact(__pyx_t_8))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_8); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 9160, __pyx_L1_error) #endif if (__pyx_t_14 >= __pyx_temp) break; } __pyx_t_1 = __Pyx_PyList_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, 9160, __pyx_L1_error) #endif if (__pyx_t_14 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_14)); #else __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_8, __pyx_t_14); #endif ++__pyx_t_14; } if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9160, __pyx_L1_error) } else { __pyx_t_1 = __pyx_t_18(__pyx_t_8); if (unlikely(!__pyx_t_1)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 9160, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_1); __pyx_t_1 = 0; /* … */ } __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+09161: if entry[1] == _SCHEMA_OVERRIDE_BINARY:
__pyx_t_1 = __Pyx_GetItemInt(__pyx_v_entry, 1, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9161, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_10 = __Pyx_PyLong_From_int(__pyx_v_7questdb_7_client__SCHEMA_OVERRIDE_BINARY); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 9161, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_16 = __Pyx_PyObject_CompareBoolEq_object_int(__pyx_t_1, __pyx_t_10, Py_EQ); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 9161, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (__pyx_t_16) { /* … */ }
+09162: 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, 9162, __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, 9162, __pyx_L1_error) __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+09163: if binary_names:
{
Py_ssize_t __pyx_temp = __Pyx_PySet_GET_SIZE(__pyx_v_binary_names);
if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 9163, __pyx_L1_error)
__pyx_t_16 = (__pyx_temp != 0);
}
if (__pyx_t_16) {
/* … */
}
+09164: merged_overrides = [
{ /* enter inner scope */
__pyx_t_10 = PyList_New(0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 9164, __pyx_L39_error)
__Pyx_GOTREF(__pyx_t_10);
+09165: 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, 9165, __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, 9165, __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, 9165, __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, 9165, __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, 9165, __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, 9165, __pyx_L39_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_12); __Pyx_XDECREF_SET(__pyx_9genexpr25__pyx_v_entry, __pyx_t_12); __pyx_t_12 = 0; /* … */ if (unlikely(__Pyx_ListComp_Append(__pyx_t_10, __pyx_9genexpr25__pyx_v_entry))) __PYX_ERR(0, 9164, __pyx_L39_error) /* … */ } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_9genexpr25__pyx_v_entry); __pyx_9genexpr25__pyx_v_entry = 0; goto __pyx_L44_exit_scope; __pyx_L39_error:; __Pyx_XDECREF(__pyx_9genexpr25__pyx_v_entry); __pyx_9genexpr25__pyx_v_entry = 0; goto __pyx_L1_error; __pyx_L44_exit_scope:; } /* exit inner scope */ __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 9164, __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; }
+09166: if entry[1] != _SCHEMA_OVERRIDE_BINARY] or None
__pyx_t_12 = __Pyx_GetItemInt(__pyx_9genexpr25__pyx_v_entry, 1, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 9166, __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, 9166, __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, 9166, __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;
09167:
+09168: can_slice = (total_rows >= 0) and (
__pyx_t_7 = (__pyx_v_total_rows >= 0);
if (__pyx_t_7) {
} else {
__pyx_t_16 = __pyx_t_7;
goto __pyx_L45_bool_binop_done;
}
+09169: hasattr(sliceable, 'slice')
__pyx_t_7 = __Pyx_HasAttr(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_slice); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 9169, __pyx_L1_error) if (!__pyx_t_7) { } else { __pyx_t_16 = __pyx_t_7; goto __pyx_L45_bool_binop_done; }
+09170: or _is_pandas_dataframe_object(sliceable))
__pyx_t_7 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_sliceable); if (unlikely(__pyx_t_7 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 9170, __pyx_L1_error) __pyx_t_16 = __pyx_t_7; __pyx_L45_bool_binop_done:; __pyx_v_can_slice = __pyx_t_16;
09171:
+09172: b = qdb_pystr_buf_new()
__pyx_v_b = qdb_pystr_buf_new();
+09173: memset(&c_schema, 0, sizeof(ArrowSchema))
(void)(memset((&__pyx_v_c_schema), 0, (sizeof(struct ArrowSchema))));
+09174: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L53_try_end;
__pyx_L48_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L50_except_error:;
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_5, __pyx_t_4, __pyx_t_3);
goto __pyx_L1_error;
__pyx_L53_try_end:;
}
+09175: try:
/*try:*/ {
+09176: str_to_table_name(b, <PyObject*>table_name, &c_table_name)
__pyx_t_13 = __pyx_f_7questdb_7_client_str_to_table_name(__pyx_v_b, ((PyObject *)__pyx_v_table_name), (&__pyx_v_c_table_name)); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9176, __pyx_L55_error)
+09177: if at_is_column:
if (__pyx_v_at_is_column) {
/* … */
}
+09178: str_to_column_name(b, at, &c_ts_column)
__pyx_t_8 = __pyx_v_at;
__Pyx_INCREF(__pyx_t_8);
if (!(likely(PyUnicode_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_8))) __PYX_ERR(0, 9178, __pyx_L55_error)
__pyx_t_13 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_v_b, ((PyObject*)__pyx_t_8), (&__pyx_v_c_ts_column)); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9178, __pyx_L55_error)
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+09179: c_ts_column_ptr = &c_ts_column
__pyx_v_c_ts_column_ptr = (&__pyx_v_c_ts_column);
09180:
+09181: if merged_overrides is not None:
__pyx_t_16 = (__pyx_v_merged_overrides != Py_None);
if (__pyx_t_16) {
/* … */
}
+09182: c_overrides_len = len(merged_overrides)
__pyx_t_14 = PyObject_Length(__pyx_v_merged_overrides); if (unlikely(__pyx_t_14 == ((Py_ssize_t)-1))) __PYX_ERR(0, 9182, __pyx_L55_error) __pyx_v_c_overrides_len = __pyx_t_14;
+09183: c_overrides = <qwp_arrow_override*>calloc(
__pyx_v_c_overrides = ((struct qwp_arrow_override *)calloc(__pyx_v_c_overrides_len, (sizeof(struct qwp_arrow_override))));
09184: c_overrides_len, sizeof(qwp_arrow_override))
+09185: if c_overrides == NULL:
__pyx_t_16 = (__pyx_v_c_overrides == NULL);
if (unlikely(__pyx_t_16)) {
/* … */
}
+09186: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 9186, __pyx_L55_error)
+09187: for i in range(c_overrides_len):
__pyx_t_9 = __pyx_v_c_overrides_len;
__pyx_t_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;
+09188: name_bytes, kind_int, arg_int = merged_overrides[i]
__pyx_t_8 = __Pyx_GetItemInt(__pyx_v_merged_overrides, __pyx_v_i, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9188, __pyx_L55_error) __Pyx_GOTREF(__pyx_t_8); if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) { PyObject* sequence = __pyx_t_8; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 3)) { if (size > 3) __Pyx_RaiseTooManyValuesError(3); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 9188, __pyx_L55_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_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, 9188, __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, 9188, __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, 9188, __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, 9188, __pyx_L55_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9188, __pyx_L55_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_11 = __Pyx_PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 9188, __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, 9188, __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, 9188, __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, 9188, __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, 9188, __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, 9188, __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;
+09189: 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, 9189, __pyx_L55_error) (__pyx_v_c_overrides[__pyx_v_i]).column = __pyx_t_24;
+09190: c_overrides[i].column_len = PyBytes_GET_SIZE(name_bytes)
(__pyx_v_c_overrides[__pyx_v_i]).column_len = PyBytes_GET_SIZE(__pyx_v_name_bytes);
+09191: c_overrides[i].kind = <uint32_t>kind_int
(__pyx_v_c_overrides[__pyx_v_i]).kind = ((uint32_t)__pyx_v_kind_int);
+09192: c_overrides[i].arg = <uint32_t>arg_int
(__pyx_v_c_overrides[__pyx_v_i]).arg = ((uint32_t)__pyx_v_arg_int);
}
09193:
+09194: conn = _direct_conn_open_checked(src, budget_ms)
__pyx_t_25 = __pyx_f_7questdb_7_client__direct_conn_open_checked(__pyx_v_src, __pyx_v_budget_ms); if (unlikely(__pyx_t_25 == ((void *)NULL))) __PYX_ERR(0, 9194, __pyx_L55_error)
__pyx_v_conn = __pyx_t_25;
09195:
+09196: try:
{
/*try:*/ {
/* … */
}
__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;
goto __pyx_L69_try_end;
__pyx_L64_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L66_except_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);
goto __pyx_L55_error;
__pyx_L69_try_end:;
}
}
+09197: if not can_slice:
__pyx_t_16 = (!__pyx_v_can_slice);
if (__pyx_t_16) {
/* … */
goto __pyx_L70;
}
09198: # A one-shot stream (e.g. RecordBatchReader) cannot be
09199: # re-exported for a whole-frame replay: a failed attempt
09200: # must surface instead of retrying with the drained rest.
+09201: nonreplayable_consumed[0] = True
(__pyx_v_nonreplayable_consumed[0]) = 1;
+09202: _capsule_consume_stream_with_hint(
__pyx_t_13 = __pyx_f_7questdb_7_client__capsule_consume_stream_with_hint(__pyx_v_conn, __pyx_v_sliceable, __pyx_v_c_table_name, __pyx_v_c_ts_column_ptr, __pyx_v_at_scalar_set, __pyx_v_at_scalar_nanos, (&__pyx_v_c_schema), __pyx_v_c_overrides, __pyx_v_c_overrides_len, (&__pyx_v_any_flushed), (&__pyx_v_deferred_since_sync), __pyx_v_may_have_committed_prefix, __pyx_v_max_rows_per_batch, 0, __pyx_v_binary_names, __pyx_v_unlabelled); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9202, __pyx_L64_error)
09203: conn, sliceable, c_table_name, c_ts_column_ptr,
09204: at_scalar_set, at_scalar_nanos,
09205: &c_schema, c_overrides, c_overrides_len,
09206: &any_flushed, &deferred_since_sync,
09207: may_have_committed_prefix, max_rows_per_batch, False,
09208: binary_names, unlabelled)
09209: else:
+09210: offset = 0
/*else*/ {
__pyx_v_offset = 0;
+09211: while offset < total_rows:
while (1) {
__pyx_t_16 = (__pyx_v_offset < __pyx_v_total_rows);
if (!__pyx_t_16) break;
+09212: chunk_rows = max_rows_per_batch
__pyx_v_chunk_rows = __pyx_v_max_rows_per_batch;
+09213: if chunk_rows > total_rows - offset:
__pyx_t_16 = (__pyx_v_chunk_rows > (__pyx_v_total_rows - __pyx_v_offset));
if (__pyx_t_16) {
/* … */
}
+09214: chunk_rows = total_rows - offset
__pyx_v_chunk_rows = (__pyx_v_total_rows - __pyx_v_offset);
+09215: if first_batch is not None:
__pyx_t_16 = (__pyx_v_first_batch != Py_None);
if (__pyx_t_16) {
/* … */
goto __pyx_L74;
}
+09216: row_slice = first_batch
__Pyx_INCREF(__pyx_v_first_batch); __Pyx_DECREF_SET(__pyx_v_row_slice, __pyx_v_first_batch);
+09217: first_batch = None
__Pyx_INCREF(Py_None); __Pyx_DECREF_SET(__pyx_v_first_batch, Py_None);
09218: else:
+09219: row_slice = _capsule_slice_rows(
/*else*/ {
/* … */
__pyx_t_8 = __pyx_f_7questdb_7_client__capsule_slice_rows(__pyx_v_sliceable, __pyx_v_offset, __pyx_v_chunk_rows); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9219, __pyx_L64_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF_SET(__pyx_v_row_slice, __pyx_t_8);
__pyx_t_8 = 0;
}
__pyx_L74:;
09220: sliceable, offset, chunk_rows)
+09221: _capsule_consume_stream_with_hint(
__pyx_t_13 = __pyx_f_7questdb_7_client__capsule_consume_stream_with_hint(__pyx_v_conn, __pyx_v_row_slice, __pyx_v_c_table_name, __pyx_v_c_ts_column_ptr, __pyx_v_at_scalar_set, __pyx_v_at_scalar_nanos, (&__pyx_v_c_schema), __pyx_v_c_overrides, __pyx_v_c_overrides_len, (&__pyx_v_any_flushed), (&__pyx_v_deferred_since_sync), __pyx_v_may_have_committed_prefix, __pyx_v_max_rows_per_batch, 1, __pyx_v_binary_names, __pyx_v_unlabelled); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9221, __pyx_L64_error)
09222: conn, row_slice, c_table_name, c_ts_column_ptr,
09223: at_scalar_set, at_scalar_nanos,
09224: &c_schema, c_overrides, c_overrides_len,
09225: &any_flushed, &deferred_since_sync,
09226: may_have_committed_prefix, max_rows_per_batch, True,
09227: binary_names, unlabelled)
+09228: offset += chunk_rows
__pyx_v_offset = (__pyx_v_offset + __pyx_v_chunk_rows);
}
}
__pyx_L70:;
+09229: if any_flushed:
if (__pyx_v_any_flushed) {
/* … */
}
+09230: _dataframe_columnar_sync(conn)
__pyx_t_13 = __pyx_f_7questdb_7_client__dataframe_columnar_sync(__pyx_v_conn); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9230, __pyx_L64_error)
+09231: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._dataframe_client_try_capsule_path", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_11, &__pyx_t_1) < 0) __PYX_ERR(0, 9231, __pyx_L66_except_error)
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_1);
+09232: force_drop_conn = _dataframe_columnar_force_drop_after_error(
__pyx_v_force_drop_conn = __pyx_f_7questdb_7_client__dataframe_columnar_force_drop_after_error(__pyx_v_conn, __pyx_v_any_flushed);
09233: conn, any_flushed)
+09234: raise
__Pyx_GIVEREF(__pyx_t_8); __Pyx_GIVEREF(__pyx_t_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, 9234, __pyx_L66_except_error) }
09235: finally:
+09236: _ensure_has_gil(&gs)
/*finally:*/ {
/*normal exit:*/{
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
/* … */
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+09237: if conn != NULL:
__pyx_t_16 = (__pyx_v_conn != NULL);
if (__pyx_t_16) {
/* … */
}
/* … */
__pyx_t_16 = (__pyx_v_conn != NULL);
if (__pyx_t_16) {
/* … */
}
+09238: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L81;
}
__pyx_L81:;
}
}
/* … */
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L90;
}
__pyx_L90:;
}
}
+09239: _direct_conn_close(src, conn, force_drop_conn)
__pyx_f_7questdb_7_client__direct_conn_close(__pyx_v_src, __pyx_v_conn, __pyx_v_force_drop_conn);
}
/* … */
__pyx_f_7questdb_7_client__direct_conn_close(__pyx_v_src, __pyx_v_conn, __pyx_v_force_drop_conn);
}
+09240: if c_schema.release != NULL:
__pyx_t_16 = (__pyx_v_c_schema.release != NULL);
if (__pyx_t_16) {
/* … */
}
/* … */
__pyx_t_16 = (__pyx_v_c_schema.release != NULL);
if (__pyx_t_16) {
/* … */
}
+09241: c_schema.release(&c_schema)
__pyx_v_c_schema.release((&__pyx_v_c_schema));
/* … */
__pyx_v_c_schema.release((&__pyx_v_c_schema));
+09242: if c_overrides != NULL:
__pyx_t_16 = (__pyx_v_c_overrides != NULL);
if (__pyx_t_16) {
/* … */
}
/* … */
__pyx_t_16 = (__pyx_v_c_overrides != NULL);
if (__pyx_t_16) {
/* … */
}
+09243: free(c_overrides)
free(__pyx_v_c_overrides);
/* … */
free(__pyx_v_c_overrides);
+09244: if b != NULL:
__pyx_t_16 = (__pyx_v_b != NULL);
if (__pyx_t_16) {
/* … */
}
goto __pyx_L56;
}
__pyx_L55_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_28 = 0; __pyx_t_27 = 0; __pyx_t_26 = 0; __pyx_t_30 = 0; __pyx_t_31 = 0; __pyx_t_32 = 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_30, &__pyx_t_31, &__pyx_t_32);
if ( unlikely(__Pyx_GetException(&__pyx_t_28, &__pyx_t_27, &__pyx_t_26) < 0)) __Pyx_ErrFetch(&__pyx_t_28, &__pyx_t_27, &__pyx_t_26);
__Pyx_XGOTREF(__pyx_t_28);
__Pyx_XGOTREF(__pyx_t_27);
__Pyx_XGOTREF(__pyx_t_26);
__Pyx_XGOTREF(__pyx_t_30);
__Pyx_XGOTREF(__pyx_t_31);
__Pyx_XGOTREF(__pyx_t_32);
__pyx_t_23 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_29 = __pyx_filename;
{
/* … */
__pyx_t_16 = (__pyx_v_b != NULL);
if (__pyx_t_16) {
/* … */
}
}
__Pyx_XGIVEREF(__pyx_t_30);
__Pyx_XGIVEREF(__pyx_t_31);
__Pyx_XGIVEREF(__pyx_t_32);
__Pyx_ExceptionReset(__pyx_t_30, __pyx_t_31, __pyx_t_32);
__Pyx_XGIVEREF(__pyx_t_28);
__Pyx_XGIVEREF(__pyx_t_27);
__Pyx_XGIVEREF(__pyx_t_26);
__Pyx_ErrRestore(__pyx_t_28, __pyx_t_27, __pyx_t_26);
__pyx_t_28 = 0; __pyx_t_27 = 0; __pyx_t_26 = 0; __pyx_t_30 = 0; __pyx_t_31 = 0; __pyx_t_32 = 0;
__pyx_lineno = __pyx_t_23; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_29;
goto __pyx_L48_error;
}
__pyx_L56:;
}
+09245: qdb_pystr_buf_free(b)
qdb_pystr_buf_free(__pyx_v_b);
/* … */
qdb_pystr_buf_free(__pyx_v_b);
+09246: except BaseException:
__pyx_t_6 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_6) { __Pyx_AddTraceback("questdb._client._dataframe_client_try_capsule_path", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_11, &__pyx_t_8) < 0) __PYX_ERR(0, 9246, __pyx_L50_except_error) __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_11); __Pyx_XGOTREF(__pyx_t_8);
09247: # A batch that went out may have created the table with these
09248: # columns as BINARY, so a failed write still reports them, once
09249: # its connection is closed. The write's own error is the one the
09250: # caller needs, so a handler that raises is not let replace it.
+09251: if any_flushed:
if (__pyx_v_any_flushed) {
/* … */
}
+09252: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_32); __pyx_t_32 = 0;
__Pyx_XDECREF(__pyx_t_31); __pyx_t_31 = 0;
__Pyx_XDECREF(__pyx_t_30); __pyx_t_30 = 0;
goto __pyx_L104_try_end;
__pyx_L97_error:;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
/* … */
__pyx_L99_except_error:;
__Pyx_XGIVEREF(__pyx_t_32);
__Pyx_XGIVEREF(__pyx_t_31);
__Pyx_XGIVEREF(__pyx_t_30);
__Pyx_ExceptionReset(__pyx_t_32, __pyx_t_31, __pyx_t_30);
goto __pyx_L50_except_error;
__pyx_L98_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_32);
__Pyx_XGIVEREF(__pyx_t_31);
__Pyx_XGIVEREF(__pyx_t_30);
__Pyx_ExceptionReset(__pyx_t_32, __pyx_t_31, __pyx_t_30);
__pyx_L104_try_end:;
}
+09253: _log_unlabelled_fsb_columns(unlabelled)
__pyx_t_13 = __pyx_f_7questdb_7_client__log_unlabelled_fsb_columns(__pyx_v_unlabelled); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9253, __pyx_L97_error)
+09254: except Exception:
__pyx_t_6 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception)))); if (__pyx_t_6) { __Pyx_ErrRestore(0,0,0); goto __pyx_L98_exception_handled; } goto __pyx_L99_except_error;
09255: pass
+09256: raise
__Pyx_GIVEREF(__pyx_t_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, 9256, __pyx_L50_except_error) } goto __pyx_L50_except_error;
09257: # Only once the write has gone through and its connection is closed,
09258: # so a logging handler cannot re-enter a write in progress.
+09259: _log_unlabelled_fsb_columns(unlabelled)
__pyx_t_13 = __pyx_f_7questdb_7_client__log_unlabelled_fsb_columns(__pyx_v_unlabelled); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9259, __pyx_L1_error)
+09260: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
09261:
09262:
+09263: cdef void_int _dataframe_numpy_publish(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_numpy_publish(struct __pyx_t_7questdb_7_client_direct_conn_source_t *__pyx_v_src, uint64_t __pyx_v_budget_ms, struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan, PyObject *__pyx_v_df, PyObject *__pyx_v_table_name, PyObject *__pyx_v_table_name_col, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at, size_t __pyx_v_max_rows_per_batch, int *__pyx_v_may_have_committed_prefix) {
struct qwp_chunk *__pyx_v_chunk;
struct qwp_direct_sender *__pyx_v_conn;
struct line_sender_error *__pyx_v_err;
PyThreadState *__pyx_v_gs;
int __pyx_v_flushed;
int __pyx_v_force_drop_conn;
size_t __pyx_v_rows_per_chunk;
size_t __pyx_v_row_offset;
size_t __pyx_v_chunk_rows;
__pyx_t_7questdb_7_client_void_int __pyx_r;
__Pyx_INCREF(__pyx_v_df);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_AddTraceback("questdb._client._dataframe_numpy_publish", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_df);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
09264: direct_conn_source_t* src,
09265: uint64_t budget_ms,
09266: qdb_pystr_buf* b,
09267: dataframe_plan_t* plan,
09268: object df,
09269: object table_name,
09270: object table_name_col,
09271: object symbols,
09272: object at,
09273: size_t max_rows_per_batch,
09274: bint* may_have_committed_prefix) except -1:
+09275: cdef qwp_chunk* chunk = NULL
__pyx_v_chunk = NULL;
+09276: cdef qwp_direct_sender* conn = NULL
__pyx_v_conn = NULL;
+09277: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+09278: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+09279: cdef bint flushed = False
__pyx_v_flushed = 0;
+09280: cdef bint force_drop_conn = False
__pyx_v_force_drop_conn = 0;
09281: cdef size_t rows_per_chunk
09282: cdef size_t row_offset
09283: cdef size_t chunk_rows
+09284: try:
/*try:*/ {
+09285: df = _dataframe_normalize_nullable(df)
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_normalize_nullable(__pyx_v_df); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9285, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_df, __pyx_t_1); __pyx_t_1 = 0;
+09286: df = _dataframe_normalize_claimed_arrow(df)
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_normalize_claimed_arrow(__pyx_v_df); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9286, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_df, __pyx_t_1); __pyx_t_1 = 0;
+09287: df = _dataframe_normalize_claimed_date(df)
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_normalize_claimed_date(__pyx_v_df); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9287, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_df, __pyx_t_1); __pyx_t_1 = 0;
+09288: df = _dataframe_normalize_at_timestamp(df, at)
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_normalize_at_timestamp(__pyx_v_df, __pyx_v_at); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9288, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_df, __pyx_t_1); __pyx_t_1 = 0;
+09289: _dataframe_plan_build(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_plan_build(__pyx_v_b, __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, __pyx_v_plan, ((PyObject*)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9289, __pyx_L4_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
09290: b,
09291: df,
09292: table_name,
09293: table_name_col,
09294: symbols,
09295: at,
09296: plan,
+09297: _FIELD_TARGETS_QWP)
__pyx_t_1 = __pyx_v_7questdb_7_client__FIELD_TARGETS_QWP;
__Pyx_INCREF(__pyx_t_1);
+09298: if (plan.col_count == 0) or (plan.row_count == 0):
__pyx_t_4 = (__pyx_v_plan->col_count == 0);
if (!__pyx_t_4) {
} else {
__pyx_t_3 = __pyx_t_4;
goto __pyx_L7_bool_binop_done;
}
__pyx_t_4 = (__pyx_v_plan->row_count == 0);
__pyx_t_3 = __pyx_t_4;
__pyx_L7_bool_binop_done:;
if (__pyx_t_3) {
/* … */
}
+09299: return 0
{
__pyx_r = 0;
}
goto __pyx_L3_return;
09300:
+09301: _dataframe_apply_roundtrip_overrides(df, plan)
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_apply_roundtrip_overrides(__pyx_v_df, __pyx_v_plan); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9301, __pyx_L4_error)
+09302: _dataframe_columnar_promote_cols(df, plan)
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_promote_cols(__pyx_v_df, __pyx_v_plan); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9302, __pyx_L4_error)
+09303: _dataframe_columnar_validate_plan(df, plan)
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_validate_plan(__pyx_v_df, __pyx_v_plan); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9303, __pyx_L4_error)
+09304: _dataframe_columnar_prebuild_pyobj(df, plan)
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_prebuild_pyobj(__pyx_v_df, __pyx_v_plan); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9304, __pyx_L4_error)
+09305: rows_per_chunk = _dataframe_columnar_rows_per_chunk(
__pyx_v_rows_per_chunk = __pyx_f_7questdb_7_client__dataframe_columnar_rows_per_chunk(__pyx_v_plan, __pyx_v_max_rows_per_batch);
09306: plan, max_rows_per_batch)
09307:
+09308: conn = _direct_conn_open_checked(src, budget_ms)
__pyx_t_5 = __pyx_f_7questdb_7_client__direct_conn_open_checked(__pyx_v_src, __pyx_v_budget_ms); if (unlikely(__pyx_t_5 == ((void *)NULL))) __PYX_ERR(0, 9308, __pyx_L4_error)
__pyx_v_conn = __pyx_t_5;
09309:
+09310: chunk = qwp_chunk_new(
__pyx_v_chunk = qwp_chunk_new(__pyx_v_plan->c_table_name.buf, __pyx_v_plan->c_table_name.len, (&__pyx_v_err));
09311: plan.c_table_name.buf,
09312: plan.c_table_name.len,
09313: &err)
+09314: if chunk == NULL:
__pyx_t_3 = (__pyx_v_chunk == NULL);
if (unlikely(__pyx_t_3)) {
/* … */
}
+09315: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9315, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 9315, __pyx_L4_error)
+09316: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
goto __pyx_L15_try_end;
__pyx_L10_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
__pyx_L12_except_error:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L4_error;
__pyx_L15_try_end:;
}
+09317: row_offset = 0
__pyx_v_row_offset = 0;
+09318: while row_offset < plan.row_count:
while (1) {
__pyx_t_3 = (__pyx_v_row_offset < __pyx_v_plan->row_count);
if (!__pyx_t_3) break;
+09319: if not qwp_chunk_clear(chunk, &err):
__pyx_t_3 = (!qwp_chunk_clear(__pyx_v_chunk, (&__pyx_v_err)));
if (unlikely(__pyx_t_3)) {
/* … */
}
+09320: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9320, __pyx_L10_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 9320, __pyx_L10_error)
+09321: chunk_rows = rows_per_chunk
__pyx_v_chunk_rows = __pyx_v_rows_per_chunk;
+09322: if chunk_rows > plan.row_count - row_offset:
__pyx_t_3 = (__pyx_v_chunk_rows > (__pyx_v_plan->row_count - __pyx_v_row_offset));
if (__pyx_t_3) {
/* … */
}
+09323: chunk_rows = plan.row_count - row_offset
__pyx_v_chunk_rows = (__pyx_v_plan->row_count - __pyx_v_row_offset);
+09324: _dataframe_columnar_populate_chunk(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_populate_chunk(__pyx_v_plan, __pyx_v_chunk, __pyx_v_row_offset, __pyx_v_chunk_rows); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9324, __pyx_L10_error)
09325: plan,
09326: chunk,
09327: row_offset,
09328: chunk_rows)
+09329: _dataframe_columnar_flush(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_flush(__pyx_v_conn, __pyx_v_chunk, 1, __pyx_v_may_have_committed_prefix); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9329, __pyx_L10_error)
09330: conn,
09331: chunk,
09332: True,
09333: may_have_committed_prefix)
+09334: flushed = True
__pyx_v_flushed = 1;
+09335: row_offset += chunk_rows
__pyx_v_row_offset = (__pyx_v_row_offset + __pyx_v_chunk_rows);
}
09336:
+09337: _dataframe_columnar_sync(conn)
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_sync(__pyx_v_conn); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9337, __pyx_L10_error)
+09338: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._dataframe_numpy_publish", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_9, &__pyx_t_10) < 0) __PYX_ERR(0, 9338, __pyx_L12_except_error)
__Pyx_XGOTREF(__pyx_t_1);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
+09339: force_drop_conn = _dataframe_columnar_force_drop_after_error(
__pyx_v_force_drop_conn = __pyx_f_7questdb_7_client__dataframe_columnar_force_drop_after_error(__pyx_v_conn, __pyx_v_flushed);
09340: conn, flushed)
+09341: raise
__Pyx_GIVEREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_9); __Pyx_XGIVEREF(__pyx_t_10); __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_9, __pyx_t_10); __pyx_t_1 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __PYX_ERR(0, 9341, __pyx_L12_except_error) }
09342:
+09343: return 0
{
__pyx_r = 0;
}
goto __pyx_L3_return;
}
09344: finally:
+09345: _ensure_has_gil(&gs)
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_ExceptionSwap(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
if ( unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
{
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
/* … */
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+09346: if conn != NULL:
__pyx_t_3 = (__pyx_v_conn != NULL);
if (__pyx_t_3) {
/* … */
}
/* … */
__pyx_t_3 = (__pyx_v_conn != NULL);
if (__pyx_t_3) {
/* … */
}
+09347: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L27;
}
__pyx_L27:;
}
}
/* … */
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L32;
}
__pyx_L32:;
}
}
+09348: _direct_conn_close(src, conn, force_drop_conn)
__pyx_f_7questdb_7_client__direct_conn_close(__pyx_v_src, __pyx_v_conn, __pyx_v_force_drop_conn);
}
/* … */
__pyx_f_7questdb_7_client__direct_conn_close(__pyx_v_src, __pyx_v_conn, __pyx_v_force_drop_conn);
}
+09349: if chunk != NULL:
__pyx_t_3 = (__pyx_v_chunk != NULL);
if (__pyx_t_3) {
/* … */
}
/* … */
__pyx_t_3 = (__pyx_v_chunk != NULL);
if (__pyx_t_3) {
/* … */
}
+09350: qwp_chunk_free(chunk)
qwp_chunk_free(__pyx_v_chunk);
/* … */
qwp_chunk_free(__pyx_v_chunk);
09351: # The plan is rebuilt on each failover attempt; release this
09352: # attempt's plan so a re-send starts from a blank plan.
+09353: dataframe_plan_release(plan)
__pyx_f_7questdb_7_client_dataframe_plan_release(__pyx_v_plan);
/* … */
__pyx_f_7questdb_7_client_dataframe_plan_release(__pyx_v_plan);
+09354: plan[0] = dataframe_plan_blank()
(__pyx_v_plan[0]) = __pyx_f_7questdb_7_client_dataframe_plan_blank();
}
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_ExceptionReset(__pyx_t_14, __pyx_t_15, __pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ErrRestore(__pyx_t_8, __pyx_t_7, __pyx_t_6);
__pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
__pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
goto __pyx_L1_error;
}
__pyx_L3_return: {
__pyx_t_2 = __pyx_r;
/* … */
(__pyx_v_plan[0]) = __pyx_f_7questdb_7_client_dataframe_plan_blank();
__pyx_r = __pyx_t_2;
goto __pyx_L0;
}
}
09355:
09356:
+09357: cdef object _dataframe_call_error(object exc, str msg, bint in_doubt):
static PyObject *__pyx_f_7questdb_7_client__dataframe_call_error(PyObject *__pyx_v_exc, PyObject *__pyx_v_msg, int __pyx_v_in_doubt) {
PyObject *__pyx_v_out = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._dataframe_call_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_out);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
09358: """`exc` again, as a new object of the same class carrying `msg` and
09359: `in_doubt`, for `raise ... from exc`.
09360:
09361: A DataFrame call reports facts the failed operation could not know: an
09362: earlier batch of the same call may have committed, or a one-shot input
09363: was consumed. The original stays reachable as `__cause__`, where its own
09364: `in_doubt` still describes the failed operation alone. The class and every
09365: field are kept, so a typed subclass -- a `QuestDBServerRejectionError`, or
09366: an `OidcError` from an `oidc_auth=` transport -- still matches its own
09367: `except` and keeps `.sender_error`, `.status`, `.retry_after` and the rest,
09368: which rebuilding it as a plain `QuestDBError` would drop.
09369: """
+09370: cdef object out = _error_with_message(exc, msg)
__pyx_t_1 = __pyx_f_7questdb_7_client__error_with_message(__pyx_v_exc, __pyx_v_msg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9370, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_out = __pyx_t_1; __pyx_t_1 = 0;
+09371: out._in_doubt = bool(in_doubt)
__pyx_t_2 = NULL; __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_v_in_doubt); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9371, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9371, __pyx_L1_error) __Pyx_GOTREF((PyObject *)__pyx_t_1); } if (__Pyx_PyObject_SetAttrStr(__pyx_v_out, __pyx_mstate_global->__pyx_n_u_in_doubt_2, ((PyObject *)__pyx_t_1)) < (0)) __PYX_ERR(0, 9371, __pyx_L1_error) __Pyx_DECREF((PyObject *)__pyx_t_1); __pyx_t_1 = 0;
+09372: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
09373:
09374:
+09375: cdef void_int _direct_dataframe_run(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__direct_dataframe_run(struct __pyx_t_7questdb_7_client_direct_conn_source_t *__pyx_v_src, double __pyx_v_reconnect_max_s, struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan, PyObject *__pyx_v_df, PyObject *__pyx_v_table_name, PyObject *__pyx_v_table_name_col, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at, size_t __pyx_v_max_rows_per_batch, PyObject *__pyx_v_schema_overrides, PyObject *__pyx_v_oidc_auth) {
uint64_t __pyx_v_budget_ms;
double __pyx_v_deadline;
double __pyx_v_remaining;
int __pyx_v_may_have_committed_prefix;
int __pyx_v_nonreplayable_consumed;
int __pyx_v_call_in_doubt;
int __pyx_v_oidc_terminal;
int __pyx_v_oidc_terminal_probe_used;
int __pyx_v_connect_final;
PyObject *__pyx_v_validated_overrides = 0;
int64_t __pyx_v_at_micros;
PyObject *__pyx_v_ve = NULL;
PyObject *__pyx_v_exc = NULL;
PyObject *__pyx_v_probe_exc = NULL;
PyObject *__pyx_v_oidc_errors = NULL;
__pyx_t_7questdb_7_client_void_int __pyx_r;
__Pyx_INCREF(__pyx_v_df);
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_AddTraceback("questdb._client._direct_dataframe_run", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_validated_overrides);
__Pyx_XDECREF(__pyx_v_ve);
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_XDECREF(__pyx_v_probe_exc);
__Pyx_XDECREF(__pyx_v_oidc_errors);
__Pyx_XDECREF(__pyx_v_df);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
09376: direct_conn_source_t* src,
09377: double reconnect_max_s,
09378: qdb_pystr_buf* b,
09379: dataframe_plan_t* plan,
09380: object df,
09381: object table_name,
09382: object table_name_col,
09383: object symbols,
09384: object at,
09385: size_t max_rows_per_batch,
09386: object schema_overrides,
09387: object oidc_auth) except -1:
+09388: cdef uint64_t budget_ms = 0
__pyx_v_budget_ms = 0;
+09389: cdef double deadline = 0.0
__pyx_v_deadline = 0.0;
+09390: cdef double remaining = 0.0
__pyx_v_remaining = 0.0;
+09391: cdef bint may_have_committed_prefix = False
__pyx_v_may_have_committed_prefix = 0;
+09392: cdef bint nonreplayable_consumed = False
__pyx_v_nonreplayable_consumed = 0;
+09393: cdef bint call_in_doubt = False
__pyx_v_call_in_doubt = 0;
+09394: cdef bint oidc_terminal = False
__pyx_v_oidc_terminal = 0;
+09395: cdef bint oidc_terminal_probe_used = False
__pyx_v_oidc_terminal_probe_used = 0;
+09396: cdef bint connect_final = False
__pyx_v_connect_final = 0;
+09397: cdef object validated_overrides = _validate_schema_overrides(
__pyx_t_1 = __pyx_f_7questdb_7_client__validate_schema_overrides(__pyx_v_schema_overrides); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9397, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_validated_overrides = __pyx_t_1; __pyx_t_1 = 0;
09398: schema_overrides)
+09399: if max_rows_per_batch <= 0:
__pyx_t_2 = (__pyx_v_max_rows_per_batch <= 0);
if (unlikely(__pyx_t_2)) {
/* … */
}
+09400: raise ValueError('max_rows_per_batch must be >= 1.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_max_rows_per_batch_must_be_1};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9400, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 9400, __pyx_L1_error)
+09401: src.slice_for_oidc = oidc_auth is not None
__pyx_t_2 = (__pyx_v_oidc_auth != Py_None); __pyx_v_src->slice_for_oidc = __pyx_t_2;
+09402: if table_name is not None and table_name_col is not None:
__pyx_t_5 = (__pyx_v_table_name != Py_None);
if (__pyx_t_5) {
} else {
__pyx_t_2 = __pyx_t_5;
goto __pyx_L5_bool_binop_done;
}
__pyx_t_5 = (__pyx_v_table_name_col != Py_None);
__pyx_t_2 = __pyx_t_5;
__pyx_L5_bool_binop_done:;
if (unlikely(__pyx_t_2)) {
/* … */
}
+09403: raise ValueError(
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Can_specify_only_one_of_table_na};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9403, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 9403, __pyx_L1_error)
09404: 'Can specify only one of `table_name` or `table_name_col`.')
+09405: if table_name_col is not None:
__pyx_t_2 = (__pyx_v_table_name_col != Py_None);
if (unlikely(__pyx_t_2)) {
/* … */
}
09406: # This path writes one table per call, so it has nowhere to put
09407: # a table-name column. The check runs before the planner looks
09408: # at any column, so the error always says the same thing. Later
09409: # on, a column the planner cannot type by itself — a 32-byte
09410: # binary with no type claim, say — would raise first and point
09411: # at the wrong problem.
+09412: raise UnsupportedDataFrameShapeError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_UnsupportedDataFrameShapeError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9412, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_4 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_6))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
__pyx_t_4 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_QWP_column_ingestion_writes_one};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9412, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 9412, __pyx_L1_error)
09413: 'QWP column ingestion writes one table per call and does '
09414: 'not accept `table_name_col`. That is QuestDB.dataframe() '
09415: 'and Sender.dataframe() over ws:: / wss::. Split the frame '
09416: 'on that column and make one call per table, e.g. '
09417: "`for name, group in df.groupby('tbl'): "
09418: "dataframe(group.drop(columns='tbl'), table_name=name, "
09419: "at='ts')`. Those calls take `symbols` and "
09420: "`schema_overrides` and read `df.attrs['questdb']`, so "
09421: 'LONG256 and the other column types work as normal. '
09422: 'Sender.dataframe() over tcp:: / http:: does accept '
09423: '`table_name_col`: it serializes row by row, so it can '
09424: 'change table between rows.')
+09425: if isinstance(at, datetime.datetime):
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9425, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9425, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = PyObject_IsInstance(__pyx_v_at, __pyx_t_6); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 9425, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (__pyx_t_2) { /* … */ }
+09426: if at != at:
__pyx_t_2 = __Pyx_PyObject_CompareBoolNe_object_object(__pyx_v_at, __pyx_v_at, Py_NE); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 9426, __pyx_L1_error) if (unlikely(__pyx_t_2)) { /* … */ }
+09427: raise QuestDBError(
__pyx_t_1 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9427, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
+09428: QuestDBErrorCode.InvalidTimestamp,
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 9428, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9428, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_4 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_4 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_8, __pyx_mstate_global->__pyx_kp_u_Bad_argument_at_NaT_is_not_a_val}; __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9427, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); } __Pyx_Raise(__pyx_t_6, 0, 0, 0); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __PYX_ERR(0, 9427, __pyx_L1_error)
09429: 'Bad argument `at`: NaT is not a valid timestamp.')
+09430: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
goto __pyx_L15_try_end;
__pyx_L10_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L12_except_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
goto __pyx_L1_error;
__pyx_L15_try_end:;
}
+09431: at_micros = datetime_to_micros(at)
if (!(likely(((__pyx_v_at) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_at, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(0, 9431, __pyx_L10_error) __pyx_t_12 = __pyx_f_7questdb_7_client_datetime_to_micros(((PyDateTime_DateTime *)__pyx_v_at)); if (unlikely(__pyx_t_12 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 9431, __pyx_L10_error) __pyx_v_at_micros = __pyx_t_12;
+09432: except ValueError as ve:
__pyx_t_13 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_ValueError)))); if (__pyx_t_13) { __Pyx_AddTraceback("questdb._client._direct_dataframe_run", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_3, &__pyx_t_8) < 0) __PYX_ERR(0, 9432, __pyx_L12_except_error) __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_3); __Pyx_XGOTREF(__pyx_t_8); __Pyx_INCREF(__pyx_t_3); __pyx_v_ve = __pyx_t_3; /*try:*/ { /* … */ /*finally:*/ { __pyx_L21_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_ExceptionSwap(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25); if ( unlikely(__Pyx_GetException(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22) < 0)) __Pyx_ErrFetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22); __Pyx_XGOTREF(__pyx_t_20); __Pyx_XGOTREF(__pyx_t_21); __Pyx_XGOTREF(__pyx_t_22); __Pyx_XGOTREF(__pyx_t_23); __Pyx_XGOTREF(__pyx_t_24); __Pyx_XGOTREF(__pyx_t_25); __pyx_t_13 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_19 = __pyx_filename; { __Pyx_DECREF(__pyx_v_ve); __pyx_v_ve = 0; } __Pyx_XGIVEREF(__pyx_t_23); __Pyx_XGIVEREF(__pyx_t_24); __Pyx_XGIVEREF(__pyx_t_25); __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25); __Pyx_XGIVEREF(__pyx_t_20); __Pyx_XGIVEREF(__pyx_t_21); __Pyx_XGIVEREF(__pyx_t_22); __Pyx_ErrRestore(__pyx_t_20, __pyx_t_21, __pyx_t_22); __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_lineno = __pyx_t_13; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19; goto __pyx_L12_except_error; } } } goto __pyx_L12_except_error;
+09433: raise QuestDBError(
__pyx_t_7 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 9433, __pyx_L21_error)
__Pyx_GOTREF(__pyx_t_14);
+09434: QuestDBErrorCode.InvalidTimestamp,
__Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 9434, __pyx_L21_error) __Pyx_GOTREF(__pyx_t_15); __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 9434, __pyx_L21_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+09435: f'Bad argument `at`: {ve}') from ve
__pyx_t_15 = __Pyx_PyObject_FormatSimple(__pyx_v_ve, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 9435, __pyx_L21_error) __Pyx_GOTREF(__pyx_t_15); __pyx_t_17 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_Bad_argument_at, __pyx_t_15); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 9435, __pyx_L21_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __pyx_t_4 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_14))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_14); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_14); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_14, __pyx__function); __pyx_t_4 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_16, __pyx_t_17}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_14, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9433, __pyx_L21_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, __pyx_v_ve); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 9433, __pyx_L21_error) }
+09436: if at_micros < 0:
__pyx_t_2 = (__pyx_v_at_micros < 0);
if (unlikely(__pyx_t_2)) {
/* … */
}
+09437: raise ValueError(
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Bad_argument_at_Cannot_use_a_dat};
__pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9437, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
}
__Pyx_Raise(__pyx_t_8, 0, 0, 0);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__PYX_ERR(0, 9437, __pyx_L1_error)
09438: 'Bad argument `at`: Cannot use a datetime before the '
09439: 'Unix epoch (1970-01-01 00:00:00).')
+09440: if not isinstance(
__pyx_t_26 = (!__pyx_t_5);
if (__pyx_t_26) {
} else {
__pyx_t_2 = __pyx_t_26;
goto __pyx_L29_bool_binop_done;
}
/* … */
if (unlikely(__pyx_t_2)) {
/* … */
}
09441: at,
+09442: (str, ServerTimestampType, TimestampNanos,
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_ServerTimestampType); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9442, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); /* … */ __pyx_t_26 = PyUnicode_Check(__pyx_v_at); if (!__pyx_t_26) { } else { __pyx_t_5 = __pyx_t_26; goto __pyx_L31_bool_binop_done; } /* … */ __pyx_t_26 = PyObject_IsInstance(__pyx_v_at, __pyx_t_8); if (!__pyx_t_26) { } else { __pyx_t_5 = __pyx_t_26; goto __pyx_L31_bool_binop_done; } /* … */ __pyx_t_26 = __Pyx_TypeCheck(__pyx_v_at, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos); if (!__pyx_t_26) { } else { __pyx_t_5 = __pyx_t_26; goto __pyx_L31_bool_binop_done; }
+09443: datetime.datetime)) and not (
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9443, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9443, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* … */ __pyx_t_26 = PyObject_IsInstance(__pyx_v_at, __pyx_t_6); __pyx_t_5 = __pyx_t_26; __pyx_L31_bool_binop_done:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; /* … */ __pyx_t_27 = (!__pyx_t_26); __pyx_t_2 = __pyx_t_27; __pyx_L29_bool_binop_done:;
+09444: isinstance(at, int) and not isinstance(at, bool)):
__pyx_t_5 = PyLong_Check(__pyx_v_at); if (__pyx_t_5) { } else { __pyx_t_26 = __pyx_t_5; goto __pyx_L35_bool_binop_done; } __pyx_t_5 = __Pyx_TypeCheck(__pyx_v_at, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); __pyx_t_27 = (!__pyx_t_5); __pyx_t_26 = __pyx_t_27; __pyx_L35_bool_binop_done:;
+09445: raise QuestDBError(
__pyx_t_6 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9445, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
+09446: QuestDBErrorCode.InvalidTimestamp,
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9446, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 9446, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_4 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_6); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_4 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_14, __pyx_mstate_global->__pyx_kp_u_dataframe_requires_at_to_be_the}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9445, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 9445, __pyx_L1_error)
09447: 'dataframe() requires `at` to be the designated timestamp '
09448: 'column (by name or index), a fixed timestamp shared by every '
09449: 'row (TimestampNanos / datetime), or the explicit '
09450: '`ServerTimestamp` sentinel to let the server assign each '
09451: 'row\'s timestamp on arrival.')
09452: # Once per call, ahead of the retry loop below, so a reconnect does
09453: # not repeat it.
+09454: df = _dataframe_freeze_claim(df)
__pyx_t_8 = __pyx_f_7questdb_7_client__dataframe_freeze_claim(__pyx_v_df); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9454, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF_SET(__pyx_v_df, __pyx_t_8); __pyx_t_8 = 0;
+09455: _dataframe_log_claim_problems(df)
__pyx_t_28 = __pyx_f_7questdb_7_client__dataframe_log_claim_problems(__pyx_v_df); if (unlikely(__pyx_t_28 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9455, __pyx_L1_error)
09456: # Ahead of the choice between the Arrow and the NumPy route, so both
09457: # see the same signed GEOHASH columns.
+09458: df = _dataframe_reinterpret_unsigned_geohash(df, schema_overrides)
__pyx_t_8 = __pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash(__pyx_v_df, __pyx_v_schema_overrides); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9458, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF_SET(__pyx_v_df, __pyx_t_8); __pyx_t_8 = 0;
09459: # A zero budget (standalone from-conf source) makes a single attempt:
09460: # a transient failure surfaces immediately rather than re-dialling.
+09461: deadline = time.monotonic() + reconnect_max_s
__pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 9461, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9461, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __pyx_t_4 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_4 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9461, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); } __pyx_t_6 = PyFloat_FromDouble(__pyx_v_reconnect_max_s); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9461, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_3 = __Pyx_PyNumber_Add_object_float(__pyx_t_8, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9461, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_29 = __Pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_29 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 9461, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_deadline = __pyx_t_29;
+09462: while True:
while (1) {
09463: # Reclaim string storage from a prior attempt's released plan.
+09464: qdb_pystr_buf_clear(b)
qdb_pystr_buf_clear(__pyx_v_b);
+09465: src.connect_gave_up = False
__pyx_v_src->connect_gave_up = 0;
+09466: try:
{
/*try:*/ {
/* … */
}
__pyx_L39_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L41_except_error:;
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_10, __pyx_t_9);
goto __pyx_L1_error;
__pyx_L45_try_continue:;
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_10, __pyx_t_9);
goto __pyx_L37_continue;
__pyx_L43_try_return:;
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_10, __pyx_t_9);
goto __pyx_L0;
__pyx_L40_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_10, __pyx_t_9);
}
__pyx_L37_continue:;
}
+09467: if _dataframe_client_try_capsule_path(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_client_try_capsule_path(__pyx_v_src, __pyx_v_budget_ms, __pyx_v_df, __pyx_v_table_name, __pyx_v_symbols, __pyx_v_at, __pyx_v_max_rows_per_batch, __pyx_v_validated_overrides, (&__pyx_v_may_have_committed_prefix), (&__pyx_v_nonreplayable_consumed)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 9467, __pyx_L39_error)
if (__pyx_t_2) {
/* … */
}
09468: src,
09469: budget_ms,
09470: df,
09471: table_name,
09472: symbols,
09473: at,
09474: max_rows_per_batch,
09475: validated_overrides,
09476: &may_have_committed_prefix,
09477: &nonreplayable_consumed):
+09478: return 0
{
__pyx_r = 0;
}
goto __pyx_L43_try_return;
+09479: if validated_overrides is not None:
__pyx_t_2 = (__pyx_v_validated_overrides != Py_None);
if (unlikely(__pyx_t_2)) {
/* … */
}
+09480: raise UnsupportedDataFrameShapeError(
__pyx_t_6 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_UnsupportedDataFrameShapeError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9480, __pyx_L39_error)
__Pyx_GOTREF(__pyx_t_8);
+09481: _schema_overrides_need_arrow_message(df))
__pyx_t_14 = __pyx_f_7questdb_7_client__schema_overrides_need_arrow_message(__pyx_v_df); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 9481, __pyx_L39_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_4 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_8))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_8); assert(__pyx_t_6); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_8, __pyx__function); __pyx_t_4 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_14}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9480, __pyx_L39_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 9480, __pyx_L39_error)
+09482: _dataframe_numpy_publish(
__pyx_t_28 = __pyx_f_7questdb_7_client__dataframe_numpy_publish(__pyx_v_src, __pyx_v_budget_ms, __pyx_v_b, __pyx_v_plan, __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, __pyx_v_max_rows_per_batch, (&__pyx_v_may_have_committed_prefix)); if (unlikely(__pyx_t_28 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9482, __pyx_L39_error)
09483: src, budget_ms, b, plan, df, table_name,
09484: table_name_col, symbols, at, max_rows_per_batch,
09485: &may_have_committed_prefix)
+09486: return 0
{
__pyx_r = 0;
}
goto __pyx_L43_try_return;
+09487: except QuestDBError as exc:
__Pyx_ErrFetch(&__pyx_t_3, &__pyx_t_8, &__pyx_t_14); __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9487, __pyx_L41_except_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_18 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_3, __pyx_t_6); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_ErrRestore(__pyx_t_3, __pyx_t_8, __pyx_t_14); __pyx_t_3 = 0; __pyx_t_8 = 0; __pyx_t_14 = 0; if (__pyx_t_18) { __Pyx_AddTraceback("questdb._client._direct_dataframe_run", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_14, &__pyx_t_8, &__pyx_t_3) < 0) __PYX_ERR(0, 9487, __pyx_L41_except_error) __Pyx_XGOTREF(__pyx_t_14); __Pyx_XGOTREF(__pyx_t_8); __Pyx_XGOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_t_8); __pyx_v_exc = __pyx_t_8; /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; goto __pyx_L55; } __pyx_L54_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_32 = 0; __pyx_t_31 = 0; __pyx_t_30 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_ExceptionSwap(&__pyx_t_32, &__pyx_t_31, &__pyx_t_30); if ( unlikely(__Pyx_GetException(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25) < 0)) __Pyx_ErrFetch(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25); __Pyx_XGOTREF(__pyx_t_23); __Pyx_XGOTREF(__pyx_t_24); __Pyx_XGOTREF(__pyx_t_25); __Pyx_XGOTREF(__pyx_t_32); __Pyx_XGOTREF(__pyx_t_31); __Pyx_XGOTREF(__pyx_t_30); __pyx_t_13 = __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_32); __Pyx_XGIVEREF(__pyx_t_31); __Pyx_XGIVEREF(__pyx_t_30); __Pyx_ExceptionReset(__pyx_t_32, __pyx_t_31, __pyx_t_30); __Pyx_XGIVEREF(__pyx_t_23); __Pyx_XGIVEREF(__pyx_t_24); __Pyx_XGIVEREF(__pyx_t_25); __Pyx_ErrRestore(__pyx_t_23, __pyx_t_24, __pyx_t_25); __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_32 = 0; __pyx_t_31 = 0; __pyx_t_30 = 0; __pyx_lineno = __pyx_t_13; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19; goto __pyx_L41_except_error; } __pyx_L51_continue: { __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; goto __pyx_L49_except_continue; } __pyx_L55:; } __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L40_exception_handled; __pyx_L49_except_continue:; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L45_try_continue; } goto __pyx_L41_except_error;
09488: # Every exit below says `raise exc`, never a bare `raise`: a bare
09489: # one re-raises whatever the ENCLOSING `except` is handling, and
09490: # the probe's nested handler below completes normally, so CPython
09491: # restores the outer exception state before control reaches them.
09492: # A rebinding of `exc` would then steer the retry decision while
09493: # the caller still got the original error -- an
09494: # `OidcCancelledError` from a provider closed on another thread
09495: # (AuthError, so it fails the code check below) surfaced as the
09496: # original `OidcInteractionRequired`, telling the caller to run
09497: # `sign_in()` on a provider that is closed for good and can never
09498: # produce a token. `raise exc` re-raises the same object when
09499: # nothing was rebound, and keeps the original as `__context__`
09500: # when it was.
09501: #
09502: # An OIDC failure that needs a human is not a transport blip: the
09503: # native side classifies it as a retryable SocketError so an
09504: # attached transport's background drainer keeps queued frames
09505: # alive while someone signs in. A foreground dataframe() call has
09506: # no such reason to wait -- retrying re-polls a provider that is
09507: # documented never to prompt, so the call would stall for the whole
09508: # reconnect budget (300s by default) only to raise the same error.
09509: # Usually fail fast and let the caller run sign_in(). One immediate
09510: # TOKEN probe closes the race where the error was produced while a
09511: # peer sign-in held the lock but Python observes that lock only
09512: # after it has completed. Probe the provider directly rather than
09513: # rebuilding/re-exporting the whole dataframe just to discover the
09514: # same InteractionRequired result. Only a newly available token
09515: # justifies replaying data preparation once.
+09516: connect_final = src.connect_gave_up
__pyx_t_2 = __pyx_v_src->connect_gave_up;
__pyx_v_connect_final = __pyx_t_2;
+09517: oidc_terminal = _is_oidc_terminal_for_foreground(exc)
__pyx_t_2 = __pyx_f_7questdb_7_client__is_oidc_terminal_for_foreground(__pyx_v_exc); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 9517, __pyx_L54_error) __pyx_v_oidc_terminal = __pyx_t_2;
+09518: if oidc_terminal and not (
if (__pyx_v_oidc_terminal) {
} else {
__pyx_t_2 = __pyx_v_oidc_terminal;
goto __pyx_L57_bool_binop_done;
}
/* … */
__pyx_t_26 = (!__pyx_t_27);
__pyx_t_2 = __pyx_t_26;
__pyx_L57_bool_binop_done:;
if (__pyx_t_2) {
/* … */
}
+09519: oidc_terminal_probe_used or exc.in_doubt
if (!__pyx_v_oidc_terminal_probe_used) {
} else {
__pyx_t_27 = __pyx_v_oidc_terminal_probe_used;
goto __pyx_L59_bool_binop_done;
}
/* … */
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_in_doubt); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9519, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_6);
/* … */
__pyx_t_26 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_26 < 0))) __PYX_ERR(0, 9519, __pyx_L54_error)
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (!__pyx_t_26) {
} else {
__pyx_t_27 = __pyx_t_26;
goto __pyx_L59_bool_binop_done;
}
+09520: or may_have_committed_prefix or nonreplayable_consumed
if (!__pyx_v_may_have_committed_prefix) {
} else {
__pyx_t_27 = __pyx_v_may_have_committed_prefix;
goto __pyx_L59_bool_binop_done;
}
/* … */
if (!__pyx_v_nonreplayable_consumed) {
} else {
__pyx_t_27 = __pyx_v_nonreplayable_consumed;
goto __pyx_L59_bool_binop_done;
}
+09521: or oidc_auth is None):
__pyx_t_26 = (__pyx_v_oidc_auth == Py_None);
__pyx_t_27 = __pyx_t_26;
__pyx_L59_bool_binop_done:;
+09522: oidc_terminal_probe_used = True
__pyx_v_oidc_terminal_probe_used = 1;
+09523: try:
{
/*try:*/ {
/* … */
}
/* … */
__pyx_L66_except_error:;
__Pyx_XGIVEREF(__pyx_t_25);
__Pyx_XGIVEREF(__pyx_t_24);
__Pyx_XGIVEREF(__pyx_t_23);
__Pyx_ExceptionReset(__pyx_t_25, __pyx_t_24, __pyx_t_23);
goto __pyx_L54_error;
__pyx_L70_try_continue:;
__Pyx_XGIVEREF(__pyx_t_25);
__Pyx_XGIVEREF(__pyx_t_24);
__Pyx_XGIVEREF(__pyx_t_23);
__Pyx_ExceptionReset(__pyx_t_25, __pyx_t_24, __pyx_t_23);
goto __pyx_L51_continue;
__pyx_L65_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_25);
__Pyx_XGIVEREF(__pyx_t_24);
__Pyx_XGIVEREF(__pyx_t_23);
__Pyx_ExceptionReset(__pyx_t_25, __pyx_t_24, __pyx_t_23);
}
+09524: oidc_auth._foreground_token()
__pyx_t_1 = __pyx_v_oidc_auth;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL};
__pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_foreground_token, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9524, __pyx_L64_error)
__Pyx_GOTREF(__pyx_t_6);
}
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+09525: except QuestDBError as probe_exc:
__Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_1, &__pyx_t_17); __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 9525, __pyx_L66_except_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_18 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_6, __pyx_t_16); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_ErrRestore(__pyx_t_6, __pyx_t_1, __pyx_t_17); __pyx_t_6 = 0; __pyx_t_1 = 0; __pyx_t_17 = 0; if (__pyx_t_18) { __Pyx_AddTraceback("questdb._client._direct_dataframe_run", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_17, &__pyx_t_1, &__pyx_t_6) < 0) __PYX_ERR(0, 9525, __pyx_L66_except_error) __Pyx_XGOTREF(__pyx_t_17); __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_v_probe_exc = __pyx_t_1; /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ __Pyx_DECREF(__pyx_v_probe_exc); __pyx_v_probe_exc = 0; goto __pyx_L78; } __pyx_L77_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_30 = 0; __pyx_t_31 = 0; __pyx_t_32 = 0; __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_ExceptionSwap(&__pyx_t_30, &__pyx_t_31, &__pyx_t_32); 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_30); __Pyx_XGOTREF(__pyx_t_31); __Pyx_XGOTREF(__pyx_t_32); __pyx_t_18 = __pyx_lineno; __pyx_t_13 = __pyx_clineno; __pyx_t_19 = __pyx_filename; { __Pyx_DECREF(__pyx_v_probe_exc); __pyx_v_probe_exc = 0; } __Pyx_XGIVEREF(__pyx_t_30); __Pyx_XGIVEREF(__pyx_t_31); __Pyx_XGIVEREF(__pyx_t_32); __Pyx_ExceptionReset(__pyx_t_30, __pyx_t_31, __pyx_t_32); __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_30 = 0; __pyx_t_31 = 0; __pyx_t_32 = 0; __pyx_lineno = __pyx_t_18; __pyx_clineno = __pyx_t_13; __pyx_filename = __pyx_t_19; goto __pyx_L66_except_error; } __pyx_L78:; } __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L65_exception_handled; } goto __pyx_L66_except_error;
+09526: if not _is_oidc_terminal_for_foreground(probe_exc):
__pyx_t_2 = __pyx_f_7questdb_7_client__is_oidc_terminal_for_foreground(__pyx_v_probe_exc); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 9526, __pyx_L77_error) __pyx_t_26 = (!__pyx_t_2); if (__pyx_t_26) { /* … */ } }
09527: # A different provider failure takes the checks below
09528: # with its own type and structured OIDC detail: a busy
09529: # refusal is retried within the budget, and any other
09530: # OIDC failure is raised at once.
+09531: exc = probe_exc
__Pyx_INCREF(__pyx_v_probe_exc); __Pyx_DECREF_SET(__pyx_v_exc, __pyx_v_probe_exc);
+09532: oidc_terminal = False
__pyx_v_oidc_terminal = 0;
+09533: connect_final = False
__pyx_v_connect_final = 0;
09534: else:
+09535: budget_ms = 0
/*else:*/ {
__pyx_v_budget_ms = 0;
+09536: continue
goto __pyx_L70_try_continue;
}
__pyx_L64_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
09537:
09538: # Aggregate at the DataFrame boundary, including validation and
09539: # stream errors after earlier successful batches. The native flag
09540: # describes the failed flush; only this driver knows the source's
09541: # publication history across checkpoints and connections.
+09542: call_in_doubt = exc.in_doubt or may_have_committed_prefix
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_in_doubt); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9542, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 9542, __pyx_L54_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (!__pyx_t_2) { } else { __pyx_t_26 = __pyx_t_2; goto __pyx_L84_bool_binop_done; } __pyx_t_26 = __pyx_v_may_have_committed_prefix; __pyx_L84_bool_binop_done:; __pyx_v_call_in_doubt = __pyx_t_26;
09543:
09544: # Select the one-shot guidance before the delivery-risk gate so a
09545: # caller sees both facts when both apply. A drained stream cannot
09546: # be replayed even when duplicate delivery is not in doubt.
+09547: if nonreplayable_consumed:
if (__pyx_v_nonreplayable_consumed) {
/* … */
}
+09548: if call_in_doubt:
if (unlikely(__pyx_v_call_in_doubt)) {
/* … */
}
+09549: raise _dataframe_call_error(
__pyx_t_6 = __pyx_f_7questdb_7_client__dataframe_call_error(__pyx_v_exc, ((PyObject*)__pyx_t_1), 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9549, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
09550: exc,
+09551: f'{exc} A prefix of this DataFrame call may have '
__pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9551, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_A_prefix_of_this_DataFrame_call); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9551, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
09552: f'committed, and the input stream was already '
09553: f'partially consumed and cannot be replayed. Create '
09554: f'a fresh reader, then reconcile or deduplicate any '
09555: f'already committed rows before retrying.',
+09556: True) from exc
__Pyx_Raise(__pyx_t_6, 0, 0, __pyx_v_exc); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __PYX_ERR(0, 9549, __pyx_L54_error)
09557: # A fresh reader helps only with a failure that a retry
09558: # can get past. Anything else -- a column the route
09559: # cannot carry, an override that does not apply -- fails
09560: # the same way on any reader, so it goes out unchanged.
+09561: if exc.code not in (
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9561, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_6); /* … */ __pyx_t_2 = __pyx_t_26; if (unlikely(__pyx_t_2)) { /* … */ }
+09562: QuestDBErrorCode.FailoverRetry,
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9562, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_FailoverRetry); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 9562, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = __Pyx_PyObject_CompareBoolNe_object_object(__pyx_t_6, __pyx_t_17, Py_NE); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 9561, __pyx_L54_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (__pyx_t_2) { } else { __pyx_t_26 = __pyx_t_2; goto __pyx_L89_bool_binop_done; }
+09563: QuestDBErrorCode.SocketError):
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 9563, __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, 9563, __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, 9561, __pyx_L54_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_26 = __pyx_t_2; __pyx_L89_bool_binop_done:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+09564: raise exc
__Pyx_Raise(__pyx_v_exc, 0, 0, 0); __PYX_ERR(0, 9564, __pyx_L54_error)
09565: # Re-raise the original exception with an appended note rather
09566: # than rebuilding it as a bare QuestDBError. Rebuilding dropped
09567: # the class -- a QuestDBServerRejectionError stopped matching
09568: # its own `except` -- and every field only the subclass
09569: # carries. `args` is what Exception.__str__ reads, and every
09570: # field lives on the instance, so mutating it preserves code,
09571: # in_doubt and sender_error for free. The f-string is evaluated
09572: # before the assignment, so it still interpolates the original
09573: # message.
09574: # An OIDC token failure reaching here is an OidcNetworkError /
09575: # OidcDeviceFlowError / OidcTimeoutError (each carries a
09576: # retryable code by design, so it passes the code check
09577: # above); rebuilding it stopped `except OidcError` from
09578: # matching and discarded .status / .retry_after / .error /
09579: # .error_description -- the very attributes c_err_to_py
09580: # promises are catchable.
+09581: exc.args = (
__pyx_t_33 = __Pyx_PyBaseException_set_args(__pyx_v_exc, __pyx_t_6); if (unlikely(__pyx_t_33 == ((int)-1))) __PYX_ERR(0, 9581, __pyx_L54_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+09582: f'{exc} The input stream was already partially '
__pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9582, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_The_input_stream_was_already_pa); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9582, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9582, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_GIVEREF(__pyx_t_1); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1) != (0)) __PYX_ERR(0, 9582, __pyx_L54_error); __pyx_t_1 = 0;
09583: f'consumed and cannot be replayed; retry with a '
09584: f'fresh reader.',)
+09585: raise exc
__Pyx_Raise(__pyx_v_exc, 0, 0, 0); __PYX_ERR(0, 9585, __pyx_L54_error)
09586:
09587: # Refuse a whole-source replay once any batch in this DataFrame
09588: # call may have committed. If only the Python sticky guard knows
09589: # about that prefix, widen the exposed error as well; otherwise a
09590: # caller could read `in_doubt=False` and manually repeat the same
09591: # unsafe replay.
+09592: if call_in_doubt:
if (__pyx_v_call_in_doubt) {
/* … */
}
+09593: if exc.in_doubt:
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_in_doubt); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9593, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 9593, __pyx_L54_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(__pyx_t_2)) { /* … */ }
+09594: raise exc
__Pyx_Raise(__pyx_v_exc, 0, 0, 0); __PYX_ERR(0, 9594, __pyx_L54_error)
+09595: raise _dataframe_call_error(
__pyx_t_6 = __pyx_f_7questdb_7_client__dataframe_call_error(__pyx_v_exc, ((PyObject*)__pyx_t_1), 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9595, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
09596: exc,
+09597: f'{exc} An earlier batch from this DataFrame call may '
__pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9597, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_An_earlier_batch_from_this_Data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9597, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
09598: f'have committed; replaying the original input from row '
09599: f'zero may duplicate rows.',
+09600: True) from exc
__Pyx_Raise(__pyx_t_6, 0, 0, __pyx_v_exc); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __PYX_ERR(0, 9595, __pyx_L54_error)
+09601: if oidc_terminal:
if (unlikely(__pyx_v_oidc_terminal)) {
/* … */
}
+09602: raise exc
__Pyx_Raise(__pyx_v_exc, 0, 0, 0); __PYX_ERR(0, 9602, __pyx_L54_error)
09603: # A transport can retain SocketError / FailoverRetry around a
09604: # permanent provider failure so background delivery can recover.
09605: # Foreground calls must honor the provider's retry classification.
+09606: if isinstance(exc, TokenUnavailableError) and not exc.retryable:
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_TokenUnavailableError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9606, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_26 = PyObject_IsInstance(__pyx_v_exc, __pyx_t_6); if (unlikely(__pyx_t_26 == ((int)-1))) __PYX_ERR(0, 9606, __pyx_L54_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (__pyx_t_26) { } else { __pyx_t_2 = __pyx_t_26; goto __pyx_L95_bool_binop_done; } __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_retryable); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9606, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_26 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_26 < 0))) __PYX_ERR(0, 9606, __pyx_L54_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_27 = (!__pyx_t_26); __pyx_t_2 = __pyx_t_27; __pyx_L95_bool_binop_done:; if (unlikely(__pyx_t_2)) { /* … */ }
+09607: raise exc
__Pyx_Raise(__pyx_v_exc, 0, 0, 0); __PYX_ERR(0, 9607, __pyx_L54_error)
09608: # Native foreground borrows fail fast on unclassified OIDC
09609: # provider failures (including Network). Do not mistake their
09610: # SocketError wrapper for a transport retry that consumed its
09611: # budget: re-entering here would busy-spin through provider backoff
09612: # and rebuild the dataframe on every iteration.
+09613: oidc_errors = _oidc_errors_module_if_ready()
__pyx_t_6 = __pyx_f_7questdb_7_client__oidc_errors_module_if_ready(); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9613, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_XDECREF_SET(__pyx_v_oidc_errors, __pyx_t_6); __pyx_t_6 = 0;
+09614: if (oidc_errors is not None
__pyx_t_27 = (__pyx_v_oidc_errors != Py_None);
if (__pyx_t_27) {
} else {
__pyx_t_2 = __pyx_t_27;
goto __pyx_L98_bool_binop_done;
}
/* … */
if (unlikely(__pyx_t_2)) {
/* … */
}
+09615: and isinstance(exc, oidc_errors.OidcError)
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_oidc_errors, __pyx_mstate_global->__pyx_n_u_OidcError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9615, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_27 = PyObject_IsInstance(__pyx_v_exc, __pyx_t_6); if (unlikely(__pyx_t_27 == ((int)-1))) __PYX_ERR(0, 9615, __pyx_L54_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (__pyx_t_27) { } else { __pyx_t_2 = __pyx_t_27; goto __pyx_L98_bool_binop_done; }
+09616: and not bool(getattr(exc, '_acquisition_busy', False))):
__pyx_t_1 = NULL;
__pyx_t_17 = __Pyx_GetAttr3(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_acquisition_busy_2, Py_False); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 9616, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_17);
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_17};
__pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9616, __pyx_L54_error)
__Pyx_GOTREF((PyObject *)__pyx_t_6);
}
__pyx_t_27 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_t_6)); if (unlikely((__pyx_t_27 < 0))) __PYX_ERR(0, 9616, __pyx_L54_error)
__Pyx_DECREF((PyObject *)__pyx_t_6); __pyx_t_6 = 0;
__pyx_t_26 = (!__pyx_t_27);
__pyx_t_2 = __pyx_t_26;
__pyx_L98_bool_binop_done:;
+09617: raise exc
__Pyx_Raise(__pyx_v_exc, 0, 0, 0); __PYX_ERR(0, 9617, __pyx_L54_error)
09618: # Delivery status and retryability are independent. A local
09619: # validation error still requires the caller to correct its input.
09620: # FailoverRetry = transient flush/sync; SocketError = a
09621: # re-borrow that has not reached a live primary yet. A *busy*
09622: # OIDC refusal is transient whatever its code: it clears as soon
09623: # as the peer sign-in finishes, and must wait behind it as the gate
09624: # above promises. Native reports it as SocketError today; keying on
09625: # the busy flag as well keeps that promise independent of the
09626: # code.
+09627: if exc.code not in (
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9627, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_6); /* … */ __pyx_t_27 = __pyx_t_26; if (__pyx_t_27) { } else { __pyx_t_2 = __pyx_t_27; goto __pyx_L102_bool_binop_done; } /* … */ if (unlikely(__pyx_t_2)) { /* … */ }
+09628: QuestDBErrorCode.FailoverRetry,
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 9628, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_FailoverRetry); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9628, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_27 = __Pyx_PyObject_CompareBoolNe_object_object(__pyx_t_6, __pyx_t_1, Py_NE); if (unlikely((__pyx_t_27 < 0))) __PYX_ERR(0, 9627, __pyx_L54_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_27) { } else { __pyx_t_26 = __pyx_t_27; goto __pyx_L104_bool_binop_done; }
+09629: QuestDBErrorCode.SocketError) and not bool(
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9629, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_SocketError); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 9629, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 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, 9627, __pyx_L54_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_26 = __pyx_t_27; __pyx_L104_bool_binop_done:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; /* … */ __pyx_t_17 = NULL; /* … */ __pyx_t_27 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_t_6)); if (unlikely((__pyx_t_27 < 0))) __PYX_ERR(0, 9629, __pyx_L54_error) __Pyx_DECREF((PyObject *)__pyx_t_6); __pyx_t_6 = 0; __pyx_t_26 = (!__pyx_t_27); __pyx_t_2 = __pyx_t_26; __pyx_L102_bool_binop_done:;
+09630: getattr(exc, '_acquisition_busy', False)):
__pyx_t_1 = __Pyx_GetAttr3(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_acquisition_busy_2, Py_False); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9630, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_t_1}; __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9629, __pyx_L54_error) __Pyx_GOTREF((PyObject *)__pyx_t_6); }
+09631: raise exc
__Pyx_Raise(__pyx_v_exc, 0, 0, 0); __PYX_ERR(0, 9631, __pyx_L54_error)
09632: # The connect already had the rest of the budget: native spent it,
09633: # or stopped early on a failure it does not retry for a caller that
09634: # waits (a token provider returning an empty token, say). Borrowing
09635: # again would repeat that in a tight loop until the deadline.
+09636: if connect_final:
if (unlikely(__pyx_v_connect_final)) {
/* … */
}
+09637: raise exc
__Pyx_Raise(__pyx_v_exc, 0, 0, 0); __PYX_ERR(0, 9637, __pyx_L54_error)
+09638: remaining = deadline - time.monotonic()
__pyx_t_6 = PyFloat_FromDouble(__pyx_v_deadline); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9638, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_17 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 9638, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 9638, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_4 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_17); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_17); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_4 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_17, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9638, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_7 = __Pyx_PyNumber_Subtract_float_object(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 9638, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_29 = __Pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_29 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 9638, __pyx_L54_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_remaining = __pyx_t_29;
+09639: if remaining <= 0.0:
__pyx_t_2 = (__pyx_v_remaining <= 0.0);
if (unlikely(__pyx_t_2)) {
/* … */
}
+09640: raise exc
__Pyx_Raise(__pyx_v_exc, 0, 0, 0); __PYX_ERR(0, 9640, __pyx_L54_error)
09641: # The whole remaining budget goes to the next attempt's connect.
09642: # With a provider attached, `_direct_conn_open_checked` slices it
09643: # so the terminal-OIDC gate still fails fast, without cutting the
09644: # retry of any other failure short.
+09645: budget_ms = <uint64_t>(remaining * 1000.0)
__pyx_v_budget_ms = ((uint64_t)(__pyx_v_remaining * 1000.0));
}
09646:
09647:
+09648: cdef void_int _capsule_consume_stream_with_hint(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__capsule_consume_stream_with_hint(struct qwp_direct_sender *__pyx_v_conn, PyObject *__pyx_v_stream_owner, struct line_sender_table_name __pyx_v_c_table_name, struct line_sender_column_name *__pyx_v_c_ts_column_ptr, int __pyx_v_at_scalar_set, int64_t __pyx_v_at_scalar_nanos, struct ArrowSchema *__pyx_v_c_schema, struct qwp_arrow_override const *__pyx_v_c_overrides, size_t __pyx_v_c_overrides_len, int *__pyx_v_any_flushed, size_t *__pyx_v_deferred_since_sync, int *__pyx_v_may_have_committed_prefix, size_t __pyx_v_max_rows_per_batch, int __pyx_v_can_slice, PyObject *__pyx_v_binary_names, PyObject *__pyx_v_unlabelled) {
PyObject *__pyx_v_hint = 0;
PyObject *__pyx_v_exc = NULL;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_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;
}
09649: qwp_direct_sender* conn,
09650: object stream_owner,
09651: line_sender_table_name c_table_name,
09652: line_sender_column_name* c_ts_column_ptr,
09653: bint at_scalar_set,
09654: int64_t at_scalar_nanos,
09655: ArrowSchema* c_schema,
09656: const qwp_arrow_override* c_overrides,
09657: size_t c_overrides_len,
09658: bint* any_flushed,
09659: size_t* deferred_since_sync,
09660: bint* may_have_committed_prefix,
09661: size_t max_rows_per_batch,
09662: bint can_slice,
09663: object binary_names,
09664: object unlabelled) except -1:
09665: cdef str hint
+09666: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L8_try_end;
__pyx_L3_error:;
/* … */
__pyx_L5_except_error:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L1_error;
__pyx_L8_try_end:;
}
+09667: _capsule_consume_stream(
__pyx_t_4 = __pyx_f_7questdb_7_client__capsule_consume_stream(__pyx_v_conn, __pyx_v_stream_owner, __pyx_v_c_table_name, __pyx_v_c_ts_column_ptr, __pyx_v_at_scalar_set, __pyx_v_at_scalar_nanos, __pyx_v_c_schema, __pyx_v_c_overrides, __pyx_v_c_overrides_len, __pyx_v_any_flushed, __pyx_v_deferred_since_sync, __pyx_v_may_have_committed_prefix, __pyx_v_binary_names, __pyx_v_unlabelled); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9667, __pyx_L3_error)
09668: conn, stream_owner, c_table_name, c_ts_column_ptr,
09669: at_scalar_set, at_scalar_nanos, c_schema,
09670: c_overrides, c_overrides_len, any_flushed,
09671: deferred_since_sync, may_have_committed_prefix,
09672: binary_names, unlabelled)
+09673: except QuestDBError as exc:
__Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9673, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_5, __pyx_t_8); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_ErrRestore(__pyx_t_5, __pyx_t_6, __pyx_t_7); __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; if (__pyx_t_9) { __Pyx_AddTraceback("questdb._client._capsule_consume_stream_with_hint", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5) < 0) __PYX_ERR(0, 9673, __pyx_L5_except_error) __Pyx_XGOTREF(__pyx_t_7); __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_t_6); __pyx_v_exc = __pyx_t_6; /*try:*/ { /* … */ /*finally:*/ { __pyx_L14_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_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;
+09674: if _is_batch_too_large_error(exc):
__pyx_t_10 = __pyx_f_7questdb_7_client__is_batch_too_large_error(__pyx_v_exc); if (unlikely(__pyx_t_10 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 9674, __pyx_L14_error) if (__pyx_t_10) { /* … */ }
+09675: if exc.code == QuestDBErrorCode.BatchTooLarge:
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9675, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 9675, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_BatchTooLarge); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 9675, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_10 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_8, __pyx_t_12, Py_EQ); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 9675, __pyx_L14_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (__pyx_t_10) { /* … */ goto __pyx_L17; }
09676: # The core already split the chunk as far as it can: a single
09677: # row (table schema plus one row's values) still exceeds the
09678: # server's per-batch cap, so a smaller batch cannot help.
09679: hint = (
+09680: 'a single row exceeds the server per-batch cap '
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_a_single_row_exceeds_the_server);
__pyx_v_hint = __pyx_mstate_global->__pyx_kp_u_a_single_row_exceeds_the_server;
09681: '(max_buf_size / the server X-QWP-Max-Batch-Size); reduce '
09682: 'the size of individual values or raise the cap. '
09683: '`max_rows_per_batch` does not bound a single row.')
+09684: elif can_slice:
if (__pyx_v_can_slice) {
/* … */
goto __pyx_L17;
}
09685: hint = (
+09686: f'reduce `max_rows_per_batch` (current: '
__pyx_t_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, 9686, __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;
+09687: 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, 9687, __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;
09688: else:
09689: hint = (
+09690: 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, 9690, __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:;
09691: f'pa.RecordBatchReader); batch size is set by the '
09692: f'producer and `max_rows_per_batch` (current: '
+09693: f'{max_rows_per_batch}) does not bound it. '
__pyx_t_8 = __Pyx_PyUnicode_From_size_t(__pyx_v_max_rows_per_batch, 0, ' ', 'd'); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9693, __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;
09694: f'Materialise to a `pa.Table` '
09695: f'(`pa.Table.from_batches(reader)`) or re-batch '
09696: f'at the source before passing.')
+09697: raise QuestDBError(
__pyx_t_8 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 9697, __pyx_L14_error)
__Pyx_GOTREF(__pyx_t_11);
+09698: 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, 9698, __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, 9698, __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, 9698, __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, 9697, __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, 9697, __pyx_L14_error)
+09699: raise
__Pyx_GIVEREF(__pyx_t_7); __Pyx_GIVEREF(__pyx_t_6); __Pyx_XGIVEREF(__pyx_t_5); __Pyx_ErrRestoreWithState(__pyx_t_7, __pyx_t_6, __pyx_t_5); __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_5 = 0; __PYX_ERR(0, 9699, __pyx_L14_error) }
09700:
09701:
+09702: cdef bint _is_batch_too_large_error(object exc):
static int __pyx_f_7questdb_7_client__is_batch_too_large_error(PyObject *__pyx_v_exc) {
PyObject *__pyx_v_msg = 0;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client._is_batch_too_large_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_msg);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
09703: cdef str msg
+09704: if not isinstance(exc, QuestDBError):
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9704, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_IsInstance(__pyx_v_exc, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 9704, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = (!__pyx_t_2); if (__pyx_t_3) { /* … */ }
+09705: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+09706: if exc.code == QuestDBErrorCode.BatchTooLarge:
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9706, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 9706, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_BatchTooLarge); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 9706, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_3 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_1, __pyx_t_5, Py_EQ); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 9706, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_3) { /* … */ }
+09707: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
09708: # Fallback for encoder-level "too large" errors that carry no dedicated
09709: # code (MAX_CHUNK_ROWS row-count overflow, an oversize single value).
+09710: msg = str(exc).lower()
__pyx_t_4 = __Pyx_PyObject_Unicode(__pyx_v_exc); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 9710, __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, 9710, __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, 9710, __pyx_L1_error) __pyx_v_msg = ((PyObject*)__pyx_t_5); __pyx_t_5 = 0;
09711: return (
+09712: ('row_count' in msg and ('exceeds' in msg or 'too large' in msg))
__pyx_t_2 = (__Pyx_PyUnicode_ContainsTF(__pyx_mstate_global->__pyx_n_u_row_count, __pyx_v_msg, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 9712, __pyx_L1_error) if (!__pyx_t_2) { goto __pyx_L6_next_or; } else { } __pyx_t_2 = (__Pyx_PyUnicode_ContainsTF(__pyx_mstate_global->__pyx_n_u_exceeds, __pyx_v_msg, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 9712, __pyx_L1_error) if (!__pyx_t_2) { } else { __pyx_t_3 = __pyx_t_2; goto __pyx_L5_bool_binop_done; } __pyx_t_2 = (__Pyx_PyUnicode_ContainsTF(__pyx_mstate_global->__pyx_kp_u_too_large, __pyx_v_msg, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 9712, __pyx_L1_error) if (!__pyx_t_2) { } else { __pyx_t_3 = __pyx_t_2; goto __pyx_L5_bool_binop_done; } __pyx_L6_next_or:;
+09713: or 'batch too large' in msg)
__pyx_t_2 = (__Pyx_PyUnicode_ContainsTF(__pyx_mstate_global->__pyx_kp_u_batch_too_large, __pyx_v_msg, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 9713, __pyx_L1_error) __pyx_t_3 = __pyx_t_2; __pyx_L5_bool_binop_done:; { __pyx_r = __pyx_t_3; } goto __pyx_L0;
09714:
09715:
09716: # no_gc_clear keeps tp_clear from nulling fields the native dispatchers
09717: # still target. The callback targets are additionally pinned in
09718: # _LIVE_CALLBACK_REFS until the dispatchers are joined, so the cycle collector
09719: # cannot clear a live handler even when the handle is reached only through it.
+09720: @cython.no_gc_clear
struct __pyx_vtabstruct_7questdb_7_client_QuestDB {
struct questdb_db *(*_begin_db_use)(struct __pyx_obj_7questdb_7_client_QuestDB *, PyObject *, struct __pyx_opt_args_7questdb_7_client_7QuestDB__begin_db_use *__pyx_optional_args);
uintptr_t (*_scoped_call_depth)(struct __pyx_obj_7questdb_7_client_QuestDB *);
void (*_enter_scoped_call)(struct __pyx_obj_7questdb_7_client_QuestDB *);
void (*_exit_scoped_call)(struct __pyx_obj_7questdb_7_client_QuestDB *);
void (*_end_db_use)(struct __pyx_obj_7questdb_7_client_QuestDB *, struct __pyx_opt_args_7questdb_7_client_7QuestDB__end_db_use *__pyx_optional_args);
PyObject *(*close)(struct __pyx_obj_7questdb_7_client_QuestDB *, int __pyx_skip_dispatch, struct __pyx_opt_args_7questdb_7_client_7QuestDB_close *__pyx_optional_args);
};
static struct __pyx_vtabstruct_7questdb_7_client_QuestDB *__pyx_vtabptr_7questdb_7_client_QuestDB;
09721: cdef class QuestDB:
09722: """
09723: Handle to a QuestDB deployment over QWP/WebSocket.
09724:
09725: Owns the connection pool; lends row-building senders via
09726: :meth:`sender`, bulk-loads DataFrames via :meth:`dataframe`, runs
09727: queries via :meth:`query`, and lends reader leases via
09728: :meth:`reader`. Construct with :func:`questdb.connect`.
09729: Instances are safe to share across threads.
09730: """
09731: cdef questdb_db* _db
09732: cdef object _conf_str
09733: cdef object _state_cond
09734: cdef size_t _lease_uses
09735: cdef size_t _call_uses
09736: cdef bint _closing
09737: cdef bint _close_running
09738: cdef object _close_deadline
09739: cdef object _thread_owner_token
09740: cdef object _dispatch_context
09741: cdef object _connection_listener
09742: cdef object _error_handler
09743: cdef object _oidc_auth
09744: # Store _bearer_token_provider in __dict__ so PyPy can collect a
09745: # provider that owns this client; cpyext object fields hide that cycle.
09746: # `__setattr__` keeps every other name out of it.
09747: cdef dict __dict__
09748: cdef size_t _cb_refs_key
09749: cdef auto_flush_mode_t _auto_flush_mode
09750: cdef bint _auto_flush_bytes_dynamic
09751:
+09752: def __setattr__(self, name, value):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_7QuestDB_1__setattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_7questdb_7_client_7QuestDB_1__setattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__setattr__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_7QuestDB___setattr__(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self), ((PyObject *)__pyx_v_name), ((PyObject *)__pyx_v_value));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_7QuestDB___setattr__(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.QuestDB.__setattr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+09753: _setattr_without_dict(self, QuestDB, _DICT_ONLY_ATTRS, name, value)
__pyx_t_1 = __pyx_v_7questdb_7_client__DICT_ONLY_ATTRS; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = __pyx_f_7questdb_7_client__setattr_without_dict(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, ((PyObject*)__pyx_t_1), __pyx_v_name, __pyx_v_value); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9753, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
09754:
+09755: def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_7QuestDB_3__cinit__(PyObject *__pyx_v_self,
#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_3__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_2__cinit__(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_7QuestDB_2__cinit__(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.QuestDB.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+09756: self._db = NULL
__pyx_v_self->_db = NULL;
+09757: self._conf_str = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_conf_str); __Pyx_DECREF_SET(__pyx_v_self->_conf_str, Py_None);
+09758: self._state_cond = threading.Condition(threading.RLock())
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9758, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Condition); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 9758, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9758, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_RLock); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 9758, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9758, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9758, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v_self->_state_cond); __Pyx_DECREF_SET(__pyx_v_self->_state_cond, __pyx_t_1); __pyx_t_1 = 0;
+09759: self._lease_uses = 0
__pyx_v_self->_lease_uses = 0;
+09760: self._call_uses = 0
__pyx_v_self->_call_uses = 0;
+09761: self._closing = False
__pyx_v_self->_closing = 0;
+09762: self._close_running = False
__pyx_v_self->_close_running = 0;
+09763: self._close_deadline = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_close_deadline); __Pyx_DECREF_SET(__pyx_v_self->_close_deadline, Py_None);
09764: # This exact owner token indexes the handle's entry in the
09765: # per-OS-thread table of scoped call and callback-dispatch
09766: # depths. The table is shared by every handle, so a handle keeps
09767: # its own identity per thread without allocating an OS TLS key
09768: # of its own.
+09769: self._thread_owner_token = object()
__pyx_t_4 = NULL;
__pyx_t_8 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_object, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9769, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_GIVEREF(__pyx_t_1);
__Pyx_GOTREF(__pyx_v_self->_thread_owner_token);
__Pyx_DECREF_SET(__pyx_v_self->_thread_owner_token, __pyx_t_1);
__pyx_t_1 = 0;
+09770: self._dispatch_context = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_dispatch_context); __Pyx_DECREF_SET(__pyx_v_self->_dispatch_context, Py_None);
+09771: self._connection_listener = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_connection_listener); __Pyx_DECREF_SET(__pyx_v_self->_connection_listener, Py_None);
+09772: self._error_handler = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_error_handler); __Pyx_DECREF_SET(__pyx_v_self->_error_handler, Py_None);
+09773: self._oidc_auth = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_oidc_auth); __Pyx_DECREF_SET(__pyx_v_self->_oidc_auth, Py_None);
+09774: self._bearer_token_provider = None
if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_bearer_token_provider, Py_None) < (0)) __PYX_ERR(0, 9774, __pyx_L1_error)
+09775: self._cb_refs_key = 0
__pyx_v_self->_cb_refs_key = 0;
+09776: self._auto_flush_mode.enabled = False
__pyx_v_self->_auto_flush_mode.enabled = 0;
+09777: self._auto_flush_mode.interval = -1
__pyx_v_self->_auto_flush_mode.interval = -1L;
+09778: self._auto_flush_mode.row_count = -1
__pyx_v_self->_auto_flush_mode.row_count = -1L;
+09779: self._auto_flush_mode.byte_count = -1
__pyx_v_self->_auto_flush_mode.byte_count = -1L;
+09780: self._auto_flush_bytes_dynamic = False
__pyx_v_self->_auto_flush_bytes_dynamic = 0;
09781:
+09782: cdef questdb_db* _begin_db_use(
static struct questdb_db *__pyx_f_7questdb_7_client_7QuestDB__begin_db_use(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self, PyObject *__pyx_v_method, struct __pyx_opt_args_7questdb_7_client_7QuestDB__begin_db_use *__pyx_optional_args) {
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_AddTraceback("questdb._client.QuestDB._begin_db_use", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
struct __pyx_opt_args_7questdb_7_client_7QuestDB__begin_db_use {
int __pyx_n;
int scoped;
};
+09783: self, str method, bint scoped=True) except? NULL:
int __pyx_v_scoped = ((int)1);
struct questdb_db *__pyx_v_db;
struct questdb_db *__pyx_r;
if (__pyx_optional_args) {
if (__pyx_optional_args->__pyx_n > 0) {
__pyx_v_scoped = __pyx_optional_args->scoped;
}
}
+09784: cdef questdb_db* db = NULL
__pyx_v_db = NULL;
+09785: self._state_cond.acquire()
__pyx_t_2 = __pyx_v_self->_state_cond; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9785, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+09786: try:
/*try:*/ {
+09787: db = self._db
__pyx_t_4 = __pyx_v_self->_db;
__pyx_v_db = __pyx_t_4;
+09788: if db == NULL:
__pyx_t_5 = (__pyx_v_db == NULL);
if (unlikely(__pyx_t_5)) {
/* … */
}
+09789: raise QuestDBError(
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9789, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_6);
+09790: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 9790, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9790, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+09791: f"{method}() can't be called: QuestDB is closed.")
__pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 9791, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_9 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_QuestDB_is_clos); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 9791, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_3 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_3 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_8, __pyx_t_9}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9789, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 9789, __pyx_L4_error)
+09792: if self._closing:
if (unlikely(__pyx_v_self->_closing)) {
/* … */
}
09793: # Closing is one-way, so this refusal is permanent:
09794: # the handle never goes back to taking new work.
+09795: raise QuestDBError(
__pyx_t_6 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 9795, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_9);
+09796: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9796, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9796, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+09797: f"{method}() can't be called: QuestDB is closing. "
__pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9797, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_8, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_QuestDB_is_clos_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 9797, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_3 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_6); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_3 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_2, __pyx_t_7}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9795, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 9795, __pyx_L4_error)
09798: 'close() has been called, and the handle takes no '
09799: 'new work while calls in progress and outstanding '
09800: 'leases finish.')
09801: # A scoped use begins and ends inside one call on one
09802: # thread, so it can also be counted per thread and let
09803: # `close()` tell a caller waiting on other threads from one
09804: # waiting on itself. A lease is not scoped: it is handed
09805: # out here and may be returned from anywhere, so counting
09806: # it per thread would leave the borrower's count standing
09807: # and the returner's below zero. The two kinds are counted
09808: # apart because `close()` limits its wait for each
09809: # differently and says which it is waiting for: a call ends
09810: # when its work does, a lease only when its holder closes
09811: # it.
+09812: if scoped:
if (__pyx_v_scoped) {
/* … */
goto __pyx_L8;
}
+09813: self._enter_scoped_call()
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_enter_scoped_call(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9813, __pyx_L4_error)
09814: # The first scoped call on a thread allocates its call
09815: # table, and on CPython 3.10/3.11 and PyPy an allocation
09816: # can run a garbage-collection pass right here. A
09817: # finalizer it runs can close this handle on this
09818: # thread, since the lock is reentrant, and that close
09819: # sees no use yet and frees the pool. The pointer read
09820: # above is only good if the handle is still open now.
+09821: if self._db == NULL or self._closing:
__pyx_t_10 = (__pyx_v_self->_db == NULL);
if (!__pyx_t_10) {
} else {
__pyx_t_5 = __pyx_t_10;
goto __pyx_L10_bool_binop_done;
}
__pyx_t_5 = __pyx_v_self->_closing;
__pyx_L10_bool_binop_done:;
if (unlikely(__pyx_t_5)) {
/* … */
}
+09822: self._exit_scoped_call()
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_exit_scoped_call(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9822, __pyx_L4_error)
+09823: raise QuestDBError(
__pyx_t_9 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 9823, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_7);
+09824: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9824, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9824, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+09825: f"{method}() can't be called: QuestDB was "
__pyx_t_2 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9825, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_8 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_QuestDB_was_clo); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9825, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_9); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_3 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_9, __pyx_t_6, __pyx_t_8}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9823, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 9823, __pyx_L4_error)
09826: 'closed while the call was starting.')
+09827: self._call_uses += 1
__pyx_v_self->_call_uses = (__pyx_v_self->_call_uses + 1);
09828: else:
+09829: self._lease_uses += 1
/*else*/ {
__pyx_v_self->_lease_uses = (__pyx_v_self->_lease_uses + 1);
}
__pyx_L8:;
+09830: return db
{
__pyx_r = __pyx_v_db;
}
goto __pyx_L3_return;
}
09831: finally:
+09832: self._state_cond.release()
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_19);
__pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
{
__pyx_t_7 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_7);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9832, __pyx_L13_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
}
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
__pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
goto __pyx_L1_error;
__pyx_L13_error:;
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
goto __pyx_L1_error;
}
__pyx_L3_return: {
__pyx_t_4 = __pyx_r;
__pyx_t_7 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_7);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9832, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_r = __pyx_t_4;
goto __pyx_L0;
}
}
09833:
+09834: cdef uintptr_t _scoped_call_depth(self) except? <uintptr_t>-1:
static uintptr_t __pyx_f_7questdb_7_client_7QuestDB__scoped_call_depth(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
uintptr_t __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.QuestDB._scoped_call_depth", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = ((uintptr_t)-1L);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
09835: """This handle's call depth on the current OS thread."""
+09836: return _scoped_depth_for(self._thread_owner_token)
__pyx_t_1 = __pyx_v_self->_thread_owner_token; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = __pyx_f_7questdb_7_client__scoped_depth_for(__pyx_t_1); if (unlikely(__pyx_t_2 == ((uintptr_t)((uintptr_t)-1L)) && PyErr_Occurred())) __PYX_ERR(0, 9836, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { __pyx_r = __pyx_t_2; } goto __pyx_L0;
09837:
+09838: cdef void _enter_scoped_call(self) except *:
static void __pyx_f_7questdb_7_client_7QuestDB__enter_scoped_call(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.QuestDB._enter_scoped_call", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
09839: """Count a call that borrows nothing but runs on this handle.
09840:
09841: A lease's own methods are scoped in exactly the sense
09842: `_begin_db_use` means: the call begins and ends inside one frame
09843: on one thread. Counting them here is what lets `close()` tell a
09844: caller waiting on other threads from one waiting on the very
09845: frame that would release the lease it is waiting for.
09846:
09847: `_lease_uses` is deliberately untouched: the lease already
09848: holds one for its whole lifetime, and it may be released from a
09849: different thread than the one that borrowed it.
09850: """
+09851: _enter_scoped_for(self._thread_owner_token)
__pyx_t_1 = __pyx_v_self->_thread_owner_token; __Pyx_INCREF(__pyx_t_1); __pyx_f_7questdb_7_client__enter_scoped_for(__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9851, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
09852:
+09853: cdef void _exit_scoped_call(self) except *:
static void __pyx_f_7questdb_7_client_7QuestDB__exit_scoped_call(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.QuestDB._exit_scoped_call", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
+09854: _exit_scoped_for(self._thread_owner_token)
__pyx_t_1 = __pyx_v_self->_thread_owner_token; __Pyx_INCREF(__pyx_t_1); __pyx_f_7questdb_7_client__exit_scoped_for(__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9854, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
09855:
+09856: cdef void _end_db_use(self, bint scoped=True) except *:
static void __pyx_f_7questdb_7_client_7QuestDB__end_db_use(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self, struct __pyx_opt_args_7questdb_7_client_7QuestDB__end_db_use *__pyx_optional_args) {
int __pyx_v_scoped = ((int)1);
if (__pyx_optional_args) {
if (__pyx_optional_args->__pyx_n > 0) {
__pyx_v_scoped = __pyx_optional_args->scoped;
}
}
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.QuestDB._end_db_use", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
/* … */
struct __pyx_opt_args_7questdb_7_client_7QuestDB__end_db_use {
int __pyx_n;
int scoped;
};
+09857: self._state_cond.acquire()
__pyx_t_2 = __pyx_v_self->_state_cond; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9857, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+09858: try:
/*try:*/ {
+09859: if scoped:
if (__pyx_v_scoped) {
/* … */
goto __pyx_L6;
}
+09860: if self._call_uses == 0:
__pyx_t_4 = (__pyx_v_self->_call_uses == 0);
if (unlikely(__pyx_t_4)) {
/* … */
}
+09861: raise RuntimeError(
__pyx_t_2 = NULL;
__pyx_t_3 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_QuestDB_call_use_counter_underfl};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9861, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 9861, __pyx_L4_error)
09862: 'QuestDB call-use counter underflow.')
09863: # The thread-local update below can raise. Unwind the shared
09864: # count first so a failed update cannot leave close() waiting
09865: # on a call that has already returned.
+09866: self._call_uses -= 1
__pyx_v_self->_call_uses = (__pyx_v_self->_call_uses - 1);
+09867: self._exit_scoped_call()
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_exit_scoped_call(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9867, __pyx_L4_error)
09868: else:
+09869: if self._lease_uses == 0:
/*else*/ {
__pyx_t_4 = (__pyx_v_self->_lease_uses == 0);
if (unlikely(__pyx_t_4)) {
/* … */
}
+09870: raise RuntimeError(
__pyx_t_2 = NULL;
__pyx_t_3 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_QuestDB_lease_counter_underflow};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9870, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 9870, __pyx_L4_error)
09871: 'QuestDB lease counter underflow.')
+09872: self._lease_uses -= 1
__pyx_v_self->_lease_uses = (__pyx_v_self->_lease_uses - 1);
}
__pyx_L6:;
+09873: if self._lease_uses + self._call_uses == 0:
__pyx_t_4 = ((__pyx_v_self->_lease_uses + __pyx_v_self->_call_uses) == 0);
if (__pyx_t_4) {
/* … */
}
}
+09874: self._state_cond.notify_all()
__pyx_t_2 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_notify_all, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9874, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
09875: finally:
+09876: self._state_cond.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_2 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9876, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L5;
}
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
if ( unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__pyx_t_5 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_7 = __pyx_filename;
{
__pyx_t_2 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9876, __pyx_L11_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
}
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_ErrRestore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
__pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
__pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_7;
goto __pyx_L1_error;
__pyx_L11_error:;
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
goto __pyx_L1_error;
}
__pyx_L5:;
}
09877:
+09878: @staticmethod
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_5from_conf(CYTHON_UNUSED PyObject *__pyx_self, #if CYTHON_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_4from_conf, "\n Construct a handle from a QWP/WebSocket configuration string.\n\n Prefer the :func:`questdb.connect` module-level factory.\n\n By default the handle connects eagerly: construction pre-opens the\n warm minimums (``sender_pool_min`` sender and ``query_pool_min``\n reader connections, one of each by default), so an unreachable\n server or bad credentials fail here, fast. With\n ``lazy_connect=true`` construction opens no connection: sender\n leases buffer locally and connect in the background, readers\n connect on first use (``query_pool_min`` defaults to 0), and\n errors surface from the first operation instead. Combining\n ``lazy_connect=true`` with a blocking ``initial_connect_retry``\n or a positive ``query_pool_min`` is a configuration conflict.\n\n Pooled row auto-flush is enabled by default at 1,000 rows, 100\n milliseconds, or an estimated encoded size at 90% of the effective\n frame cap. Before a server cap is known, or when the server omits it,\n the byte threshold is 90% of the lower of QuestDB\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 ``oidc_auth`` attaches a native rotating OIDC token provider. Call its\n :meth:`~questdb.auth.OidcDeviceAuth.sign_in` method before constructing\n the pool; connection and reconnect paths never start an interactive\n device flow.\n Use ``wss::``: over plain ``ws::`` to a non-loopback host the token is\n sent in cleartext. A closed provider raises\n :class:`~questdb.auth.""OidcCancelledError`.\n\n ``bearer_token_provider`` attaches a rotating Bearer-token provider\n instead: a :class:`questdb.auth.RefreshingTokenProvider` around a token\n source of your own, a callable returning a token, or an object with\n ``token()`` and an optional ``on_rejected()`` -- see\n :ref:`refreshing_token_provider`. It is mutually exclusive with\n ``oidc_auth``, ``token``, ``username`` and ``password``. A provider\n that runs on the calling thread runs inside the call that needs the\n token; see :ref:`token_provider_reentrancy` for what it, and a Python\n signal handler that runs there, must not do.\n\n The connection pool is opened eagerly unless configuration selects a\n lazy connection. Dataframe ingestion always uses the direct\n (non-store-and-forward)\n QWP/WebSocket column sender, independent of ``sf_dir``. On a transient\n connection failure the original DataFrame is re-sent only when no\n batch was successfully published and the failed operation is provably\n not delivered. Once a prefix may have committed, the call raises\n instead of replaying from row zero. A delivery-unknown failure surfaces\n as :class:`QuestDBError` with ``in_doubt`` set.\n ``request_timeout`` bounds each commit\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: connects, disconnects and reconnects,\n per-endpoint attempt failures, failover, credential rejections and\n token-provider failures (see :class:`ConnectionEventKind`). A\n credential the server rejects (``AuthFailed``) fails a connection\n that is waited for --"" the eager first connect, or a borrow that\n opens a connection -- but a sender that has already connected keeps\n reconnecting and reports each rejected attempt. For a token-provider\n failure (``CredentialUnavailable``),\n :attr:`ConnectionEvent.cause_code` tells a retry (``SocketError``)\n from a stop (``AuthError`` or ``ConfigError``). See\n :ref:`token_rejections`. The listener runs on a\n dedicated dispatcher thread fed by a bounded inbox\n (``connection_event_inbox_capacity``; ``0`` selects the default\n of 64) with a drop-oldest overflow policy, so a slow listener\n cannot stall ingest or reconnects. Exceptions it raises are\n logged and swallowed. Dropped/delivered totals are available via\n :attr:`connection_events_dropped` /\n :attr:`connection_events_delivered`. Successful events are queued\n only after negotiated state, including the server frame cap, is\n committed; they do not acknowledge data.\n\n ``error_handler``, when set, is a callable receiving one\n :class:`SenderError` per server rejection recorded by any of the\n pool\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 rejections, ``WARNING`` for retriable ones (the affected\n rows are replayed, not lost) \342\200\224 so rejections are never silent.\n A terminal rejection is queued only after the connection\047s terminal\n latch and pollable diagnostic have been com""mitted.\n Delivered/dropped totals are available via\n :attr:`error_events_delivered` /\n :attr:`error_events_dropped`. Use the handler for\n dead-lettering, alerting, and metrics; terminal failures also\n surface as :class:`QuestDBError` from the sender calls themselves.\n\n When a handler or listener closes over the returned handle, call\n :meth:`close` explicitly (or use ``with``): until closed, such a\n handle is pinned alive rather than collected, so an abandoned one\n leaks instead of crashing. The pin is dropped at interpreter\n shutdown, so an unclosed self-referential handle can still crash\n during finalization.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_5from_conf = {"from_conf", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_5from_conf, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_4from_conf}; static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_5from_conf(CYTHON_UNUSED PyObject *__pyx_self, #if CYTHON_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_oidc_auth = 0; PyObject *__pyx_v_bearer_token_provider = 0; PyObject *__pyx_v_connection_listener = 0; PyObject *__pyx_v_connection_event_inbox_capacity = 0; PyObject *__pyx_v_error_handler = 0; PyObject *__pyx_v_error_event_inbox_capacity = 0; #if !CYTHON_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_oidc_auth,&__pyx_mstate_global->__pyx_n_u_bearer_token_provider_2,&__pyx_mstate_global->__pyx_n_u_connection_listener,&__pyx_mstate_global->__pyx_n_u_connection_event_inbox_capacity,&__pyx_mstate_global->__pyx_n_u_error_handler,&__pyx_mstate_global->__pyx_n_u_error_event_inbox_capacity,0}; PyObject* values[7] = {0,0,0,0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 9878, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 9878, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "from_conf", 0) < (0)) __PYX_ERR(0, 9878, __pyx_L3_error) /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_gb_7questdb_7_client_7QuestDB_9from_conf_2generator8(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ /* … */ static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_4from_conf(PyObject *__pyx_v_conf_str, PyObject *__pyx_v_oidc_auth, PyObject *__pyx_v_bearer_token_provider, PyObject *__pyx_v_connection_listener, PyObject *__pyx_v_connection_event_inbox_capacity, PyObject *__pyx_v_error_handler, PyObject *__pyx_v_error_event_inbox_capacity) { struct __pyx_obj_7questdb_7_client___pyx_scope_struct_11_from_conf *__pyx_cur_scope; struct line_sender_error *__pyx_v_err; struct line_sender_utf8 __pyx_v_c_conf; enum line_sender_protocol __pyx_v_c_protocol; PyObject *__pyx_v_protocol = 0; PyObject *__pyx_v_params = 0; int __pyx_v_auto_flush_configured; PyObject *__pyx_v_native_conf_str = 0; struct qdb_pystr_buf *__pyx_v_b; struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_db = 0; PyThreadState *__pyx_v_gs; void *__pyx_v_connection_listener_data; questdb_connection_event_cb __pyx_v_connection_event_cb; size_t __pyx_v_c_event_inbox_capacity; size_t __pyx_v_c_error_inbox_capacity; struct questdb_db_connect_options __pyx_v_connect_options; PyObject *__pyx_v_conflicting = NULL; PyObject *__pyx_gb_7questdb_7_client_7QuestDB_9from_conf_2generator8 = 0; PyObject *__pyx_9genexpr27__pyx_v_key = NULL; PyObject *__pyx_gb_7questdb_7_client_7QuestDB_9from_conf_5generator9 = 0; PyObject *__pyx_9genexpr29__pyx_v_key = NULL; PyObject *__pyx_gb_7questdb_7_client_7QuestDB_9from_conf_8generator10 = 0; PyObject *__pyx_r = NULL; __pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_11_from_conf *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_11_from_conf(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_11_from_conf, __pyx_mstate_global->__pyx_empty_tuple, NULL); if (unlikely(!__pyx_cur_scope)) { __pyx_cur_scope = ((struct __pyx_obj_7questdb_7_client___pyx_scope_struct_11_from_conf *)Py_None); __Pyx_INCREF(Py_None); __PYX_ERR(0, 9878, __pyx_L1_error) } else { __Pyx_GOTREF((PyObject *)__pyx_cur_scope); } __Pyx_INCREF(__pyx_v_error_handler); /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_15); __Pyx_AddTraceback("questdb._client.QuestDB.from_conf", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_protocol); __Pyx_XDECREF(__pyx_v_params); __Pyx_XDECREF(__pyx_v_native_conf_str); __Pyx_XDECREF((PyObject *)__pyx_v_db); __Pyx_XDECREF(__pyx_v_conflicting); __Pyx_XDECREF(__pyx_gb_7questdb_7_client_7QuestDB_9from_conf_2generator8); __Pyx_XDECREF(__pyx_9genexpr27__pyx_v_key); __Pyx_XDECREF(__pyx_gb_7questdb_7_client_7QuestDB_9from_conf_5generator9); __Pyx_XDECREF(__pyx_9genexpr29__pyx_v_key); __Pyx_XDECREF(__pyx_gb_7questdb_7_client_7QuestDB_9from_conf_8generator10); __Pyx_XDECREF(__pyx_v_error_handler); __Pyx_DECREF((PyObject *)__pyx_cur_scope); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 9878, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); /* … */ __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_5from_conf, __Pyx_CYFUNCTION_STATICMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB_from_conf, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[210])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 9878, __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_18); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_from_conf, __pyx_t_25) < (0)) __PYX_ERR(0, 9878, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __pyx_t_18 = NULL; __Pyx_GetNameInClass(__pyx_t_20, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_from_conf); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 9878, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_18, __pyx_t_20}; __pyx_t_25 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_staticmethod, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 9878, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); } if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_from_conf, __pyx_t_25) < (0)) __PYX_ERR(0, 9878, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; /* … */ struct __pyx_obj_7questdb_7_client___pyx_scope_struct_11_from_conf { PyObject_HEAD PyObject *__pyx_v_auto_flush_keys; };
09879: def from_conf(
09880: str conf_str,
09881: *,
+09882: oidc_auth=None,
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_oidc_auth, Py_None) < (0)) __PYX_ERR(0, 9878, __pyx_L1_error)
+09883: bearer_token_provider=None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_bearer_token_provider_2, Py_None) < (0)) __PYX_ERR(0, 9878, __pyx_L1_error)
+09884: connection_listener=None,
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); /* … */ if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_connection_listener, Py_None) < (0)) __PYX_ERR(0, 9878, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_connection_event_inbox_capacity, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 9878, __pyx_L1_error)
09885: connection_event_inbox_capacity=0,
+09886: error_handler=None,
if (!values[5]) values[5] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[6]) values[6] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("from_conf", 1, 1, 1, i); __PYX_ERR(0, 9878, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 9878, __pyx_L3_error) /* … */ if (!values[5]) values[5] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[6]) values[6] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); } __pyx_v_conf_str = ((PyObject*)values[0]); __pyx_v_oidc_auth = values[1]; __pyx_v_bearer_token_provider = values[2]; __pyx_v_connection_listener = values[3]; __pyx_v_connection_event_inbox_capacity = values[4]; __pyx_v_error_handler = values[5]; __pyx_v_error_event_inbox_capacity = values[6]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("from_conf", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 9878, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.QuestDB.from_conf", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_conf_str), (&PyUnicode_Type), 1, "conf_str", 1))) __PYX_ERR(0, 9880, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_4from_conf(__pyx_v_conf_str, __pyx_v_oidc_auth, __pyx_v_bearer_token_provider, __pyx_v_connection_listener, __pyx_v_connection_event_inbox_capacity, __pyx_v_error_handler, __pyx_v_error_event_inbox_capacity); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_error_handler, Py_None) < (0)) __PYX_ERR(0, 9878, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_error_event_inbox_capacity, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 9878, __pyx_L1_error)
09887: error_event_inbox_capacity=0):
09888: """
09889: Construct a handle from a QWP/WebSocket configuration string.
09890:
09891: Prefer the :func:`questdb.connect` module-level factory.
09892:
09893: By default the handle connects eagerly: construction pre-opens the
09894: warm minimums (``sender_pool_min`` sender and ``query_pool_min``
09895: reader connections, one of each by default), so an unreachable
09896: server or bad credentials fail here, fast. With
09897: ``lazy_connect=true`` construction opens no connection: sender
09898: leases buffer locally and connect in the background, readers
09899: connect on first use (``query_pool_min`` defaults to 0), and
09900: errors surface from the first operation instead. Combining
09901: ``lazy_connect=true`` with a blocking ``initial_connect_retry``
09902: or a positive ``query_pool_min`` is a configuration conflict.
09903:
09904: Pooled row auto-flush is enabled by default at 1,000 rows, 100
09905: milliseconds, or an estimated encoded size at 90% of the effective
09906: frame cap. Before a server cap is known, or when the server omits it,
09907: the byte threshold is 90% of the lower of QuestDB's default cap, 2 MiB
09908: less 14 bytes, and the local store-and-forward frame cap. Set
09909: ``auto_flush_bytes=off`` to disable only the byte trigger, or
09910: ``auto_flush=off`` to disable all automatic publishing.
09911: The mode is immutable and shared by every lease; the interval starts
09912: when the first row enters an empty lease buffer. Auto-triggered
09913: publishes do not wait for server acknowledgement.
09914:
09915: ``oidc_auth`` attaches a native rotating OIDC token provider. Call its
09916: :meth:`~questdb.auth.OidcDeviceAuth.sign_in` method before constructing
09917: the pool; connection and reconnect paths never start an interactive
09918: device flow.
09919: Use ``wss::``: over plain ``ws::`` to a non-loopback host the token is
09920: sent in cleartext. A closed provider raises
09921: :class:`~questdb.auth.OidcCancelledError`.
09922:
09923: ``bearer_token_provider`` attaches a rotating Bearer-token provider
09924: instead: a :class:`questdb.auth.RefreshingTokenProvider` around a token
09925: source of your own, a callable returning a token, or an object with
09926: ``token()`` and an optional ``on_rejected()`` -- see
09927: :ref:`refreshing_token_provider`. It is mutually exclusive with
09928: ``oidc_auth``, ``token``, ``username`` and ``password``. A provider
09929: that runs on the calling thread runs inside the call that needs the
09930: token; see :ref:`token_provider_reentrancy` for what it, and a Python
09931: signal handler that runs there, must not do.
09932:
09933: The connection pool is opened eagerly unless configuration selects a
09934: lazy connection. Dataframe ingestion always uses the direct
09935: (non-store-and-forward)
09936: QWP/WebSocket column sender, independent of ``sf_dir``. On a transient
09937: connection failure the original DataFrame is re-sent only when no
09938: batch was successfully published and the failed operation is provably
09939: not delivered. Once a prefix may have committed, the call raises
09940: instead of replaying from row zero. A delivery-unknown failure surfaces
09941: as :class:`QuestDBError` with ``in_doubt`` set.
09942: ``request_timeout`` bounds each commit's no-progress ack wait;
09943: ``request_timeout=0`` disables that deadline, so a stalled but
09944: connected server can block :meth:`dataframe` indefinitely.
09945:
09946: ``connection_listener``, when set, is a callable receiving one
09947: :class:`ConnectionEvent` per connection-state transition of the
09948: pool's ingress connections: connects, disconnects and reconnects,
09949: per-endpoint attempt failures, failover, credential rejections and
09950: token-provider failures (see :class:`ConnectionEventKind`). A
09951: credential the server rejects (``AuthFailed``) fails a connection
09952: that is waited for -- the eager first connect, or a borrow that
09953: opens a connection -- but a sender that has already connected keeps
09954: reconnecting and reports each rejected attempt. For a token-provider
09955: failure (``CredentialUnavailable``),
09956: :attr:`ConnectionEvent.cause_code` tells a retry (``SocketError``)
09957: from a stop (``AuthError`` or ``ConfigError``). See
09958: :ref:`token_rejections`. The listener runs on a
09959: dedicated dispatcher thread fed by a bounded inbox
09960: (``connection_event_inbox_capacity``; ``0`` selects the default
09961: of 64) with a drop-oldest overflow policy, so a slow listener
09962: cannot stall ingest or reconnects. Exceptions it raises are
09963: logged and swallowed. Dropped/delivered totals are available via
09964: :attr:`connection_events_dropped` /
09965: :attr:`connection_events_delivered`. Successful events are queued
09966: only after negotiated state, including the server frame cap, is
09967: committed; they do not acknowledge data.
09968:
09969: ``error_handler``, when set, is a callable receiving one
09970: :class:`SenderError` per server rejection recorded by any of the
09971: pool's store-and-forward connections — including rejections for
09972: rows published through a :class:`PooledSender` that was already
09973: closed. It runs on its own dedicated dispatcher thread fed by a
09974: bounded inbox (``error_event_inbox_capacity``; ``0`` selects the
09975: default of 64, overflow drops the oldest event). Exceptions it
09976: raises are logged and swallowed. Without a handler every rejection
09977: is logged through the ``questdb`` logger instead — ``ERROR`` for
09978: terminal rejections, ``WARNING`` for retriable ones (the affected
09979: rows are replayed, not lost) — so rejections are never silent.
09980: A terminal rejection is queued only after the connection's terminal
09981: latch and pollable diagnostic have been committed.
09982: Delivered/dropped totals are available via
09983: :attr:`error_events_delivered` /
09984: :attr:`error_events_dropped`. Use the handler for
09985: dead-lettering, alerting, and metrics; terminal failures also
09986: surface as :class:`QuestDBError` from the sender calls themselves.
09987:
09988: When a handler or listener closes over the returned handle, call
09989: :meth:`close` explicitly (or use ``with``): until closed, such a
09990: handle is pinned alive rather than collected, so an abandoned one
09991: leaks instead of crashing. The pin is dropped at interpreter
09992: shutdown, so an unclosed self-referential handle can still crash
09993: during finalization.
09994: """
+09995: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
09996: cdef line_sender_utf8 c_conf
09997: cdef line_sender_protocol c_protocol
09998: cdef object protocol
09999: cdef dict params
+10000: cdef set auto_flush_keys = {
__pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10001, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush) < (0)) __PYX_ERR(0, 10001, __pyx_L1_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_rows) < (0)) __PYX_ERR(0, 10001, __pyx_L1_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes) < (0)) __PYX_ERR(0, 10001, __pyx_L1_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_interval) < (0)) __PYX_ERR(0, 10001, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_1); __pyx_cur_scope->__pyx_v_auto_flush_keys = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
10001: 'auto_flush',
10002: 'auto_flush_rows',
10003: 'auto_flush_bytes',
10004: 'auto_flush_interval',
10005: }
10006: cdef bint auto_flush_configured
10007: cdef str native_conf_str
+10008: cdef qdb_pystr_buf* b = qdb_pystr_buf_new()
__pyx_v_b = qdb_pystr_buf_new();
+10009: cdef QuestDB db = QuestDB.__new__(QuestDB)
__pyx_t_1 = ((PyObject *)__pyx_tp_new_7questdb_7_client_QuestDB(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10009, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_db = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_1); __pyx_t_1 = 0;
+10010: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+10011: cdef void* connection_listener_data = NULL
__pyx_v_connection_listener_data = NULL;
+10012: cdef questdb_connection_event_cb connection_event_cb = NULL
__pyx_v_connection_event_cb = NULL;
10013: cdef size_t c_event_inbox_capacity
10014: cdef size_t c_error_inbox_capacity
10015: cdef questdb_db_connect_options connect_options
+10016: try:
/*try:*/ {
+10017: protocol, params = parse_conf_str(b, conf_str)
__pyx_t_1 = __pyx_f_7questdb_7_client_parse_conf_str(__pyx_v_b, __pyx_v_conf_str); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10017, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 10017, __pyx_L4_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_3); } else { __pyx_t_2 = __Pyx_PyList_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10017, __pyx_L4_error) __Pyx_XGOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10017, __pyx_L4_error) __Pyx_XGOTREF(__pyx_t_3); } #else __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10017, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10017, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10017, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < (0)) __PYX_ERR(0, 10017, __pyx_L4_error) __pyx_t_5 = NULL; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L7_unpacking_done; __pyx_L6_unpacking_failed:; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 10017, __pyx_L4_error) __pyx_L7_unpacking_done:; } if (!(likely(PyDict_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_3))) __PYX_ERR(0, 10017, __pyx_L4_error) __pyx_v_protocol = __pyx_t_2; __pyx_t_2 = 0; __pyx_v_params = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0;
10018: # Here rather than in native, whose message also names the C,
10019: # C++ and Rust APIs: the same wording as `Sender.from_conf`.
+10020: _tp_reject_conf_keys(params)
__pyx_t_6 = __pyx_f_7questdb_7_client__tp_reject_conf_keys(__pyx_v_params); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10020, __pyx_L4_error)
+10021: if protocol not in (Protocol.Ws, Protocol.Wss):
__Pyx_INCREF(__pyx_v_protocol); __pyx_t_1 = __pyx_v_protocol; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Protocol); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10021, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Ws); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10021, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_8 = __Pyx_PyObject_CompareBoolNe_object_object(__pyx_t_1, __pyx_t_2, Py_NE); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 10021, __pyx_L4_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_8) { } else { __pyx_t_7 = __pyx_t_8; 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, 10021, __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, 10021, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_8 = __Pyx_PyObject_CompareBoolNe_object_object(__pyx_t_1, __pyx_t_3, Py_NE); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 10021, __pyx_L4_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __pyx_t_8; __pyx_L9_bool_binop_done:; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_8 = __pyx_t_7; if (unlikely(__pyx_t_8)) { /* … */ }
+10022: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10022, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_2);
+10023: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10023, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10023, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_9, __pyx_mstate_global->__pyx_kp_u_questdb_connect_requires_a_QWP_W}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10022, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 10022, __pyx_L4_error)
10024: 'questdb.connect() requires a QWP/WebSocket '
10025: 'configuration string: ws:: or wss::.')
+10026: if params.get('addr') is None:
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 10026, __pyx_L4_error)
}
__pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_addr, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10026, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_8 = (__pyx_t_1 == Py_None);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(__pyx_t_8)) {
/* … */
}
+10027: raise QuestDBError(
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10027, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_9);
+10028: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10028, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10028, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_4, __pyx_mstate_global->__pyx_kp_u_Missing_addr_parameter_in_config}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10027, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 10027, __pyx_L4_error)
10029: 'Missing "addr" parameter in config string')
10030:
10031: # The pooled native core does not implement row-buffer
10032: # auto-flushing: it rejects the threshold keys and accepts only
10033: # auto_flush=off. Keep this Python-owned handle configuration out
10034: # of the native connect string. Pooled QWP uses its own defaults,
10035: # while validation stays shared with the standalone Sender.
+10036: c_protocol = protocol.c_value
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_protocol, __pyx_mstate_global->__pyx_n_u_c_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10036, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_11 = ((enum line_sender_protocol)__Pyx_PyLong_As_enum__line_sender_protocol(__pyx_t_1)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10036, __pyx_L4_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_c_protocol = __pyx_t_11;
+10037: auto_flush_configured = not auto_flush_keys.isdisjoint(params)
__pyx_t_1 = __Pyx_CallUnboundCMethod1(&__pyx_mstate_global->__pyx_umethod_PySet_Type__isdisjoint, __pyx_cur_scope->__pyx_v_auto_flush_keys, __pyx_v_params); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10037, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(PyBool_Check(__pyx_t_1)) || __Pyx_RaiseUnexpectedTypeError("bool", __pyx_t_1))) __PYX_ERR(0, 10037, __pyx_L4_error) __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 10037, __pyx_L4_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_auto_flush_configured = (!__pyx_t_8);
+10038: _parse_pooled_auto_flush(
__pyx_t_6 = __pyx_f_7questdb_7_client__parse_pooled_auto_flush(__pyx_v_c_protocol, __pyx_t_1, __pyx_t_9, __pyx_t_4, __pyx_t_2, (&__pyx_v_db->_auto_flush_mode), (&__pyx_v_db->_auto_flush_bytes_dynamic)); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10038, __pyx_L4_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
10039: c_protocol,
+10040: params.get('auto_flush'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 10040, __pyx_L4_error)
}
__pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auto_flush, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10040, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_1);
+10041: params.get('auto_flush_rows'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 10041, __pyx_L4_error)
}
__pyx_t_9 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auto_flush_rows, Py_None); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10041, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_9);
+10042: params.get('auto_flush_bytes'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 10042, __pyx_L4_error)
}
__pyx_t_4 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10042, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_4);
+10043: params.get('auto_flush_interval'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 10043, __pyx_L4_error)
}
__pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auto_flush_interval, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10043, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_2);
10044: &db._auto_flush_mode,
10045: &db._auto_flush_bytes_dynamic)
+10046: if auto_flush_configured:
if (__pyx_v_auto_flush_configured) {
/* … */
goto __pyx_L12;
}
+10047: native_conf_str = protocol.tag + '::' + ''.join(
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_protocol, __pyx_mstate_global->__pyx_n_u_tag); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10047, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyNumber_Add(__pyx_t_2, __pyx_mstate_global->__pyx_kp_u__37); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10047, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* … */ __pyx_t_9 = __Pyx_Generator_GetInlinedResult(__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10047, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__6, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10047, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_9 = PyNumber_Add(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10047, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (!(likely(PyUnicode_CheckExact(__pyx_t_9))||((__pyx_t_9) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_9))) __PYX_ERR(0, 10047, __pyx_L4_error) __pyx_v_native_conf_str = ((PyObject*)__pyx_t_9); __pyx_t_9 = 0;
+10048: f'{key}={conf_str_value(value)};'
static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_9from_conf_genexpr(PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_12_genexpr *__pyx_cur_scope;
PyObject *__pyx_r = NULL;
__pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_12_genexpr *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_12_genexpr(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_12_genexpr, __pyx_mstate_global->__pyx_empty_tuple, NULL);
if (unlikely(!__pyx_cur_scope)) {
__pyx_cur_scope = ((struct __pyx_obj_7questdb_7_client___pyx_scope_struct_12_genexpr *)Py_None);
__Pyx_INCREF(Py_None);
__PYX_ERR(0, 10048, __pyx_L1_error)
} else {
__Pyx_GOTREF((PyObject *)__pyx_cur_scope);
}
__pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_11_from_conf *) __pyx_self;
__Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_outer_scope);
__Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_outer_scope);
__pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
__Pyx_INCREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
{
__pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7questdb_7_client_7QuestDB_9from_conf_2generator8, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[8]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_from_conf_locals_genexpr, __pyx_mstate_global->__pyx_n_u_questdb__client); if (unlikely(!gen)) __PYX_ERR(0, 10048, __pyx_L1_error)
__Pyx_DECREF(__pyx_cur_scope);
__Pyx_RefNannyFinishContext();
return (PyObject *) gen;
}
/* function exit code */
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client.QuestDB.from_conf.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__Pyx_DECREF((PyObject *)__pyx_cur_scope);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_gb_7questdb_7_client_7QuestDB_9from_conf_2generator8(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("genexpr", 0);
__pyx_L3_first_run:;
if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 10048, __pyx_L1_error)
__pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 10048, __pyx_L1_error)
__Pyx_GOTREF(__pyx_r);
/* … */
__pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_key, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 10048, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_5 = __pyx_f_7questdb_7_client_conf_str_value(__pyx_cur_scope->__pyx_v_value); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 10048, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_9 = __Pyx_PyUnicode_Unicode(__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10048, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__pyx_t_10[0] = __pyx_t_6;
__pyx_t_10[1] = __pyx_mstate_global->__pyx_kp_u__36;
__pyx_t_10[2] = __pyx_t_9;
__pyx_t_10[3] = __pyx_mstate_global->__pyx_kp_u__30;
__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, 10048, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_GIVEREF(__pyx_t_5);
if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_r, __pyx_t_5))) __PYX_ERR(0, 10048, __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;
}
static PyObject *__pyx_gb_7questdb_7_client_7QuestDB_9from_conf_5generator9(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
__pyx_t_2 = __pyx_pf_7questdb_7_client_7QuestDB_9from_conf_genexpr(((PyObject*)__pyx_cur_scope), __pyx_v_params); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10048, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_2);
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_12_genexpr {
PyObject_HEAD
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_11_from_conf *__pyx_outer_scope;
PyObject *__pyx_genexpr_arg_0;
PyObject *__pyx_v_key;
PyObject *__pyx_v_value;
};
+10049: for key, value in params.items()
__pyx_t_2 = 0;
if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 10049, __pyx_L1_error) }
if (unlikely(__pyx_cur_scope->__pyx_genexpr_arg_0 == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
__PYX_ERR(0, 10049, __pyx_L1_error)
}
__pyx_t_5 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_genexpr_arg_0, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 10049, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_1);
__pyx_t_1 = __pyx_t_5;
__pyx_t_5 = 0;
while (1) {
__pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, &__pyx_t_5, &__pyx_t_6, NULL, __pyx_t_4);
if (unlikely(__pyx_t_7 == 0)) break;
if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 10049, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_GOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_key);
__Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_key, __pyx_t_5);
__Pyx_GIVEREF(__pyx_t_5);
__pyx_t_5 = 0;
__Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_value);
__Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_value, __pyx_t_6);
__Pyx_GIVEREF(__pyx_t_6);
__pyx_t_6 = 0;
+10050: if key not in auto_flush_keys)
if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_auto_flush_keys)) { __Pyx_RaiseClosureNameError("auto_flush_keys"); __PYX_ERR(0, 10050, __pyx_L1_error) }
if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_auto_flush_keys == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not iterable");
__PYX_ERR(0, 10050, __pyx_L1_error)
}
__pyx_t_8 = (__Pyx_PySet_ContainsTF(__pyx_cur_scope->__pyx_v_key, __pyx_cur_scope->__pyx_outer_scope->__pyx_v_auto_flush_keys, Py_NE)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 10050, __pyx_L1_error)
if (__pyx_t_8) {
/* … */
}
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
10051: else:
10052: # Preserve the native configuration path byte for byte when
10053: # there are no Python-owned auto-flush settings to remove.
+10054: native_conf_str = conf_str
/*else*/ {
__Pyx_INCREF(__pyx_v_conf_str);
__pyx_v_native_conf_str = __pyx_v_conf_str;
}
__pyx_L12:;
10055:
+10056: if connection_listener is not None and not callable(
__pyx_t_7 = (__pyx_v_connection_listener != Py_None);
if (__pyx_t_7) {
} else {
__pyx_t_8 = __pyx_t_7;
goto __pyx_L14_bool_binop_done;
}
/* … */
__pyx_t_7 = __Pyx_PyCallable_Check(__pyx_v_connection_listener); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 10056, __pyx_L4_error)
/* … */
__pyx_t_12 = (!__pyx_t_7);
__pyx_t_8 = __pyx_t_12;
__pyx_L14_bool_binop_done:;
if (unlikely(__pyx_t_8)) {
/* … */
}
10057: connection_listener):
+10058: raise TypeError(
__pyx_t_2 = NULL;
+10059: '"connection_listener" must be callable or None, '
__pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_connection_listener_must_be_cal, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10059, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4}; __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10058, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_9); } __Pyx_Raise(__pyx_t_9, 0, 0, 0); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __PYX_ERR(0, 10058, __pyx_L4_error)
+10060: f'not {_fqn(type(connection_listener))}')
__pyx_t_4 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_connection_listener)))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10060, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10060, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+10061: if error_handler is not None and not callable(
__pyx_t_12 = (__pyx_v_error_handler != Py_None);
if (__pyx_t_12) {
} else {
__pyx_t_8 = __pyx_t_12;
goto __pyx_L17_bool_binop_done;
}
/* … */
__pyx_t_12 = __Pyx_PyCallable_Check(__pyx_v_error_handler); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 10061, __pyx_L4_error)
/* … */
__pyx_t_7 = (!__pyx_t_12);
__pyx_t_8 = __pyx_t_7;
__pyx_L17_bool_binop_done:;
if (unlikely(__pyx_t_8)) {
/* … */
}
10062: error_handler):
+10063: raise TypeError(
__pyx_t_4 = NULL;
+10064: '"error_handler" must be callable or None, '
__pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_error_handler_must_be_callable, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10064, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_2}; __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10063, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_9); } __Pyx_Raise(__pyx_t_9, 0, 0, 0); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __PYX_ERR(0, 10063, __pyx_L4_error)
+10065: f'not {_fqn(type(error_handler))}')
__pyx_t_2 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_error_handler)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10065, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10065, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+10066: if oidc_auth is not None and not isinstance(
__pyx_t_7 = (__pyx_v_oidc_auth != Py_None);
if (__pyx_t_7) {
} else {
__pyx_t_8 = __pyx_t_7;
goto __pyx_L20_bool_binop_done;
}
/* … */
__pyx_t_12 = (!__pyx_t_7);
__pyx_t_8 = __pyx_t_12;
__pyx_L20_bool_binop_done:;
if (unlikely(__pyx_t_8)) {
/* … */
}
+10067: oidc_auth, OidcDeviceAuth):
__pyx_t_7 = __Pyx_TypeCheck(__pyx_v_oidc_auth, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth);
+10068: raise _ConfigTypeError(
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ConfigTypeError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10068, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_4);
+10069: '"oidc_auth" must be an OidcDeviceAuth or None, '
__pyx_t_1 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_oidc_auth_must_be_an_OidcDevice, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10069, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_1}; __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10068, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_9); } __Pyx_Raise(__pyx_t_9, 0, 0, 0); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __PYX_ERR(0, 10068, __pyx_L4_error)
+10070: f'not {_fqn(type(oidc_auth))}')
__pyx_t_1 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_oidc_auth)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10070, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyUnicode_Unicode(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10070, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+10071: if oidc_auth is not None:
__pyx_t_8 = (__pyx_v_oidc_auth != Py_None);
if (__pyx_t_8) {
/* … */
}
+10072: _oidc_require_native_token(oidc_auth)
__pyx_t_6 = __pyx_f_7questdb_7_client__oidc_require_native_token(__pyx_v_oidc_auth); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10072, __pyx_L4_error)
10073: # Distinguish the two states the way `_require_open` does: a
10074: # NULL handle is a provider whose construction never completed,
10075: # which "is closed" misdescribes and sends the caller looking
10076: # for a close() they never made.
+10077: if (<OidcDeviceAuth>oidc_auth)._raw == NULL:
__pyx_t_8 = (((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_oidc_auth)->_raw == NULL);
if (unlikely(__pyx_t_8)) {
/* … */
}
+10078: raise _ConfigValueError('"oidc_auth" is not initialized')
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ConfigValueError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10078, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_10 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_1))) {
__pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
assert(__pyx_t_4);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
__Pyx_INCREF(__pyx_t_4);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
__pyx_t_10 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_oidc_auth_is_not_initialized};
__pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10078, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_9);
}
__Pyx_Raise(__pyx_t_9, 0, 0, 0);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__PYX_ERR(0, 10078, __pyx_L4_error)
+10079: if (<OidcDeviceAuth>oidc_auth)._closed:
if (((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_oidc_auth)->_closed) {
/* … */
}
+10080: _raise_oidc_auth_closed()
__pyx_t_13 = __pyx_f_7questdb_7_client__raise_oidc_auth_closed(); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 10080, __pyx_L4_error)
+10081: if oidc_auth is not None:
__pyx_t_8 = (__pyx_v_oidc_auth != Py_None);
if (__pyx_t_8) {
/* … */
}
10082: # Same conflict as the Sender path. Name the keys the caller
10083: # wrote rather than letting native report the internal provider
10084: # key, which exists in no public API. The wording must not
10085: # assume where they were written: `questdb.connect()` folds its
10086: # keyword arguments into this configuration string, so a
10087: # caller who passed `username=` has no string to edit.
+10088: conflicting = [
{ /* enter inner scope */
__pyx_t_9 = PyList_New(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10088, __pyx_L28_error)
__Pyx_GOTREF(__pyx_t_9);
+10089: key for key in ('token', 'username', 'password')
__pyx_t_1 = __pyx_mstate_global->__pyx_tuple[45]; __Pyx_INCREF(__pyx_t_1); __pyx_t_14 = 0; for (;;) { if (__pyx_t_14 >= 3) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_4 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_14)); #else __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_14); #endif ++__pyx_t_14; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10089, __pyx_L28_error) __Pyx_GOTREF(__pyx_t_4); if (!(likely(PyUnicode_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_4))) __PYX_ERR(0, 10089, __pyx_L28_error) __Pyx_XDECREF_SET(__pyx_9genexpr27__pyx_v_key, ((PyObject*)__pyx_t_4)); __pyx_t_4 = 0; /* … */ if (unlikely(__Pyx_ListComp_Append(__pyx_t_9, __pyx_9genexpr27__pyx_v_key))) __PYX_ERR(0, 10088, __pyx_L28_error) /* … */ } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_9genexpr27__pyx_v_key); __pyx_9genexpr27__pyx_v_key = 0; goto __pyx_L33_exit_scope; __pyx_L28_error:; __Pyx_XDECREF(__pyx_9genexpr27__pyx_v_key); __pyx_9genexpr27__pyx_v_key = 0; goto __pyx_L4_error; __pyx_L33_exit_scope:; } /* exit inner scope */ __pyx_v_conflicting = ((PyObject*)__pyx_t_9); __pyx_t_9 = 0; /* … */ { PyObject* __pyx_temp[3] = {__pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_username, __pyx_mstate_global->__pyx_n_u_password}; __pyx_mstate_global->__pyx_tuple[45] = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_mstate_global->__pyx_tuple[45])) __PYX_ERR(0, 10089, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[45]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[45]);
+10090: if params.get(key) is not 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, 10090, __pyx_L28_error)
}
__pyx_t_4 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_9genexpr27__pyx_v_key, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10090, __pyx_L28_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_8 = (__pyx_t_4 != Py_None);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (__pyx_t_8) {
/* … */
}
+10091: if conflicting:
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_conflicting);
if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 10091, __pyx_L4_error)
__pyx_t_8 = (__pyx_temp != 0);
}
if (unlikely(__pyx_t_8)) {
/* … */
}
+10092: raise QuestDBError(
__pyx_t_1 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10092, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_4);
+10093: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10093, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10093, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
10094: '"oidc_auth" is mutually exclusive with '
+10095: + ', '.join(f'"{key}"' for key in conflicting)
static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_9from_conf_3genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_13_genexpr *__pyx_cur_scope;
PyObject *__pyx_r = NULL;
__pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_13_genexpr *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_13_genexpr(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_13_genexpr, __pyx_mstate_global->__pyx_empty_tuple, NULL);
if (unlikely(!__pyx_cur_scope)) {
__pyx_cur_scope = ((struct __pyx_obj_7questdb_7_client___pyx_scope_struct_13_genexpr *)Py_None);
__Pyx_INCREF(Py_None);
__PYX_ERR(0, 10095, __pyx_L1_error)
} else {
__Pyx_GOTREF((PyObject *)__pyx_cur_scope);
}
__pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
__Pyx_INCREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
{
__pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7questdb_7_client_7QuestDB_9from_conf_5generator9, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[9]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_from_conf_locals_genexpr, __pyx_mstate_global->__pyx_n_u_questdb__client); if (unlikely(!gen)) __PYX_ERR(0, 10095, __pyx_L1_error)
__Pyx_DECREF(__pyx_cur_scope);
__Pyx_RefNannyFinishContext();
return (PyObject *) gen;
}
/* function exit code */
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client.QuestDB.from_conf.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__Pyx_DECREF((PyObject *)__pyx_cur_scope);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_gb_7questdb_7_client_7QuestDB_9from_conf_5generator9(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("genexpr", 0);
__pyx_L3_first_run:;
if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 10095, __pyx_L1_error)
__pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 10095, __pyx_L1_error)
__Pyx_GOTREF(__pyx_r);
if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 10095, __pyx_L1_error) }
__pyx_t_1 = __pyx_cur_scope->__pyx_genexpr_arg_0; __Pyx_INCREF(__pyx_t_1);
__pyx_t_2 = 0;
for (;;) {
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
#if !CYTHON_ASSUME_SAFE_SIZE
if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 10095, __pyx_L1_error)
#endif
if (__pyx_t_2 >= __pyx_temp) break;
}
__pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_1, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
++__pyx_t_2;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10095, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_key);
__Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_key, __pyx_t_3);
__Pyx_GIVEREF(__pyx_t_3);
__pyx_t_3 = 0;
__pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_key, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10095, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_4[0] = __pyx_mstate_global->__pyx_kp_u__26;
__pyx_t_4[1] = __pyx_t_3;
__pyx_t_4[2] = __pyx_mstate_global->__pyx_kp_u__26;
__pyx_t_5 = 2;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4[1]);
#endif
__pyx_t_6 = 0;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_6 |= __Pyx_PyUnicode_KIND_04(__pyx_t_4[1]);
#endif
__pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, __pyx_t_5, __pyx_t_6);
if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 10095, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_GIVEREF(__pyx_t_7);
if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_r, __pyx_t_7))) __PYX_ERR(0, 10095, __pyx_L1_error)
__pyx_t_7 = 0;
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_r); __pyx_r = 0;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_7);
if (__Pyx_PyErr_Occurred()) {
__Pyx_Generator_Replace_StopIteration(0);
__Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
}
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
#if !CYTHON_USE_EXC_INFO_STACK
__Pyx_Coroutine_ResetAndClearException(__pyx_generator);
#endif
__pyx_generator->resume_label = -1;
__Pyx_Coroutine_clear((PyObject*)__pyx_generator);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_gb_7questdb_7_client_7QuestDB_9from_conf_8generator10(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
__pyx_t_2 = __pyx_pf_7questdb_7_client_7QuestDB_9from_conf_3genexpr(NULL, __pyx_v_conflicting); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10095, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_15 = __Pyx_Generator_GetInlinedResult(__pyx_t_2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 10095, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_15);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_2 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__28, __pyx_t_15); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10095, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
__pyx_t_15 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_oidc_auth_is_mutually_exclusive, __pyx_t_2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 10095, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_15);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_13_genexpr {
PyObject_HEAD
PyObject *__pyx_genexpr_arg_0;
PyObject *__pyx_v_key;
};
+10096: + '. An OIDC provider supplies the credential itself; '
__pyx_t_2 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_15, __pyx_mstate_global->__pyx_kp_u_An_OIDC_provider_supplies_the_c); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10096, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_3, __pyx_t_2}; __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10092, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_9); } __Pyx_Raise(__pyx_t_9, 0, 0, 0); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __PYX_ERR(0, 10092, __pyx_L4_error)
10097: 'remove the fixed credential, or drop "oidc_auth" to '
10098: 'keep using it.')
+10099: if bearer_token_provider is not None:
__pyx_t_8 = (__pyx_v_bearer_token_provider != Py_None);
if (__pyx_t_8) {
/* … */
}
+10100: if oidc_auth is not None:
__pyx_t_8 = (__pyx_v_oidc_auth != Py_None);
if (unlikely(__pyx_t_8)) {
/* … */
}
+10101: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10101, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_2);
+10102: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10102, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10102, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_1, __pyx_mstate_global->__pyx_kp_u_bearer_token_provider_and_oidc}; __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10101, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_9); } __Pyx_Raise(__pyx_t_9, 0, 0, 0); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __PYX_ERR(0, 10101, __pyx_L4_error)
10103: '"bearer_token_provider" and "oidc_auth" are mutually '
10104: 'exclusive: attach one token provider.')
+10105: conflicting = [
{ /* enter inner scope */
__pyx_t_9 = PyList_New(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10105, __pyx_L39_error)
__Pyx_GOTREF(__pyx_t_9);
+10106: key for key in ('token', 'username', 'password')
__pyx_t_2 = __pyx_mstate_global->__pyx_tuple[45]; __Pyx_INCREF(__pyx_t_2); __pyx_t_14 = 0; for (;;) { if (__pyx_t_14 >= 3) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_14)); #else __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_14); #endif ++__pyx_t_14; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10106, __pyx_L39_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(0, 10106, __pyx_L39_error) __Pyx_XDECREF_SET(__pyx_9genexpr29__pyx_v_key, ((PyObject*)__pyx_t_1)); __pyx_t_1 = 0; /* … */ if (unlikely(__Pyx_ListComp_Append(__pyx_t_9, __pyx_9genexpr29__pyx_v_key))) __PYX_ERR(0, 10105, __pyx_L39_error) /* … */ } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_9genexpr29__pyx_v_key); __pyx_9genexpr29__pyx_v_key = 0; goto __pyx_L44_exit_scope; __pyx_L39_error:; __Pyx_XDECREF(__pyx_9genexpr29__pyx_v_key); __pyx_9genexpr29__pyx_v_key = 0; goto __pyx_L4_error; __pyx_L44_exit_scope:; } /* exit inner scope */ __Pyx_XDECREF_SET(__pyx_v_conflicting, ((PyObject*)__pyx_t_9)); __pyx_t_9 = 0;
+10107: if params.get(key) is not None]
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 10107, __pyx_L39_error)
}
__pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_9genexpr29__pyx_v_key, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10107, __pyx_L39_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_8 = (__pyx_t_1 != Py_None);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (__pyx_t_8) {
/* … */
}
+10108: if conflicting:
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_conflicting);
if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 10108, __pyx_L4_error)
__pyx_t_8 = (__pyx_temp != 0);
}
if (unlikely(__pyx_t_8)) {
/* … */
}
+10109: raise QuestDBError(
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10109, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_1);
+10110: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10110, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10110, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
10111: '"bearer_token_provider" is mutually exclusive with '
+10112: + ', '.join(f'"{key}"' for key in conflicting)
static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_9from_conf_6genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_14_genexpr *__pyx_cur_scope;
PyObject *__pyx_r = NULL;
__pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_14_genexpr *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_14_genexpr(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_14_genexpr, __pyx_mstate_global->__pyx_empty_tuple, NULL);
if (unlikely(!__pyx_cur_scope)) {
__pyx_cur_scope = ((struct __pyx_obj_7questdb_7_client___pyx_scope_struct_14_genexpr *)Py_None);
__Pyx_INCREF(Py_None);
__PYX_ERR(0, 10112, __pyx_L1_error)
} else {
__Pyx_GOTREF((PyObject *)__pyx_cur_scope);
}
__pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
__Pyx_INCREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
{
__pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7questdb_7_client_7QuestDB_9from_conf_8generator10, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[10]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_from_conf_locals_genexpr, __pyx_mstate_global->__pyx_n_u_questdb__client); if (unlikely(!gen)) __PYX_ERR(0, 10112, __pyx_L1_error)
__Pyx_DECREF(__pyx_cur_scope);
__Pyx_RefNannyFinishContext();
return (PyObject *) gen;
}
/* function exit code */
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client.QuestDB.from_conf.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__Pyx_DECREF((PyObject *)__pyx_cur_scope);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_gb_7questdb_7_client_7QuestDB_9from_conf_8generator10(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("genexpr", 0);
__pyx_L3_first_run:;
if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 10112, __pyx_L1_error)
__pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 10112, __pyx_L1_error)
__Pyx_GOTREF(__pyx_r);
if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 10112, __pyx_L1_error) }
__pyx_t_1 = __pyx_cur_scope->__pyx_genexpr_arg_0; __Pyx_INCREF(__pyx_t_1);
__pyx_t_2 = 0;
for (;;) {
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
#if !CYTHON_ASSUME_SAFE_SIZE
if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 10112, __pyx_L1_error)
#endif
if (__pyx_t_2 >= __pyx_temp) break;
}
__pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_1, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
++__pyx_t_2;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10112, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_key);
__Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_key, __pyx_t_3);
__Pyx_GIVEREF(__pyx_t_3);
__pyx_t_3 = 0;
__pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_key, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10112, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_4[0] = __pyx_mstate_global->__pyx_kp_u__26;
__pyx_t_4[1] = __pyx_t_3;
__pyx_t_4[2] = __pyx_mstate_global->__pyx_kp_u__26;
__pyx_t_5 = 2;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4[1]);
#endif
__pyx_t_6 = 0;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_6 |= __Pyx_PyUnicode_KIND_04(__pyx_t_4[1]);
#endif
__pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, __pyx_t_5, __pyx_t_6);
if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 10112, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_GIVEREF(__pyx_t_7);
if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_r, __pyx_t_7))) __PYX_ERR(0, 10112, __pyx_L1_error)
__pyx_t_7 = 0;
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_r); __pyx_r = 0;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_7);
if (__Pyx_PyErr_Occurred()) {
__Pyx_Generator_Replace_StopIteration(0);
__Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
}
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
#if !CYTHON_USE_EXC_INFO_STACK
__Pyx_Coroutine_ResetAndClearException(__pyx_generator);
#endif
__pyx_generator->resume_label = -1;
__Pyx_Coroutine_clear((PyObject*)__pyx_generator);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_4 = __pyx_pf_7questdb_7_client_7QuestDB_9from_conf_6genexpr(NULL, __pyx_v_conflicting); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10112, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_15 = __Pyx_Generator_GetInlinedResult(__pyx_t_4); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 10112, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_15);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_4 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__28, __pyx_t_15); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10112, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
__pyx_t_15 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_bearer_token_provider_is_mutual, __pyx_t_4); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 10112, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_15);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_14_genexpr {
PyObject_HEAD
PyObject *__pyx_genexpr_arg_0;
PyObject *__pyx_v_key;
};
+10113: + '. A token provider supplies the credential itself; '
__pyx_t_4 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_15, __pyx_mstate_global->__pyx_kp_u_A_token_provider_supplies_the_c); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10113, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_1))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_1, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_3, __pyx_t_4}; __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10109, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_9); } __Pyx_Raise(__pyx_t_9, 0, 0, 0); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __PYX_ERR(0, 10109, __pyx_L4_error)
10114: 'remove the fixed credential, or drop '
10115: '"bearer_token_provider" to keep using it.')
+10116: db._bearer_token_provider = _tp_resolve_bearer_token_provider(
__pyx_t_9 = __pyx_f_7questdb_7_client__tp_resolve_bearer_token_provider(__pyx_v_bearer_token_provider); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10116, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_9); if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_db), __pyx_mstate_global->__pyx_n_u_bearer_token_provider, __pyx_t_9) < (0)) __PYX_ERR(0, 10116, __pyx_L4_error) __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
10117: bearer_token_provider)
+10118: if oidc_auth is not None or bearer_token_provider is not None:
__pyx_t_12 = (__pyx_v_oidc_auth != Py_None);
if (!__pyx_t_12) {
} else {
__pyx_t_8 = __pyx_t_12;
goto __pyx_L47_bool_binop_done;
}
__pyx_t_12 = (__pyx_v_bearer_token_provider != Py_None);
__pyx_t_8 = __pyx_t_12;
__pyx_L47_bool_binop_done:;
if (__pyx_t_8) {
/* … */
}
+10119: _tp_warn_if_cleartext(protocol)
__pyx_t_1 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_tp_warn_if_cleartext); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10119, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_10 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_1);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_1);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_10 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_protocol};
__pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10119, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_9);
}
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+10120: str_to_utf8(b, <PyObject*>native_conf_str, &c_conf)
__pyx_t_6 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_native_conf_str), (&__pyx_v_c_conf)); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10120, __pyx_L4_error)
+10121: if connection_listener is not None:
__pyx_t_8 = (__pyx_v_connection_listener != Py_None);
if (__pyx_t_8) {
/* … */
}
10122: # Register as part of pool construction so recovery senders
10123: # pre-opened by connect cannot emit events before the listener
10124: # exists. The handle keeps the callback target alive until
10125: # close() has stopped and joined the dispatcher.
+10126: db._connection_listener = connection_listener
__Pyx_INCREF(__pyx_v_connection_listener); __Pyx_GIVEREF(__pyx_v_connection_listener); __Pyx_GOTREF(__pyx_v_db->_connection_listener); __Pyx_DECREF_SET(__pyx_v_db->_connection_listener, __pyx_v_connection_listener);
+10127: connection_event_cb = _connection_event_trampoline
__pyx_v_connection_event_cb = __pyx_f_7questdb_7_client__connection_event_trampoline;
10128: # A rejection handler is always installed (defaulting to the
10129: # `questdb` logger) because the native default logs through the
10130: # Rust `log` facade, which is not bridged into Python logging.
+10131: if error_handler is None:
__pyx_t_8 = (__pyx_v_error_handler == Py_None);
if (__pyx_t_8) {
/* … */
}
+10132: error_handler = _default_error_handler
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_default_error_handler); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10132, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF_SET(__pyx_v_error_handler, __pyx_t_9); __pyx_t_9 = 0;
+10133: db._error_handler = error_handler
__Pyx_INCREF(__pyx_v_error_handler); __Pyx_GIVEREF(__pyx_v_error_handler); __Pyx_GOTREF(__pyx_v_db->_error_handler); __Pyx_DECREF_SET(__pyx_v_db->_error_handler, __pyx_v_error_handler);
+10134: db._dispatch_context = _new_dispatch_context(
__pyx_t_3 = ((PyObject *)__pyx_f_7questdb_7_client__new_dispatch_context(__pyx_t_9, __pyx_t_4, __pyx_t_1)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10134, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_GIVEREF(__pyx_t_3); __Pyx_GOTREF(__pyx_v_db->_dispatch_context); __Pyx_DECREF_SET(__pyx_v_db->_dispatch_context, __pyx_t_3); __pyx_t_3 = 0;
+10135: db._thread_owner_token,
__pyx_t_9 = __pyx_v_db->_thread_owner_token;
__Pyx_INCREF(__pyx_t_9);
+10136: db._error_handler,
__pyx_t_4 = __pyx_v_db->_error_handler;
__Pyx_INCREF(__pyx_t_4);
+10137: db._connection_listener)
__pyx_t_1 = __pyx_v_db->_connection_listener;
__Pyx_INCREF(__pyx_t_1);
+10138: if connection_listener is not None:
__pyx_t_8 = (__pyx_v_connection_listener != Py_None);
if (__pyx_t_8) {
/* … */
}
+10139: connection_listener_data = <void*>db._dispatch_context
__pyx_v_connection_listener_data = ((void *)__pyx_v_db->_dispatch_context);
10140: # Convert to C integers while still holding the GIL: a bad
10141: # value must raise here, not inside the nogil region below.
+10142: c_event_inbox_capacity = connection_event_inbox_capacity
__pyx_t_10 = __Pyx_PyLong_As_size_t(__pyx_v_connection_event_inbox_capacity); if (unlikely((__pyx_t_10 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 10142, __pyx_L4_error) __pyx_v_c_event_inbox_capacity = __pyx_t_10;
+10143: c_error_inbox_capacity = error_event_inbox_capacity
__pyx_t_10 = __Pyx_PyLong_As_size_t(__pyx_v_error_event_inbox_capacity); if (unlikely((__pyx_t_10 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 10143, __pyx_L4_error) __pyx_v_c_error_inbox_capacity = __pyx_t_10;
+10144: questdb_db_connect_options_init(
questdb_db_connect_options_init((&__pyx_v_connect_options), (sizeof(struct questdb_db_connect_options)));
10145: &connect_options, sizeof(questdb_db_connect_options))
+10146: connect_options.oidc_auth = (
__pyx_v_connect_options.oidc_auth = __pyx_t_16;
+10147: (<OidcDeviceAuth>oidc_auth)._raw
__pyx_t_16 = ((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_oidc_auth)->_raw;
} else {
+10148: if oidc_auth is not None else NULL)
__pyx_t_8 = (__pyx_v_oidc_auth != Py_None);
if (__pyx_t_8) {
/* … */
__pyx_t_16 = NULL;
}
+10149: if db._bearer_token_provider is not None:
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_db), __pyx_mstate_global->__pyx_n_u_bearer_token_provider); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10149, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_8 = (__pyx_t_3 != Py_None); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_8) { /* … */ }
+10150: connect_options.token_provider = _tp_holder_raw(
__pyx_t_17 = __pyx_f_7questdb_7_client__tp_holder_raw(__pyx_t_3); if (unlikely(__pyx_t_17 == ((void *)NULL))) __PYX_ERR(0, 10150, __pyx_L4_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_connect_options.token_provider = __pyx_t_17;
+10151: db._bearer_token_provider)
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_db), __pyx_mstate_global->__pyx_n_u_bearer_token_provider); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10151, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3);
+10152: connect_options.event_callback = connection_event_cb
__pyx_v_connect_options.event_callback = __pyx_v_connection_event_cb;
+10153: connect_options.event_user_data = connection_listener_data
__pyx_v_connect_options.event_user_data = __pyx_v_connection_listener_data;
+10154: connect_options.event_inbox_capacity = c_event_inbox_capacity
__pyx_v_connect_options.event_inbox_capacity = __pyx_v_c_event_inbox_capacity;
+10155: connect_options.rejection_callback = _sender_error_trampoline
__pyx_v_connect_options.rejection_callback = __pyx_f_7questdb_7_client__sender_error_trampoline;
+10156: connect_options.rejection_user_data = <void*>db._dispatch_context
__pyx_v_connect_options.rejection_user_data = ((void *)__pyx_v_db->_dispatch_context);
+10157: connect_options.rejection_inbox_capacity = c_error_inbox_capacity
__pyx_v_connect_options.rejection_inbox_capacity = __pyx_v_c_error_inbox_capacity;
+10158: db._oidc_auth = oidc_auth
__Pyx_INCREF(__pyx_v_oidc_auth); __Pyx_GIVEREF(__pyx_v_oidc_auth); __Pyx_GOTREF(__pyx_v_db->_oidc_auth); __Pyx_DECREF_SET(__pyx_v_db->_oidc_auth, __pyx_v_oidc_auth);
+10159: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+10160: db._db = questdb_db_connect_ex(
__pyx_v_db->_db = questdb_db_connect_ex(__pyx_v_c_conf.buf, __pyx_v_c_conf.len, (&__pyx_v_connect_options), (&__pyx_v_err));
10161: c_conf.buf,
10162: c_conf.len,
10163: &connect_options,
10164: &err)
+10165: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+10166: if db._db == NULL:
__pyx_t_8 = (__pyx_v_db->_db == NULL);
if (unlikely(__pyx_t_8)) {
/* … */
}
10167: # A failed handler-aware connect fences its dispatchers before
10168: # returning, so the callback targets are now safe to release.
+10169: db._connection_listener = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_db->_connection_listener); __Pyx_DECREF_SET(__pyx_v_db->_connection_listener, Py_None);
+10170: db._error_handler = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_db->_error_handler); __Pyx_DECREF_SET(__pyx_v_db->_error_handler, Py_None);
+10171: db._dispatch_context = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_db->_dispatch_context); __Pyx_DECREF_SET(__pyx_v_db->_dispatch_context, Py_None);
+10172: db._oidc_auth = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_db->_oidc_auth); __Pyx_DECREF_SET(__pyx_v_db->_oidc_auth, Py_None);
+10173: db._bearer_token_provider = None
if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_db), __pyx_mstate_global->__pyx_n_u_bearer_token_provider, Py_None) < (0)) __PYX_ERR(0, 10173, __pyx_L4_error)
+10174: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10174, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 10174, __pyx_L4_error)
+10175: db._conf_str = conf_str
__Pyx_INCREF(__pyx_v_conf_str); __Pyx_GIVEREF(__pyx_v_conf_str); __Pyx_GOTREF(__pyx_v_db->_conf_str); __Pyx_DECREF_SET(__pyx_v_db->_conf_str, __pyx_v_conf_str);
+10176: db._cb_refs_key = _retain_callback_refs(
__pyx_t_10 = __pyx_f_7questdb_7_client__retain_callback_refs(((PyObject *)__pyx_v_db), __pyx_t_3); if (unlikely(__pyx_t_10 == ((size_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 10176, __pyx_L4_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_db->_cb_refs_key = __pyx_t_10;
+10177: db, db._dispatch_context)
__pyx_t_3 = __pyx_v_db->_dispatch_context;
__Pyx_INCREF(__pyx_t_3);
+10178: return db
{
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;
}
10179: finally:
+10180: _ensure_has_gil(&gs)
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_ExceptionSwap(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25);
if ( unlikely(__Pyx_GetException(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22) < 0)) __Pyx_ErrFetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
__Pyx_XGOTREF(__pyx_t_20);
__Pyx_XGOTREF(__pyx_t_21);
__Pyx_XGOTREF(__pyx_t_22);
__Pyx_XGOTREF(__pyx_t_23);
__Pyx_XGOTREF(__pyx_t_24);
__Pyx_XGOTREF(__pyx_t_25);
__pyx_t_13 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_19 = __pyx_filename;
{
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
/* … */
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+10181: qdb_pystr_buf_free(b)
qdb_pystr_buf_free(__pyx_v_b);
/* … */
qdb_pystr_buf_free(__pyx_v_b);
+10182: _oidc_raise_unscheduled_main()
__pyx_t_6 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10182, __pyx_L55_error) } __Pyx_XGIVEREF(__pyx_t_23); __Pyx_XGIVEREF(__pyx_t_24); __Pyx_XGIVEREF(__pyx_t_25); __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25); __Pyx_XGIVEREF(__pyx_t_20); __Pyx_XGIVEREF(__pyx_t_21); __Pyx_XGIVEREF(__pyx_t_22); __Pyx_ErrRestore(__pyx_t_20, __pyx_t_21, __pyx_t_22); __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_lineno = __pyx_t_13; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19; goto __pyx_L1_error; __pyx_L55_error:; __Pyx_XGIVEREF(__pyx_t_23); __Pyx_XGIVEREF(__pyx_t_24); __Pyx_XGIVEREF(__pyx_t_25); __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25); __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0; __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; goto __pyx_L1_error; } __pyx_L3_return: { __pyx_t_25 = __pyx_r; __pyx_r = 0; /* … */ __pyx_t_6 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10182, __pyx_L1_error) __pyx_r = __pyx_t_25; __pyx_t_25 = 0; goto __pyx_L0; } }
10183:
+10184: def __enter__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_7__enter__(PyObject *__pyx_v_self,
#if CYTHON_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_7__enter__ = {"__enter__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_7__enter__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_7__enter__(PyObject *__pyx_v_self,
#if CYTHON_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_6__enter__(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_6__enter__(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.QuestDB.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_7__enter__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB___enter, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[211])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 10184, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_25);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25);
#endif
if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_enter, __pyx_t_25) < (0)) __PYX_ERR(0, 10184, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
+10185: self._state_cond.acquire()
__pyx_t_2 = __pyx_v_self->_state_cond; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10185, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+10186: try:
/*try:*/ {
+10187: if self._db == NULL:
__pyx_t_4 = (__pyx_v_self->_db == NULL);
if (unlikely(__pyx_t_4)) {
/* … */
}
+10188: raise QuestDBError(
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 10188, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_5);
+10189: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 10189, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 10189, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_3 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_3 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_enter___can_t_be_called_QuestD}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10188, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 10188, __pyx_L4_error)
10190: '__enter__() can\'t be called: QuestDB is closed.')
+10191: if self._closing:
if (unlikely(__pyx_v_self->_closing)) {
/* … */
}
}
+10192: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 10192, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_7);
+10193: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10193, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 10193, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_3 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_enter___can_t_be_called_QuestD_2}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10192, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 10192, __pyx_L4_error)
10194: '__enter__() can\'t be called: QuestDB is closing. '
10195: 'close() has been called, and the handle takes no '
10196: 'new work while calls in progress and outstanding '
10197: 'leases finish.')
10198: finally:
+10199: self._state_cond.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_7 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_7);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10199, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L5;
}
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_ExceptionSwap(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
if ( unlikely(__Pyx_GetException(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13) < 0)) __Pyx_ErrFetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__pyx_t_8 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_10 = __pyx_filename;
{
__pyx_t_7 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_7);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10199, __pyx_L9_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
}
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_ExceptionReset(__pyx_t_14, __pyx_t_15, __pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ErrRestore(__pyx_t_11, __pyx_t_12, __pyx_t_13);
__pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
__pyx_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_10;
goto __pyx_L1_error;
__pyx_L9_error:;
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_ExceptionReset(__pyx_t_14, __pyx_t_15, __pyx_t_16);
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
goto __pyx_L1_error;
}
__pyx_L5:;
}
+10200: return self
{
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;
10201:
+10202: def sender(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_9sender(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_8sender, "\n Borrow a context-managed row-building sender from the pool.\n\n The lease counts as an active use of the handle until it is\n closed: :meth:`QuestDB.close` waits for outstanding leases for as\n long as its ``timeout`` allows (a minute by default -- see\n :meth:`close <QuestDB.close>`), and a lease keeps working while\n the handle drains -- apart from :meth:`PooledSender.dataframe`,\n which is new work on the handle and is refused once ``close()``\n has started.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_9sender = {"sender", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_9sender, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_8sender}; static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_9sender(PyObject *__pyx_v_self, #if CYTHON_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_8sender(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_8sender(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) { struct questdb_db *__pyx_v_db; struct qwp_sender *__pyx_v_sender; struct line_sender_error *__pyx_v_err; struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer = 0; struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_lease = 0; PyThreadState *__pyx_v_gs; int __pyx_v_db_use; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("questdb._client.QuestDB.sender", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_buffer); __Pyx_XDECREF((PyObject *)__pyx_v_lease); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_9sender, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB_sender, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[212])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 10202, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_sender, __pyx_t_25) < (0)) __PYX_ERR(0, 10202, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
10203: """
10204: Borrow a context-managed row-building sender from the pool.
10205:
10206: The lease counts as an active use of the handle until it is
10207: closed: :meth:`QuestDB.close` waits for outstanding leases for as
10208: long as its ``timeout`` allows (a minute by default -- see
10209: :meth:`close <QuestDB.close>`), and a lease keeps working while
10210: the handle drains -- apart from :meth:`PooledSender.dataframe`,
10211: which is new work on the handle and is refused once ``close()``
10212: has started.
10213: """
+10214: cdef questdb_db* db = NULL
__pyx_v_db = NULL;
+10215: cdef qwp_sender* sender = NULL
__pyx_v_sender = NULL;
+10216: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+10217: cdef Buffer buffer = None
__Pyx_INCREF(Py_None);
__pyx_v_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None);
+10218: cdef PooledSender lease = None
__Pyx_INCREF(Py_None);
__pyx_v_lease = ((struct __pyx_obj_7questdb_7_client_PooledSender *)Py_None);
+10219: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+10220: cdef bint db_use = False
__pyx_v_db_use = 0;
+10221: db = self._begin_db_use('sender', scoped=False)
__pyx_t_2.__pyx_n = 1; __pyx_t_2.scoped = 0; __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_sender, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 10221, __pyx_L1_error) __pyx_v_db = __pyx_t_1;
+10222: db_use = True
__pyx_v_db_use = 1;
+10223: try:
/*try:*/ {
+10224: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+10225: sender = questdb_db_borrow_sender(db, &err)
__pyx_v_sender = questdb_db_borrow_sender(__pyx_v_db, (&__pyx_v_err));
+10226: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+10227: if sender == NULL:
__pyx_t_3 = (__pyx_v_sender == NULL);
if (unlikely(__pyx_t_3)) {
/* … */
}
+10228: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10228, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 10228, __pyx_L4_error)
10229:
+10230: buffer = Buffer.__new__(Buffer)
__pyx_t_4 = ((PyObject *)__pyx_tp_new_7questdb_7_client_Buffer(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10230, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF_SET(__pyx_v_buffer, ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_4)); __pyx_t_4 = 0;
+10231: buffer._impl = questdb_db_new_buffer(db, &err)
__pyx_v_buffer->_impl = questdb_db_new_buffer(__pyx_v_db, (&__pyx_v_err));
+10232: if buffer._impl == NULL:
__pyx_t_3 = (__pyx_v_buffer->_impl == NULL);
if (unlikely(__pyx_t_3)) {
/* … */
}
+10233: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10233, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 10233, __pyx_L4_error)
+10234: buffer._b = qdb_pystr_buf_new()
__pyx_v_buffer->_b = qdb_pystr_buf_new();
+10235: buffer._init_buf_size = line_sender_buffer_capacity(buffer._impl)
__pyx_v_buffer->_init_buf_size = line_sender_buffer_capacity(__pyx_v_buffer->_impl);
+10236: buffer._max_name_len = questdb_db_buffer_max_name_len(db)
__pyx_v_buffer->_max_name_len = questdb_db_buffer_max_name_len(__pyx_v_db);
+10237: buffer._qwp = True
__pyx_v_buffer->_qwp = 1;
10238:
+10239: lease = PooledSender.__new__(PooledSender)
__pyx_t_4 = ((PyObject *)__pyx_tp_new_7questdb_7_client_PooledSender(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10239, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF_SET(__pyx_v_lease, ((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_t_4)); __pyx_t_4 = 0;
+10240: lease._attach(self, db, sender, buffer)
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_lease->__pyx_vtab)->_attach(__pyx_v_lease, __pyx_v_self, __pyx_v_db, __pyx_v_sender, __pyx_v_buffer);
+10241: sender = NULL
__pyx_v_sender = NULL;
+10242: db_use = False
__pyx_v_db_use = 0;
+10243: return lease
{
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;
}
10244: finally:
+10245: _ensure_has_gil(&gs)
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
if ( unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__pyx_t_5 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_7 = __pyx_filename;
{
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
/* … */
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+10246: if sender != NULL:
__pyx_t_3 = (__pyx_v_sender != NULL);
if (__pyx_t_3) {
/* … */
}
/* … */
__pyx_t_3 = (__pyx_v_sender != NULL);
if (__pyx_t_3) {
/* … */
}
+10247: questdb_db_return_sender(db, sender)
questdb_db_return_sender(__pyx_v_db, __pyx_v_sender);
/* … */
questdb_db_return_sender(__pyx_v_db, __pyx_v_sender);
+10248: if db_use:
if (__pyx_v_db_use) {
/* … */
}
/* … */
if (__pyx_v_db_use) {
/* … */
}
+10249: self._end_db_use(scoped=False)
__pyx_t_14.__pyx_n = 1;
__pyx_t_14.scoped = 0;
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, &__pyx_t_14); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10249, __pyx_L9_error)
/* … */
__pyx_t_14.__pyx_n = 1;
__pyx_t_14.scoped = 0;
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, &__pyx_t_14); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10249, __pyx_L1_error)
+10250: _oidc_raise_unscheduled_main()
__pyx_t_15 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_15 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10250, __pyx_L9_error) } __Pyx_XGIVEREF(__pyx_t_11); __Pyx_XGIVEREF(__pyx_t_12); __Pyx_XGIVEREF(__pyx_t_13); __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13); __Pyx_XGIVEREF(__pyx_t_8); __Pyx_XGIVEREF(__pyx_t_9); __Pyx_XGIVEREF(__pyx_t_10); __Pyx_ErrRestore(__pyx_t_8, __pyx_t_9, __pyx_t_10); __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_7; goto __pyx_L1_error; __pyx_L9_error:; __Pyx_XGIVEREF(__pyx_t_11); __Pyx_XGIVEREF(__pyx_t_12); __Pyx_XGIVEREF(__pyx_t_13); __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; goto __pyx_L1_error; } __pyx_L3_return: { __pyx_t_13 = __pyx_r; __pyx_r = 0; /* … */ __pyx_t_15 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_15 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10250, __pyx_L1_error) __pyx_r = __pyx_t_13; __pyx_t_13 = 0; goto __pyx_L0; } }
10251:
+10252: def dataframe(
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_11dataframe(PyObject *__pyx_v_self, #if CYTHON_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_10dataframe, "\n Ingest a dataframe through the pooled columnar QWP path.\n\n Ingestion always uses the direct (non-store-and-forward) column\n sender, independent of ``sf_dir``. On success, the call returns only\n after every DataFrame batch has been committed. The first successful\n batch on a fresh direct connection is already a commit boundary;\n subsequent batches are pipelined until the final commit. Large Arrow\n inputs add a checkpoint about every 100 batches to bound the\n uncommitted tail. The client may checkpoint earlier if deferred\n capacity fills or a batch must be split to fit.\n\n On a transient connection failure, the client re-sends the original,\n replayable DataFrame only when no batch was successfully published and\n the failed operation is not ``in_doubt``. Otherwise it raises rather\n than replaying from row zero. If a batch from this call may have\n committed, the raised error has ``in_doubt=True`` even when the final\n native write alone was provably not delivered. This includes local\n validation and Arrow stream errors after publication. Internal\n checkpoints do not reset the call\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_11dataframe = {"dataframe", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_11dataframe, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_10dataframe}; static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_11dataframe(PyObject *__pyx_v_self, #if CYTHON_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, 10252, __pyx_L3_error) if (likely(__pyx_kwds_len > 0)) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 10252, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "dataframe", 0) < (0)) __PYX_ERR(0, 10252, __pyx_L3_error) /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_10dataframe(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self, PyObject *__pyx_v_df, PyObject *__pyx_v_table_name, PyObject *__pyx_v_table_name_col, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at, PyObject *__pyx_v_max_rows_per_batch, PyObject *__pyx_v_schema_overrides) { struct qdb_pystr_buf *__pyx_v_b; struct __pyx_t_7questdb_7_client_dataframe_plan_t __pyx_v_plan; struct questdb_db *__pyx_v_db; int __pyx_v_db_use; struct __pyx_t_7questdb_7_client_direct_conn_source_t __pyx_v_src; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client.QuestDB.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_25 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 10252, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); /* … */ __pyx_t_20 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 10252, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_table_name, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 10252, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_table_name_col, __pyx_mstate_global->__pyx_kp_u_Union_None_int_str) < (0)) __PYX_ERR(0, 10252, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Union_str_bool_List_int_List_str) < (0)) __PYX_ERR(0, 10252, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_ServerTimestampType_int_st) < (0)) __PYX_ERR(0, 10252, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_max_rows_per_batch, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 10252, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_schema_overrides_2, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_object) < (0)) __PYX_ERR(0, 10252, __pyx_L1_error) __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_11dataframe, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB_dataframe, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[213])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10252, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_18, __pyx_t_25); __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_18, __pyx_t_20); __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __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_dataframe, __pyx_t_18) < (0)) __PYX_ERR(0, 10252, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
10253: self,
10254: df,
10255: *,
+10256: table_name: Optional[str] = None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_table_name, Py_None) < (0)) __PYX_ERR(0, 10252, __pyx_L1_error)
+10257: table_name_col: Union[None, int, str] = None,
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_n_u_auto)); if (!values[5]) values[5] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k__38); /* … */ if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_table_name_col, Py_None) < (0)) __PYX_ERR(0, 10252, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_n_u_auto) < (0)) __PYX_ERR(0, 10252, __pyx_L1_error)
10258: symbols: Union[str, bool, List[int], List[str]] = 'auto',
10259: at: Union[ServerTimestampType, int, str, TimestampNanos, datetime.datetime],
+10260: max_rows_per_batch: int = DEFAULT_MAX_CHUNK_ROWS,
__Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_DEFAULT_MAX_CHUNK_ROWS); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 10260, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); if (__Pyx_PyInt_FromNumber(&__pyx_t_25, NULL, 1) < (0)) __PYX_ERR(0, 10260, __pyx_L1_error) __pyx_mstate_global->__pyx_k__38 = ((PyObject*)__pyx_t_25); __Pyx_GIVEREF(__pyx_t_25); __pyx_t_25 = 0; /* … */ __Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_DEFAULT_MAX_CHUNK_ROWS); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 10260, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); if (__Pyx_PyInt_FromNumber(&__pyx_t_20, NULL, 1) < (0)) __PYX_ERR(0, 10260, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_max_rows_per_batch, __pyx_t_20) < (0)) __PYX_ERR(0, 10252, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+10261: schema_overrides: Optional[Dict[str, object]] = None):
if (!values[6]) values[6] = __Pyx_NewRef(((PyObject*)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, i); __PYX_ERR(0, 10252, __pyx_L3_error) } } for (Py_ssize_t i = 1; i < 2; i++) { if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("dataframe", *(__pyx_pyargnames[i - 0])); __PYX_ERR(0, 10252, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { __Pyx_RaiseKeywordRequired("dataframe", __pyx_mstate_global->__pyx_n_u_at); __PYX_ERR(0, 10252, __pyx_L3_error) } __pyx_v_df = values[0]; __pyx_v_at = values[1]; __pyx_v_table_name = ((PyObject*)values[2]); __pyx_v_table_name_col = values[3]; __pyx_v_symbols = values[4]; if (__Pyx_PyInt_FromNumber(&values[5], "max_rows_per_batch", 0) < (0)) __PYX_ERR(0, 10260, __pyx_L3_error) __pyx_v_max_rows_per_batch = ((PyObject*)values[5]); __pyx_v_schema_overrides = ((PyObject*)values[6]); } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 10252, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.QuestDB.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 1, "table_name", 2))) __PYX_ERR(0, 10256, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_max_rows_per_batch), (&PyLong_Type), 0, "max_rows_per_batch", 2))) __PYX_ERR(0, 10260, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema_overrides), (&PyDict_Type), 1, "schema_overrides", 2))) __PYX_ERR(0, 10261, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_10dataframe(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self), __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, __pyx_v_max_rows_per_batch, __pyx_v_schema_overrides); /* … */ if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_schema_overrides_2, Py_None) < (0)) __PYX_ERR(0, 10252, __pyx_L1_error)
10262: """
10263: Ingest a dataframe through the pooled columnar QWP path.
10264:
10265: Ingestion always uses the direct (non-store-and-forward) column
10266: sender, independent of ``sf_dir``. On success, the call returns only
10267: after every DataFrame batch has been committed. The first successful
10268: batch on a fresh direct connection is already a commit boundary;
10269: subsequent batches are pipelined until the final commit. Large Arrow
10270: inputs add a checkpoint about every 100 batches to bound the
10271: uncommitted tail. The client may checkpoint earlier if deferred
10272: capacity fills or a batch must be split to fit.
10273:
10274: On a transient connection failure, the client re-sends the original,
10275: replayable DataFrame only when no batch was successfully published and
10276: the failed operation is not ``in_doubt``. Otherwise it raises rather
10277: than replaying from row zero. If a batch from this call may have
10278: committed, the raised error has ``in_doubt=True`` even when the final
10279: native write alone was provably not delivered. This includes local
10280: validation and Arrow stream errors after publication. Internal
10281: checkpoints do not reset the call's delivery status. The load did not
10282: finish, but any already committed prefix remains; an application-level
10283: retry of the whole DataFrame can duplicate it unless the destination
10284: table uses suitable ``DEDUP UPSERT KEYS``. A consumed one-shot stream
10285: may instead be non-replayable with ``in_doubt=False`` when no rows
10286: could have landed; that error asks for a fresh reader. Server-side
10287: rejections (e.g. a
10288: schema mismatch) surface as a plain
10289: :class:`QuestDBError`; the structured ``sender_error`` diagnostic
10290: is attached only by the store-and-forward senders.
10291:
10292: ``df`` accepts any of:
10293:
10294: - **pandas** ``pandas.DataFrame``. NumPy-backed columns route
10295: through the legacy planner; pyarrow-backed columns route
10296: through the Arrow C Stream capsule path below.
10297: - **polars** ``polars.DataFrame`` and ``polars.LazyFrame``
10298: (polars 1.32 or later). ``LazyFrame`` is materialised via
10299: ``.collect(engine='streaming')``.
10300: - **pyarrow** ``pa.Table``, ``pa.RecordBatch``, and
10301: ``pa.RecordBatchReader``.
10302: - Any object exposing the Arrow C Data Interface — i.e. with
10303: ``__arrow_c_stream__`` (duckdb / cudf / pyarrow-backed
10304: pandas 2.2+) or ``__arrow_c_array__`` (single Arrow array
10305: exporters, wrapped into a one-batch ``pa.Table``).
10306:
10307: ``at`` names the designated timestamp column (by name or index).
10308: Alternatively pass a fixed ``TimestampNanos`` / ``datetime``
10309: shared by every row (encoded as a repeated constant; resubmission
10310: stays idempotent under ``DEDUP UPSERT KEYS``), or the explicit
10311: :data:`ServerTimestamp` sentinel to let the server assign each
10312: row's timestamp on arrival — an opt-in mirroring the row API,
10313: since server-assigned timestamps defeat ``DEDUP UPSERT KEYS`` on
10314: resubmission.
10315:
10316: The columnar path loads one table per call: name it via
10317: ``table_name`` — or, for NumPy-backed pandas input, the
10318: dataframe's index name (``df.index.name``); Arrow-native input
10319: (polars, pyarrow, pyarrow-backed pandas) requires an explicit
10320: ``table_name``. ``table_name_col`` raises
10321: :class:`UnsupportedDataFrameShapeError` — split multi-table
10322: frames (e.g. ``df.groupby(col)``) and load each group.
10323:
10324: Supports a column-QWP v1 subset: a single per-call table name,
10325: non-null designated timestamp column, and the following
10326: per-column dtypes:
10327:
10328: - **Numeric**: NumPy ``bool/int{8,16,32,64}/uint{8..64}/float{32,64}``.
10329: Arrow ``pa.int{8,16,32,64}``, ``pa.float{16,32,64}``, and
10330: ``pa.uint{8,16,32,64}`` are accepted by the Rust Arrow batch route
10331: when the frame uses a fixed table name and a designated timestamp
10332: column name. Unsigned Arrow values follow the
10333: Rust Arrow policy: ``UInt8`` and ``UInt16`` widen to ``INT``,
10334: ``UInt32`` to ``LONG``, and ``UInt64`` values up to
10335: ``i64::MAX`` are accepted as ``LONG``. Larger ``UInt64`` values are
10336: rejected because QuestDB QWP-WS encodes integers as signed ``i64``.
10337: Signed ``int8``/``int16`` land as QuestDB ``INT``; the row-oriented
10338: :meth:`Sender.dataframe` instead widens every integer to ``LONG``.
10339: Likewise ``float32`` lands here as ``FLOAT`` but is widened to
10340: ``DOUBLE`` by the row path — ingest a given table through a single
10341: path to avoid a first-write column-type mismatch.
10342: - **String / Symbol**: object-dtype ``str``, ``pa.string()``,
10343: ``pa.large_string()``, ``pd.CategoricalDtype`` of strings.
10344: - **Timestamp**: NumPy ``datetime64`` units accepted by pandas and
10345: ``pa.timestamp`` with unit ``s``, ``us``, or ``ns`` (tz-aware
10346: accepted on Arrow-backed columns in the Rust Arrow route). An
10347: Arrow ``ms`` timestamp field lands as DATE instead — see
10348: **DATE** below — while a NumPy ``datetime64[ms]`` field is
10349: widened to a microsecond TIMESTAMP unless a
10350: ``df.attrs['questdb']`` claim names it DATE.
10351: Timestamp *field* columns accept null timestamps (``NaT`` /
10352: ``None``) and values before the Unix epoch; a ``datetime64[ns]``
10353: field carrying ``NaT`` is re-exported through Arrow so its
10354: ``INT64_MIN`` null sentinel is preserved (this needs pyarrow).
10355: The *designated* timestamp column (``at=``) must be non-null
10356: and at or after the epoch.
10357: - **Decimal**: Arrow-backed ``pa.decimal{32,64,128,256}`` columns
10358: (``pa.decimal32``/``pa.decimal64`` require pyarrow >= 19), or
10359: object-dtype columns of ``decimal.Decimal`` (re-exported through
10360: Arrow; the decimal width and scale are inferred from the values).
10361: - **Array**: Arrow ``pa.list_`` / ``pa.large_list`` /
10362: ``pa.fixed_size_list`` columns with a ``float64`` leaf (nested for
10363: multi-dimensional), and object-dtype columns of ``float64``
10364: ``numpy.ndarray`` cells (any rank; requires pyarrow). Both land as
10365: QuestDB ``ARRAY(DOUBLE)``. Null rows are allowed; null *elements*
10366: inside an array are not.
10367: - **UUID**: object-dtype columns of ``uuid.UUID``, the
10368: ``arrow.uuid`` extension type over ``pa.fixed_size_binary(16)``,
10369: or any 16-byte binary column claimed with
10370: ``schema_overrides={'col': 'uuid'}``. Bytes are **canonical
10371: RFC 4122 big-endian** — exactly ``uuid.UUID.bytes`` — and the
10372: client byte-swaps them into QWP wire order. Round-trip through
10373: :meth:`query <questdb.QuestDB.query>` is byte-identity.
10374:
10375: The ``arrow.uuid`` route requires pyarrow >= 18, which is where
10376: that canonical extension type is registered, and the column
10377: must carry the extension **type** — build it from ``pa.uuid()``.
10378: Writing ``ARROW:extension:name`` as plain field metadata is not
10379: equivalent: pyarrow leaves such a key on the field, and a
10380: pandas ``ArrowDtype`` carries a type and no field, so a frame
10381: built that way holds a bare ``pa.fixed_size_binary(16)`` and
10382: is refused as unlabelled — see **Binary** below. Frames
10383: imported over the C data interface or Arrow IPC do get the
10384: extension type rebuilt from that key, which is why the same
10385: metadata can route two ways. The other two routes —
10386: ``uuid.UUID`` cells and ``schema_overrides`` — are free of both
10387: conditions, and a ``{'kind': 'uuid'}`` entry in
10388: ``df.attrs['questdb']`` claims an object-dtype column of
10389: 16-byte ``bytes``, the shape
10390: ``to_pandas(dtype_backend='numpy_nullable')`` returns. On
10391: pyarrow < 18, where no column can carry the label at all, a
10392: pandas frame's bare ``pa.fixed_size_binary(16)`` column is
10393: still refused rather than quietly landing as BINARY.
10394: - **LONG256**: 32-byte binary columns. Bytes are little-endian
10395: limbs, least-significant limb first, forwarded verbatim. Three
10396: routes claim the type, and they need different inputs.
10397: ``schema_overrides={'col': 'long256'}`` needs a fully
10398: Arrow-backed frame — every column an ArrowDtype, e.g.
10399: ``df.convert_dtypes(dtype_backend='pyarrow')``.
10400: ``questdb.column_type=long256`` *field* metadata needs a
10401: ``pa.Table`` or ``pa.RecordBatch`` handed straight to this
10402: method: field metadata lives on the field, a pandas
10403: ``ArrowDtype`` carries a type and no field, so a column that
10404: passed through pandas has already lost the claim. A
10405: ``{'kind': 'long256'}`` entry in ``df.attrs['questdb']`` claims
10406: an object-dtype column of Python ints or of 32-byte ``bytes``
10407: — the two shapes :meth:`QueryResult.to_pandas` hands a LONG256
10408: column back in, plain and ``dtype_backend='numpy_nullable'``
10409: respectively. Ints are encoded as 32 unsigned little-endian
10410: bytes, so every non-null value must satisfy
10411: ``0 <= value < 2**256``; ``bytes`` cells go out verbatim and
10412: must be exactly 32 bytes. LONG256 has no Arrow extension type,
10413: so a ``pa.fixed_size_binary(32)`` column in a pandas frame
10414: claims nothing by itself and is refused rather than sent as
10415: opaque bytes — see **Binary** below for why pandas frames
10416: refuse where native Arrow input writes BINARY.
10417: - **Binary**: object-dtype columns of ``bytes``, ``bytearray``, or
10418: C-contiguous one-byte-item ``memoryview`` cells land as BINARY,
10419: the same value types :func:`Buffer.row <questdb.ingress.Buffer.row>`
10420: accepts. Arrow ``pa.binary()``, ``pa.large_binary()``, and
10421: ``pa.fixed_size_binary(n)`` columns also land as BINARY, with
10422: the exception and the condition below.
10423:
10424: The exception is ``pa.fixed_size_binary(8)``, which both
10425: planners refuse with ``ArrowUnsupportedColumnKind``, labelled
10426: or not. polars exports its ``Object`` dtype in exactly that
10427: shape, as handles to objects in its own process rather than
10428: data, and once exported nothing else marks it. To store
10429: genuine 8-byte values as BINARY, make the column
10430: variable-length binary: ``pa.binary()``, ``pl.Binary``, or an
10431: object column of ``bytes``.
10432:
10433: The condition is on widths 16 and 32. A width on its own
10434: claims nothing: such a column is a UUID or a LONG256 only when
10435: something labels it — ``pa.uuid()``, ``questdb.column_type``
10436: field metadata of ``uuid`` or ``long256``, ``schema_overrides``,
10437: or a ``df.attrs['questdb']`` claim. Any other extension type,
10438: or any other ``questdb.column_type`` value, leaves the column
10439: unlabelled — except ``binary``, which, like
10440: ``schema_overrides={'col': 'binary'}``, labels it as plain bytes.
10441: What happens to an unlabelled
10442: one depends on where it comes from, not on which planner
10443: writes it. Native Arrow input — a ``pa.Table``,
10444: ``pa.RecordBatch``, ``pa.RecordBatchReader``, or any other
10445: ``__arrow_c_stream__`` producer — keeps its field metadata, so
10446: an unlabelled column there is written as BINARY, and once the
10447: write is done the ``questdb`` logger records one WARNING per
10448: such column naming the remedies. A pandas frame refuses it with ``BadDataFrame``,
10449: fully Arrow-backed or not: an ``ArrowDtype`` carries a type and
10450: no field, so the column may be a UUID or LONG256 column whose
10451: label was dropped on the way into pandas, and guessing would
10452: auto-create a table with the wrong column type. The refusal
10453: does not depend on the pyarrow version — which remedies the
10454: message can name does, since ``pa.uuid()`` needs pyarrow 18,
10455: but which columns are accepted does not. To write either width
10456: as BINARY without the warning or the refusal, label it as
10457: plain bytes — ``schema_overrides={'col': 'binary'}``, or
10458: ``{"questdb.column_type": "binary"}`` field metadata on native
10459: Arrow input — which sends it as it is, with no copy. Making the
10460: column variable-length binary (``pa.binary()``,
10461: ``pd.ArrowDtype(pa.binary())``) or, in pandas, an object-dtype
10462: column of ``bytes`` works too, at the cost of a copy. Requires
10463: QuestDB 10 or newer.
10464: - **DATE**: Arrow ``pa.timestamp('ms')`` (tz-aware or naive),
10465: ``pa.date32()``, and ``pa.date64()`` columns land as DATE. The
10466: Arrow type is itself the claim, so there is no DATE cell type
10467: and no ``'date'`` kind for ``schema_overrides``. Such a column
10468: lands as DATE whether the frame is fully Arrow-backed or mixed
10469: with NumPy columns. What has no route of its own to DATE is
10470: the NumPy ``datetime64[ms]`` dtype, which widens to a
10471: microsecond TIMESTAMP, and its tz-aware ``datetime64[ms, tz]``
10472: form, which is rejected outright. A millisecond column named
10473: by ``at=`` becomes the table's designated TIMESTAMP, like any
10474: other ``at`` column. Round-tripping keeps the type: :meth:`query
10475: <questdb.QuestDB.query>` returns a DATE column as
10476: ``pa.timestamp('ms', 'UTC')``, which ``to_arrow()`` and
10477: ``to_pandas(dtype_backend='pyarrow')`` feed straight back as
10478: DATE. Plain ``to_pandas()`` gives a NumPy ``datetime64[ms]``
10479: column, and the ``df.attrs['questdb']`` claim it comes with
10480: names the column DATE, so this method puts the Arrow type back
10481: on before writing and that frame lands as DATE too.
10482: Row-at-a-time, DATE is written with :class:`DateMillis
10483: <questdb.DateMillis>` through :func:`Buffer.row
10484: <questdb.ingress.Buffer.row>`.
10485:
10486: Server-side coercion handles cross-type writes (e.g. ``pa.string()``
10487: UUIDs landing in a UUID column are parsed server-side; narrow ints
10488: landing in a wider column are widened). Failures surface as
10489: ``QuestDBError`` from the ``flush()``.
10490:
10491: ``schema_overrides`` reclassifies columns by name, mapping each to
10492: ``'symbol'``, ``'ipv4'``, ``'char'``, ``'uuid'``, ``'long256'``,
10493: ``'binary'``, or ``('geohash', bits)`` (e.g.
10494: ``{'venue': 'symbol', 'src_ip': 'ipv4'}``). Unknown column names are
10495: rejected. An override wins over any Arrow field metadata on its
10496: column, except ``'binary'``, which is refused on a column whose
10497: own type or field metadata labels it UUID or LONG256. ``'uuid'`` and ``'long256'`` apply to fixed-size and
10498: variable-length binary columns alike — the route polars frames take,
10499: since polars has no fixed-size binary dtype — and every non-null
10500: value must be exactly 16 or 32 bytes respectively. ``'binary'``
10501: applies to binary columns and says a 16- or 32-byte column holds
10502: plain bytes (see **Binary** above); it cannot override a
10503: ``pa.uuid()`` type or a ``uuid`` / ``long256`` field label, and
10504: is refused on such a column. It requires the
10505: Arrow columnar path (fully Arrow-backed input without
10506: ``table_name_col``; pandas input needs pandas 2.2 or later); on
10507: input that falls back to the NumPy planner
10508: it raises :class:`UnsupportedDataFrameShapeError`.
10509:
10510: A pandas frame that came out of :meth:`QueryResult.to_pandas`
10511: carries its source column types in ``df.attrs['questdb']``, and
10512: this method reads them back. That is what keeps UUID, LONG256,
10513: IPV4, CHAR, GEOHASH, and DATE columns their own type on a
10514: read-modify-write round trip: their claim lives in Arrow *field*
10515: metadata, which a pandas dtype — an Arrow type and no field —
10516: cannot hold. The metadata recalls what the frame held when it was
10517: read, so a column since dropped, renamed, or retyped simply loses
10518: its claim, and ``symbols`` / ``schema_overrides`` outrank it.
10519: BYTE, SHORT, and INT columns still widen one step on the way back
10520: in; the Arrow ingest API has no override that pins them.
10521:
10522: The claim is honoured on every shape a ``to_pandas`` backend
10523: produces, so plain ``to_pandas()``,
10524: ``dtype_backend='pyarrow'`` and ``dtype_backend='numpy_nullable'``
10525: round-trip the same way. Besides the Arrow-backed and plain NumPy
10526: columns, that covers the object columns the other backends leave
10527: behind: Python ints, which is what a pandas masked column becomes
10528: and what plain ``to_pandas()`` returns a LONG256 as, and
10529: ``bytes``, which is how ``dtype_backend='numpy_nullable'``
10530: returns UUID and LONG256. Frames saved from version 5.0, whose
10531: plain ``to_pandas()`` returned a GEOHASH column as an unsigned
10532: integer, round-trip too: such a column is written as the signed
10533: integer of the same width, bit for bit. A frame whose columns
10534: were retyped past that set — which a custom ``types_mapper`` can
10535: do — keeps the claim in ``attrs`` and cannot use it: a claimed
10536: column that arrives as a float or a string dtype lands as that
10537: dtype implies, and the claim it could not use is reported as a
10538: warning-level record on the ``questdb`` logger. An object column
10539: states no width or range of its own, so a claimed value the type
10540: cannot hold — an integer past ``2**32-1`` under ``ipv4``, a cell
10541: that is not exactly 16 or 32 bytes under ``uuid`` or ``long256``
10542: — is refused rather than written into a column of the claimed
10543: type. GEOHASH is the deliberate exception, described next.
10544:
10545: Bulk GEOHASH values are raw bit patterns, whatever the column is
10546: stored as: NumPy, Arrow, or an object column of Python ints,
10547: which is also what a pandas masked column becomes. This is a
10548: deliberate contract, the same for every shape, so that whether a
10549: frame is written does not depend on whether a GEOHASH column
10550: holds a null; plain :meth:`QueryResult.to_pandas` returns a
10551: column that does as a masked column. The declared precision
10552: must be in ``1..=60`` and fit the signed integer carrier, but no
10553: per-value check verifies that the pattern has no bits set above
10554: that precision. For example, ``32`` under ``GEOHASH(5b)`` is
10555: accepted even though it needs six bits. If the declared precision
10556: is wrong for the data, the write can succeed and store a different
10557: GEOHASH location or ``NULL``. Only the low
10558: ``ceil(precision / 8)`` bytes are encoded, and the exact result of
10559: an inconsistent value is unspecified. This is a semantic
10560: data-integrity risk, not a memory-safety risk for otherwise valid
10561: NumPy/Arrow buffers. The caller must validate bulk values. The
10562: scalar :class:`Geohash <questdb.Geohash>` constructor remains
10563: strict; malformed custom Arrow C Data structures remain invalid
10564: input and are outside this guarantee.
10565:
10566: A column of nothing but nulls names no type of its own, and
10567: without a claim it is left out of the write and out of the
10568: table the write auto-creates. A claim names one, so a claimed
10569: all-null column is written as the claimed type — which is what
10570: keeps a batch that happens to hold no value for one column from
10571: deciding the shape of the table.
10572:
10573: The claim a query result carries reads as an ordinary mapping
10574: but cannot be edited in place, because every copy of the frame
10575: shares it; assign a new mapping to ``df.attrs['questdb']`` to
10576: change it. A plain hand-written ``dict`` is read here just the
10577: same, in this shape:
10578:
10579: .. code-block:: python
10580:
10581: df.attrs['questdb'] = {
10582: 'version': 1,
10583: 'columns': {
10584: 'src_ip': {'kind': 'ipv4'},
10585: 'pos': {'kind': 'geohash', 'precision_bits': 20},
10586: 'traded_on': {'kind': 'date'},
10587: },
10588: }
10589:
10590: ``version`` must be ``1`` when present, and a mapping without it
10591: reads as version 1. The claim's vocabulary can gain kinds, and a
10592: client applying a version it does not understand would write the
10593: wrong column type, which is the outcome the claim exists to
10594: prevent, so a mapping carrying any other version is not read and
10595: every column in it is ignored. A claim, or a column's entry in
10596: it, that is not read is reported through the ``questdb`` logger;
10597: the write goes ahead either way. ``kind`` is one of
10598: ``'uuid'``, ``'long256'``, ``'ipv4'``, ``'char'``, ``'geohash'``,
10599: or ``'date'`` — the types whose claim cannot always ride on a pandas
10600: dtype. ``precision_bits`` accompanies ``'geohash'`` alone. A
10601: ``'date'`` claim restores the DATE type after plain pandas has
10602: represented it as NumPy ``datetime64[ms]``. Naming a column that is
10603: not in the frame is not an error; the entry is skipped.
10604:
10605: A ``pa.Table`` or ``pa.RecordBatch`` from
10606: :meth:`QueryResult.to_arrow` or :meth:`QueryResult.iter_arrow`
10607: carries the same claims in Arrow field metadata, as a
10608: ``questdb.column_type`` key on every field, and this method
10609: passes that metadata to the native client unchanged. A field
10610: claim the field's Arrow type cannot carry — ``'short'`` on
10611: ``pa.int32()``, ``'ipv4'`` on ``pa.int64()`` — makes this method
10612: raise :class:`QuestDBError <questdb.QuestDBError>`, with ``code``
10613: set to ``QuestDBErrorCode.ArrowIngest``, before anything is sent.
10614: This stricter rule is deliberate. Field metadata is the input
10615: contract of the native Arrow ingest, which refuses such a field
10616: in every language that uses it. A field claim also goes stale
10617: only when the old field is carried onto a new type: ``Table.cast``
10618: with a schema built from ``field.with_type(...)``, or
10619: ``pa.concat_tables(..., promote_options='permissive')`` with the
10620: claimed table first. Casting to a schema built from scratch,
10621: ``set_column`` by name, and a polars or pandas round trip all
10622: build fields without the key. ``df.attrs`` belongs to the whole
10623: frame and survives ``astype`` and arithmetic, so a stale claim
10624: there is the normal case and is logged instead. To write a
10625: retyped column, drop its metadata:
10626:
10627: .. code-block:: python
10628:
10629: i = table.schema.get_field_index('col')
10630: table = table.cast(table.schema.set(
10631: i, table.schema.field(i).remove_metadata()))
10632:
10633: ``max_rows_per_batch`` sets the pipelining granularity, not a
10634: safety limit: any batch exceeding the negotiated per-batch byte
10635: cap is split regardless of it, and a single row is never bounded
10636: by it. Each batch is one unit of client memory and server-side
10637: apply. The first successful batch on a fresh connection is a commit
10638: boundary. Sliceable Arrow inputs add another checkpoint about every
10639: 100 batches, so ``max_rows_per_batch * 100`` rows approximates the
10640: maximum periodic uncommitted tail, not a whole-source replay window.
10641: The NumPy planner pipelines the remaining batches until its final
10642: commit. Either path may checkpoint earlier when deferred capacity
10643: fills. Raise ``max_rows_per_batch`` for narrow numeric
10644: rows; lower it for very wide rows or tight memory. Streaming Arrow
10645: input (``pa.RecordBatchReader``) is not re-batched — the producer's
10646: batch size governs its checkpoint window.
10647: """
+10648: cdef qdb_pystr_buf* b = NULL
__pyx_v_b = NULL;
+10649: cdef dataframe_plan_t plan = dataframe_plan_blank()
__pyx_v_plan = __pyx_f_7questdb_7_client_dataframe_plan_blank();
+10650: cdef questdb_db* db = NULL
__pyx_v_db = NULL;
+10651: cdef bint db_use = False
__pyx_v_db_use = 0;
10652: cdef direct_conn_source_t src
+10653: db = self._begin_db_use('dataframe')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_dataframe, NULL); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 10653, __pyx_L1_error) __pyx_v_db = __pyx_t_1;
+10654: db_use = True
__pyx_v_db_use = 1;
+10655: try:
/*try:*/ {
10656: # Claimed inside the `try`, and after `_begin_db_use`,
10657: # which raises on a closed handle: an allocation made
10658: # ahead of that raise has nothing to free it, so a retry
10659: # loop against a closed handle leaks one per attempt.
+10660: b = qdb_pystr_buf_new()
__pyx_v_b = qdb_pystr_buf_new();
+10661: src.db = db
__pyx_v_src.db = __pyx_v_db;
+10662: src.opts = NULL
__pyx_v_src.opts = NULL;
+10663: _direct_dataframe_run(
__pyx_t_4 = __pyx_f_7questdb_7_client__direct_dataframe_run((&__pyx_v_src), (((double)questdb_db_reconnect_max_duration_ms(__pyx_v_db)) / 1000.0), __pyx_v_b, (&__pyx_v_plan), __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, __pyx_t_2, __pyx_v_schema_overrides, __pyx_t_3); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10663, __pyx_L4_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
10664: &src,
10665: questdb_db_reconnect_max_duration_ms(db) / 1000.0,
10666: b,
10667: &plan,
10668: df,
10669: table_name,
10670: table_name_col,
10671: symbols,
10672: at,
+10673: max_rows_per_batch,
__pyx_t_2 = __Pyx_PyLong_As_size_t(__pyx_v_max_rows_per_batch); if (unlikely((__pyx_t_2 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 10673, __pyx_L4_error)
10674: schema_overrides,
+10675: self._oidc_auth)
__pyx_t_3 = __pyx_v_self->_oidc_auth;
__Pyx_INCREF(__pyx_t_3);
+10676: return self
{
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;
}
10677: finally:
+10678: if b != NULL:
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
if ( unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__pyx_t_5 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_7 = __pyx_filename;
{
__pyx_t_14 = (__pyx_v_b != NULL);
if (__pyx_t_14) {
/* … */
}
/* … */
__pyx_t_14 = (__pyx_v_b != NULL);
if (__pyx_t_14) {
/* … */
}
+10679: qdb_pystr_buf_free(b)
qdb_pystr_buf_free(__pyx_v_b);
/* … */
qdb_pystr_buf_free(__pyx_v_b);
+10680: if db_use:
if (__pyx_v_db_use) {
/* … */
}
/* … */
if (__pyx_v_db_use) {
/* … */
}
+10681: self._end_db_use()
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10681, __pyx_L7_error) /* … */ ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10681, __pyx_L1_error)
+10682: _oidc_raise_unscheduled_main()
__pyx_t_4 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10682, __pyx_L7_error) } __Pyx_XGIVEREF(__pyx_t_11); __Pyx_XGIVEREF(__pyx_t_12); __Pyx_XGIVEREF(__pyx_t_13); __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13); __Pyx_XGIVEREF(__pyx_t_8); __Pyx_XGIVEREF(__pyx_t_9); __Pyx_XGIVEREF(__pyx_t_10); __Pyx_ErrRestore(__pyx_t_8, __pyx_t_9, __pyx_t_10); __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_7; goto __pyx_L1_error; __pyx_L7_error:; __Pyx_XGIVEREF(__pyx_t_11); __Pyx_XGIVEREF(__pyx_t_12); __Pyx_XGIVEREF(__pyx_t_13); __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; goto __pyx_L1_error; } __pyx_L3_return: { __pyx_t_13 = __pyx_r; __pyx_r = 0; /* … */ __pyx_t_4 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10682, __pyx_L1_error) __pyx_r = __pyx_t_13; __pyx_t_13 = 0; goto __pyx_L0; } }
10683:
+10684: def execute(self, str sql, object binds=None, *, object timeout=None):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_13execute(PyObject *__pyx_v_self, #if CYTHON_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_12execute, "\n Run a statement and discard whatever it returns.\n\n Executes ``sql`` like :meth:`query`, drains the result to its\n clean end and returns the pooled connection \342\200\224 the pattern DDL\n and DML otherwise need spelled out as\n ``with db.query(sql) as r: r.to_pandas()``. Statement output\n (a ``COPY`` status row, admin-function rows, a stray\n ``SELECT``) is discarded; use :meth:`query` when you want the\n result. The connection\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_13execute = {"execute", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_13execute, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_12execute}; static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_13execute(PyObject *__pyx_v_self, #if CYTHON_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, 10684, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 10684, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 10684, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "execute", 0) < (0)) __PYX_ERR(0, 10684, __pyx_L3_error) if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("execute", 0, 1, 2, i); __PYX_ERR(0, 10684, __pyx_L3_error) } } } else { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 10684, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 10684, __pyx_L3_error) break; default: goto __pyx_L5_argtuple_error; } if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None)); } __pyx_v_sql = ((PyObject*)values[0]); __pyx_v_binds = values[1]; __pyx_v_timeout = values[2]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("execute", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 10684, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.QuestDB.execute", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sql), (&PyUnicode_Type), 1, "sql", 1))) __PYX_ERR(0, 10684, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_12execute(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self), __pyx_v_sql, __pyx_v_binds, __pyx_v_timeout); /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_12execute(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self, PyObject *__pyx_v_sql, PyObject *__pyx_v_binds, PyObject *__pyx_v_timeout) { PyObject *__pyx_v_result = NULL; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("questdb._client.QuestDB.execute", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_result); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10684, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_timeout, Py_None) < (0)) __PYX_ERR(0, 10684, __pyx_L1_error) __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_13execute, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB_execute, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[214])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 10684, __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[63]); __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_20, __pyx_t_18); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_execute_2, __pyx_t_20) < (0)) __PYX_ERR(0, 10684, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
10685: """
10686: Run a statement and discard whatever it returns.
10687:
10688: Executes ``sql`` like :meth:`query`, drains the result to its
10689: clean end and returns the pooled connection — the pattern DDL
10690: and DML otherwise need spelled out as
10691: ``with db.query(sql) as r: r.to_pandas()``. Statement output
10692: (a ``COPY`` status row, admin-function rows, a stray
10693: ``SELECT``) is discarded; use :meth:`query` when you want the
10694: result. The connection's SYMBOL dictionary is left untouched.
10695:
10696: ``binds`` and ``timeout`` behave exactly as on :meth:`query`.
10697:
10698: Returns the statement's ``EXEC_DONE`` report as an
10699: :class:`ExecDone` named tuple ``(op_type, rows_affected)``, or
10700: ``None`` for a statement that streamed a result set instead (a
10701: ``SELECT``). See :attr:`QueryResult.exec_done` for the caveats on
10702: ``rows_affected``.
10703: """
+10704: self._begin_db_use('execute')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_execute_2, NULL); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 10704, __pyx_L1_error)
+10705: try:
/*try:*/ {
+10706: result = self.query(
__pyx_t_3 = ((PyObject *)__pyx_v_self);
__Pyx_INCREF(__pyx_t_3);
/* … */
#endif
__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[46];
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 10706, __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, 10706, __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;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10706, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_v_result = __pyx_t_2;
__pyx_t_2 = 0;
/* … */
{
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[46] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[46])) __PYX_ERR(0, 10706, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[46]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[46]);
+10707: sql, binds, reset_symbol_dict=False, timeout=timeout)
#if CYTHON_VECTORCALL
+10708: try:
/*try:*/ {
+10709: result._drain()
__pyx_t_5 = __pyx_v_result;
__Pyx_INCREF(__pyx_t_5);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_drain_2, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10709, __pyx_L7_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+10710: return result.exec_done
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_result, __pyx_mstate_global->__pyx_n_u_exec_done); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10710, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L6_return; }
10711: finally:
+10712: result.close()
/*finally:*/ {
__pyx_L7_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
if ( unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__pyx_t_6 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename;
{
__pyx_t_5 = __pyx_v_result;
__Pyx_INCREF(__pyx_t_5);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_close, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10712, __pyx_L10_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
}
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ErrRestore(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
__pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_7; __pyx_filename = __pyx_t_8;
goto __pyx_L4_error;
__pyx_L10_error:;
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
goto __pyx_L4_error;
}
__pyx_L6_return: {
__pyx_t_14 = __pyx_r;
__pyx_r = 0;
__pyx_t_5 = __pyx_v_result;
__Pyx_INCREF(__pyx_t_5);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_close, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10712, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_r = __pyx_t_14;
__pyx_t_14 = 0;
goto __pyx_L3_return;
}
}
}
10713: finally:
+10714: self._end_db_use()
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9);
if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_9);
__pyx_t_7 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_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, 10714, __pyx_L12_error)
}
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_10, __pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ErrRestore(__pyx_t_14, __pyx_t_13, __pyx_t_12);
__pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0;
__pyx_lineno = __pyx_t_7; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_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, 10714, __pyx_L1_error)
__pyx_r = __pyx_t_9;
__pyx_t_9 = 0;
goto __pyx_L0;
}
}
10715:
+10716: def query(
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_15query(PyObject *__pyx_v_self, #if CYTHON_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_14query, "\n Execute a SQL query and return a :class:`QueryResult`.\n\n Egress goes through the QuestDB Wire Protocol (QWP/WebSocket)\n ``/read/v1`` endpoint. The reader is borrowed from the same\n connection pool that hosts the ingress writers and is returned to\n the pool when the returned :class:`QueryResult` is consumed or\n closed (a poisoned connection is dropped instead). Auth / TLS\n settings apply to both directions.\n\n To run several queries on one pooled connection, lease a\n :class:`PooledReader` with :meth:`reader` instead.\n\n :param sql: SQL text to execute. Forwarded verbatim to QuestDB.\n\n :param binds: Positional bind parameters matching the ``$1``..``$N``\n placeholders in ``sql``, as a list or tuple. Always prefer binds\n over interpolating values into the SQL text \342\200\224 they take no\n escaping and keep types exact. Supported Python types and their\n QuestDB bind types:\n\n - ``None`` \342\206\222 SQL NULL (bound as a VARCHAR null)\n - ``bool`` \342\206\222 BOOLEAN\n - ``int`` \342\206\222 LONG (must fit signed 64-bit)\n - ``float`` \342\206\222 DOUBLE\n - ``str`` \342\206\222 VARCHAR\n - ``datetime.datetime`` \342\206\222 TIMESTAMP (microseconds; a naive\n value is interpreted as UTC, the same rule as everywhere else\n in the API)\n - :class:`TimestampMicros` \342\206\222 TIMESTAMP\n - :class:`TimestampNanos` \342\206\222 TIMESTAMP_NS\n - ``datetime.date`` \342\206\222 DATE\n - ``decimal.Decimal`` \342\206\222 the narrowest DECIMAL that holds it,\n with its fractional digits as the scale (up to 76 digits and\n scale 76; NaN and infinities raise :class:`ValueError`)\n - ``uuid.UUID`` \342\206\222 UUID\n\n Any other type raises :class:`TypeError` na""ming the placeholder.\n\n .. code-block:: python\n\n res = db.query(\n \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_15query = {"query", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_15query, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_14query}; static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_15query(PyObject *__pyx_v_self, #if CYTHON_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, 10716, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 10716, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 10716, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "query", 0) < (0)) __PYX_ERR(0, 10716, __pyx_L3_error) /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_14query(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self, PyObject *__pyx_v_sql, PyObject *__pyx_v_binds, int __pyx_v_reset_symbol_dict, PyObject *__pyx_v_timeout) { struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_v_reader_handle = 0; struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_cursor_handle = 0; struct questdb_db *__pyx_v_db; int64_t __pyx_v_timeout_ms; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("questdb._client.QuestDB.query", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_reader_handle); __Pyx_XDECREF((PyObject *)__pyx_v_cursor_handle); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_20 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 10716, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_15query, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB_query, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[215])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10716, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_18, __pyx_mstate_global->__pyx_tuple[63]); __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_18, __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_query, __pyx_t_18) < (0)) __PYX_ERR(0, 10716, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
10717: self,
10718: str sql,
+10719: object binds=None,
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
10720: *,
+10721: bint reset_symbol_dict=True,
__pyx_v_reset_symbol_dict = ((int)1);
}
__pyx_v_timeout = values[3];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("query", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 10716, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.QuestDB.query", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sql), (&PyUnicode_Type), 1, "sql", 1))) __PYX_ERR(0, 10718, __pyx_L1_error)
__pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_14query(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self), __pyx_v_sql, __pyx_v_binds, __pyx_v_reset_symbol_dict, __pyx_v_timeout);
/* … */
if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_reset_symbol_dict, Py_True) < (0)) __PYX_ERR(0, 10716, __pyx_L1_error)
+10722: object timeout=None):
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("query", 0, 1, 2, i); __PYX_ERR(0, 10716, __pyx_L3_error) } } } else { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 10716, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 10716, __pyx_L3_error) break; default: goto __pyx_L5_argtuple_error; } /* … */ if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None)); } __pyx_v_sql = ((PyObject*)values[0]); __pyx_v_binds = values[1]; if (values[2]) { __pyx_v_reset_symbol_dict = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_reset_symbol_dict == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 10721, __pyx_L3_error) } else { /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_timeout, Py_None) < (0)) __PYX_ERR(0, 10716, __pyx_L1_error)
10723: """
10724: Execute a SQL query and return a :class:`QueryResult`.
10725:
10726: Egress goes through the QuestDB Wire Protocol (QWP/WebSocket)
10727: ``/read/v1`` endpoint. The reader is borrowed from the same
10728: connection pool that hosts the ingress writers and is returned to
10729: the pool when the returned :class:`QueryResult` is consumed or
10730: closed (a poisoned connection is dropped instead). Auth / TLS
10731: settings apply to both directions.
10732:
10733: To run several queries on one pooled connection, lease a
10734: :class:`PooledReader` with :meth:`reader` instead.
10735:
10736: :param sql: SQL text to execute. Forwarded verbatim to QuestDB.
10737:
10738: :param binds: Positional bind parameters matching the ``$1``..``$N``
10739: placeholders in ``sql``, as a list or tuple. Always prefer binds
10740: over interpolating values into the SQL text — they take no
10741: escaping and keep types exact. Supported Python types and their
10742: QuestDB bind types:
10743:
10744: - ``None`` → SQL NULL (bound as a VARCHAR null)
10745: - ``bool`` → BOOLEAN
10746: - ``int`` → LONG (must fit signed 64-bit)
10747: - ``float`` → DOUBLE
10748: - ``str`` → VARCHAR
10749: - ``datetime.datetime`` → TIMESTAMP (microseconds; a naive
10750: value is interpreted as UTC, the same rule as everywhere else
10751: in the API)
10752: - :class:`TimestampMicros` → TIMESTAMP
10753: - :class:`TimestampNanos` → TIMESTAMP_NS
10754: - ``datetime.date`` → DATE
10755: - ``decimal.Decimal`` → the narrowest DECIMAL that holds it,
10756: with its fractional digits as the scale (up to 76 digits and
10757: scale 76; NaN and infinities raise :class:`ValueError`)
10758: - ``uuid.UUID`` → UUID
10759:
10760: Any other type raises :class:`TypeError` naming the placeholder.
10761:
10762: .. code-block:: python
10763:
10764: res = db.query(
10765: 'SELECT * FROM trades WHERE ts > $1 AND sym = $2',
10766: [datetime.datetime(2026, 7, 1), 'BTC-USD'])
10767:
10768: :param reset_symbol_dict: When ``True`` (the default), the server
10769: resets the connection's SYMBOL dictionary before this query so it
10770: never inherits symbols from earlier queries on the pooled
10771: connection (query-scoped dict), avoiding cross-query dictionary
10772: bloat in ``to_polars()`` / ``to_pandas()``. Set ``False`` to keep
10773: the dictionary warm across repeated identical queries. No-op
10774: against servers that predate the capability.
10775:
10776: :param timeout: Run this query under its own budget instead of the
10777: server-wide ``query.timeout``, overriding the connect string's
10778: ``query_timeout_ms``. An ``int`` is milliseconds; a
10779: ``datetime.timedelta`` works too, with a positive value below
10780: one millisecond rounded *up* to 1 ms. ``None`` (the default)
10781: keeps the connect string's ``query_timeout_ms``; ``0`` clears
10782: it. Requires a server advertising ``CAP_QUERY_TIMEOUT``: against
10783: an older one a non-zero timeout is refused before anything is
10784: sent, with ``QuestDBErrorCode.UnsupportedServer``, rather than
10785: silently running under the server default; the connection is
10786: untouched, so pass ``timeout=0`` or raise the server's
10787: ``query.timeout`` instead. On expiry the error carries
10788: ``QuestDBErrorCode.QueryTimeout`` and the connection stays
10789: usable — but do not retry a write on it: a statement that
10790: outlives its timeout is reported as done instead, and a DDL /
10791: INSERT / UPDATE that timed out waiting for the table writer may
10792: still be applied.
10793:
10794: :return: A :class:`QueryResult`. Materialise it via
10795: ``iter_rows()``, ``to_pandas()``, ``to_arrow()``,
10796: ``iter_arrow()``, ``iter_pandas()``, or the
10797: ``__arrow_c_stream__`` PyCapsule protocol.
10798:
10799: Sentinel-value collisions in the result frame round-trip QuestDB's
10800: contract: ``INT64_MIN`` in a LONG column, NaN in DOUBLE / FLOAT,
10801: and the sentinel values for INT / DATE / TIMESTAMP /
10802: TIMESTAMP_NS / CHAR / UUID / LONG256 / IPV4 are all interpreted
10803: as NULL by QuestDB and cannot be distinguished from legitimate
10804: occurrences of those values. GEOHASH has no such sentinel, so a
10805: NULL GEOHASH stays distinct from every value.
10806: """
10807: # Borrow a reader from the same `questdb_db` pool that hosts
10808: # the ingress writers. The pool amortises TCP+TLS handshake
10809: # cost across many `QuestDB.query()` calls: the first call
10810: # opens a connection, subsequent calls hit the idle-list
10811: # cache. See `c-questdb-client/questdb-rs/src/ingress/
10812: # column_sender/db.rs` for the pool's structure.
10813: cdef _ReaderHandle reader_handle
10814: cdef _CursorHandle cursor_handle
10815: cdef questdb_db* db
+10816: if sql is None:
__pyx_t_1 = (__pyx_v_sql == ((PyObject*)Py_None));
if (unlikely(__pyx_t_1)) {
/* … */
}
+10817: raise TypeError(
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_query_requires_a_sql_string_to_r};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10817, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 10817, __pyx_L1_error)
10818: 'query() requires a sql string; to run several queries '
10819: 'on one pooled connection, lease a PooledReader with '
10820: 'reader() instead.')
+10821: if binds is not None and not isinstance(binds, (list, tuple)):
__pyx_t_5 = (__pyx_v_binds != Py_None);
if (__pyx_t_5) {
} else {
__pyx_t_1 = __pyx_t_5;
goto __pyx_L5_bool_binop_done;
}
__pyx_t_6 = PyList_Check(__pyx_v_binds);
if (!__pyx_t_6) {
} else {
__pyx_t_5 = __pyx_t_6;
goto __pyx_L7_bool_binop_done;
}
__pyx_t_6 = PyTuple_Check(__pyx_v_binds);
__pyx_t_5 = __pyx_t_6;
__pyx_L7_bool_binop_done:;
__pyx_t_6 = (!__pyx_t_5);
__pyx_t_1 = __pyx_t_6;
__pyx_L5_bool_binop_done:;
if (unlikely(__pyx_t_1)) {
/* … */
}
+10822: raise TypeError(
__pyx_t_3 = NULL;
+10823: '"binds" must be a list or tuple of positional bind '
__pyx_t_7 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_binds_must_be_a_list_or_tuple_o, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 10823, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_4 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_7}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10822, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 10822, __pyx_L1_error)
+10824: f'parameters (or None), not {_fqn(type(binds))}')
__pyx_t_7 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_binds)))); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 10824, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10824, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+10825: cdef int64_t timeout_ms = _query_timeout_to_millis(timeout)
__pyx_t_9 = __pyx_f_7questdb_7_client__query_timeout_to_millis(__pyx_v_timeout); if (unlikely(__pyx_t_9 == ((int64_t)-2L))) __PYX_ERR(0, 10825, __pyx_L1_error)
__pyx_v_timeout_ms = __pyx_t_9;
+10826: db = self._begin_db_use('query')
__pyx_t_10 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_query, NULL); if (unlikely(__pyx_t_10 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 10826, __pyx_L1_error) __pyx_v_db = __pyx_t_10;
+10827: try:
/*try:*/ {
+10828: reader_handle = _borrow_reader_from_pool(db)
__pyx_t_2 = ((PyObject *)__pyx_f_7questdb_7_client__borrow_reader_from_pool(__pyx_v_db)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10828, __pyx_L10_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_reader_handle = ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)__pyx_t_2); __pyx_t_2 = 0;
+10829: reader_handle._oidc_auth = self._oidc_auth
__pyx_t_2 = __pyx_v_self->_oidc_auth;
__Pyx_INCREF(__pyx_t_2);
__Pyx_GIVEREF(__pyx_t_2);
__Pyx_GOTREF(__pyx_v_reader_handle->_oidc_auth);
__Pyx_DECREF_SET(__pyx_v_reader_handle->_oidc_auth, __pyx_t_2);
__pyx_t_2 = 0;
+10830: reader_handle._bearer_token_provider = self._bearer_token_provider
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_bearer_token_provider); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10830, __pyx_L10_error) __Pyx_GOTREF(__pyx_t_2); if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_reader_handle), __pyx_mstate_global->__pyx_n_u_bearer_token_provider, __pyx_t_2) < (0)) __PYX_ERR(0, 10830, __pyx_L10_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+10831: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
goto __pyx_L17_try_end;
__pyx_L12_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L14_except_error:;
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
goto __pyx_L10_error;
__pyx_L17_try_end:;
}
}
+10832: cursor_handle = _execute_query(
__pyx_t_14.__pyx_n = 3;
__pyx_t_14.reset_symbol_dict = __pyx_v_reset_symbol_dict;
__pyx_t_14.owns_reader = 1;
__pyx_t_14.timeout_ms = __pyx_v_timeout_ms;
__pyx_t_2 = ((PyObject *)__pyx_f_7questdb_7_client__execute_query(__pyx_v_reader_handle, __pyx_v_sql, __pyx_v_binds, &__pyx_t_14)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10832, __pyx_L12_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_v_cursor_handle = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_2);
__pyx_t_2 = 0;
10833: reader_handle, sql, binds, reset_symbol_dict, True,
10834: timeout_ms)
+10835: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client.QuestDB.query", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_7, &__pyx_t_3) < 0) __PYX_ERR(0, 10835, __pyx_L14_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_3);
+10836: reader_handle._close()
((struct __pyx_vtabstruct_7questdb_7_client__ReaderHandle *)__pyx_v_reader_handle->__pyx_vtab)->_close(__pyx_v_reader_handle, NULL);
+10837: raise
__Pyx_GIVEREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_7); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_7, __pyx_t_3); __pyx_t_2 = 0; __pyx_t_7 = 0; __pyx_t_3 = 0; __PYX_ERR(0, 10837, __pyx_L14_except_error) }
10838: finally:
+10839: self._end_db_use()
/*finally:*/ {
/*normal exit:*/{
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10839, __pyx_L1_error)
goto __pyx_L11;
}
__pyx_L10_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_ExceptionSwap(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
if ( unlikely(__Pyx_GetException(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_19);
__Pyx_XGOTREF(__pyx_t_20);
__pyx_t_15 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_17 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10839, __pyx_L21_error)
}
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_20);
__Pyx_ExceptionReset(__pyx_t_18, __pyx_t_19, __pyx_t_20);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ErrRestore(__pyx_t_13, __pyx_t_12, __pyx_t_11);
__pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
__pyx_lineno = __pyx_t_15; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_17;
goto __pyx_L1_error;
__pyx_L21_error:;
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_20);
__Pyx_ExceptionReset(__pyx_t_18, __pyx_t_19, __pyx_t_20);
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
goto __pyx_L1_error;
}
__pyx_L11:;
}
+10840: return QueryResult(cursor_handle)
__pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QueryResult); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10840, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_4 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_7, ((PyObject *)__pyx_v_cursor_handle)}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10840, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
10841:
+10842: def reader(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_17reader(PyObject *__pyx_v_self, #if CYTHON_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_16reader, "\n Borrow a context-managed :class:`PooledReader` lease from the pool.\n\n The read-side twin of :meth:`sender`: the lease holds one pooled\n reader connection for its lifetime and runs queries on it\n sequentially via :meth:`PooledReader.query`.\n\n .. code-block:: python\n\n with db.reader() as r:\n r1 = r.query(\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_17reader = {"reader", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_17reader, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_16reader}; static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_17reader(PyObject *__pyx_v_self, #if CYTHON_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_16reader(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_16reader(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) { struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_v_reader_handle = 0; struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_lease = 0; struct questdb_db *__pyx_v_db; int __pyx_v_db_use; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client.QuestDB.reader", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_reader_handle); __Pyx_XDECREF((PyObject *)__pyx_v_lease); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_17reader, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB_reader, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[216])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10842, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_reader, __pyx_t_18) < (0)) __PYX_ERR(0, 10842, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
10843: """
10844: Borrow a context-managed :class:`PooledReader` lease from the pool.
10845:
10846: The read-side twin of :meth:`sender`: the lease holds one pooled
10847: reader connection for its lifetime and runs queries on it
10848: sequentially via :meth:`PooledReader.query`.
10849:
10850: .. code-block:: python
10851:
10852: with db.reader() as r:
10853: r1 = r.query('SELECT * FROM t1').to_pandas()
10854: r2 = r.query(
10855: 'SELECT * FROM t2',
10856: reset_symbol_dict=False).to_pandas()
10857:
10858: The lease counts as an active use of the handle until it is
10859: closed: :meth:`QuestDB.close` waits for outstanding leases for as
10860: long as its ``timeout`` allows (a minute by default -- see
10861: :meth:`close <QuestDB.close>`), and a lease keeps working while
10862: the handle drains.
10863: """
10864: cdef _ReaderHandle reader_handle
10865: cdef PooledReader lease
10866: cdef questdb_db* db
+10867: cdef bint db_use = False
__pyx_v_db_use = 0;
+10868: db = self._begin_db_use('reader', scoped=False)
__pyx_t_2.__pyx_n = 1; __pyx_t_2.scoped = 0; __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_reader, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 10868, __pyx_L1_error) __pyx_v_db = __pyx_t_1;
+10869: db_use = True
__pyx_v_db_use = 1;
+10870: try:
/*try:*/ {
+10871: reader_handle = _borrow_reader_from_pool(db)
__pyx_t_3 = ((PyObject *)__pyx_f_7questdb_7_client__borrow_reader_from_pool(__pyx_v_db)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10871, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_reader_handle = ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)__pyx_t_3); __pyx_t_3 = 0;
+10872: reader_handle._oidc_auth = self._oidc_auth
__pyx_t_3 = __pyx_v_self->_oidc_auth;
__Pyx_INCREF(__pyx_t_3);
__Pyx_GIVEREF(__pyx_t_3);
__Pyx_GOTREF(__pyx_v_reader_handle->_oidc_auth);
__Pyx_DECREF_SET(__pyx_v_reader_handle->_oidc_auth, __pyx_t_3);
__pyx_t_3 = 0;
+10873: reader_handle._bearer_token_provider = self._bearer_token_provider
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_bearer_token_provider); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10873, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_reader_handle), __pyx_mstate_global->__pyx_n_u_bearer_token_provider, __pyx_t_3) < (0)) __PYX_ERR(0, 10873, __pyx_L4_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+10874: lease = PooledReader.__new__(PooledReader)
__pyx_t_3 = ((PyObject *)__pyx_tp_new_7questdb_7_client_PooledReader(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledReader), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10874, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_lease = ((struct __pyx_obj_7questdb_7_client_PooledReader *)__pyx_t_3); __pyx_t_3 = 0;
+10875: lease._attach(self, reader_handle)
((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_lease->__pyx_vtab)->_attach(__pyx_v_lease, __pyx_v_self, __pyx_v_reader_handle);
+10876: db_use = False
__pyx_v_db_use = 0;
+10877: return lease
{
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;
}
10878: finally:
+10879: if db_use:
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
if ( unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
{
if (__pyx_v_db_use) {
/* … */
}
}
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
__pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
__pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
goto __pyx_L1_error;
__pyx_L7_error:;
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
goto __pyx_L1_error;
}
__pyx_L3_return: {
__pyx_t_12 = __pyx_r;
__pyx_r = 0;
if (__pyx_v_db_use) {
/* … */
}
__pyx_r = __pyx_t_12;
__pyx_t_12 = 0;
goto __pyx_L0;
}
}
+10880: self._end_db_use(scoped=False)
__pyx_t_13.__pyx_n = 1;
__pyx_t_13.scoped = 0;
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, &__pyx_t_13); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10880, __pyx_L7_error)
/* … */
__pyx_t_13.__pyx_n = 1;
__pyx_t_13.scoped = 0;
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, &__pyx_t_13); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10880, __pyx_L1_error)
10881:
+10882: def server_info(self) -> ServerInfo:
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_19server_info(PyObject *__pyx_v_self, #if CYTHON_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_18server_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_19server_info = {"server_info", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_19server_info, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_18server_info}; static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_19server_info(PyObject *__pyx_v_self, #if CYTHON_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_18server_info(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_18server_info(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) { struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_v_reader_handle = 0; struct questdb_db *__pyx_v_db; PyObject *__pyx_v_info = NULL; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("questdb._client.QuestDB.server_info", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_reader_handle); __Pyx_XDECREF(__pyx_v_info); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10882, __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_ServerInfo) < (0)) __PYX_ERR(0, 10882, __pyx_L1_error) __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_19server_info, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB_server_info, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[217])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 10882, __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_18); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_server_info, __pyx_t_20) < (0)) __PYX_ERR(0, 10882, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
10883: """
10884: Return a :class:`ServerInfo` snapshot of the server's
10885: ``SERVER_INFO`` handshake: cluster role, failover epoch,
10886: negotiated capabilities, handshake wall-clock, and cluster/node
10887: identifiers.
10888:
10889: A reader is borrowed from the connection pool (opening one on
10890: first use, exactly like :meth:`query`), sampled, and returned to
10891: the pool. The snapshot describes that connection at its last
10892: handshake; a later failover is reflected only in snapshots taken
10893: after it.
10894: """
10895: cdef _ReaderHandle reader_handle
10896: cdef questdb_db* db
+10897: db = self._begin_db_use('server_info')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_server_info, NULL); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 10897, __pyx_L1_error) __pyx_v_db = __pyx_t_1;
+10898: try:
/*try:*/ {
+10899: reader_handle = _borrow_reader_from_pool(db)
__pyx_t_2 = ((PyObject *)__pyx_f_7questdb_7_client__borrow_reader_from_pool(__pyx_v_db)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10899, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_reader_handle = ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)__pyx_t_2); __pyx_t_2 = 0;
+10900: info = _snapshot_server_info(reader_handle)
__pyx_t_2 = __pyx_f_7questdb_7_client__snapshot_server_info(__pyx_v_reader_handle); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10900, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_info = __pyx_t_2; __pyx_t_2 = 0;
+10901: reader_handle._close()
((struct __pyx_vtabstruct_7questdb_7_client__ReaderHandle *)__pyx_v_reader_handle->__pyx_vtab)->_close(__pyx_v_reader_handle, NULL); }
10902: finally:
+10903: self._end_db_use()
/*finally:*/ {
/*normal exit:*/{
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10903, __pyx_L1_error)
goto __pyx_L5;
}
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10903, __pyx_L7_error)
}
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
goto __pyx_L1_error;
__pyx_L7_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
goto __pyx_L1_error;
}
__pyx_L5:;
}
+10904: return info
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_info);
__pyx_r = __pyx_v_info;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
10905:
+10906: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_25connection_events_dropped_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_25connection_events_dropped_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_25connection_events_dropped___get__(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_25connection_events_dropped___get__(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
struct questdb_db *__pyx_v_db;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.QuestDB.connection_events_dropped.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
10907: def connection_events_dropped(self) -> int:
10908: """
10909: Total connection events discarded by the listener inbox's
10910: drop-oldest policy. ``0`` when no listener is registered.
10911: """
+10912: cdef questdb_db* db = self._begin_db_use('connection_events_dropped')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_connection_events_dropped, NULL); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 10912, __pyx_L1_error) __pyx_v_db = __pyx_t_1;
+10913: try:
/*try:*/ {
+10914: return questdb_db_connection_events_dropped(db)
__pyx_t_2 = __Pyx_PyLong_From_uint64_t(questdb_db_connection_events_dropped(__pyx_v_db)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10914, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L3_return; }
10915: finally:
+10916: self._end_db_use()
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10916, __pyx_L7_error)
}
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
goto __pyx_L1_error;
__pyx_L7_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
goto __pyx_L1_error;
}
__pyx_L3_return: {
__pyx_t_11 = __pyx_r;
__pyx_r = 0;
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10916, __pyx_L1_error)
__pyx_r = __pyx_t_11;
__pyx_t_11 = 0;
goto __pyx_L0;
}
}
10917:
+10918: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_27connection_events_delivered_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_27connection_events_delivered_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_27connection_events_delivered___get__(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_27connection_events_delivered___get__(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
struct questdb_db *__pyx_v_db;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.QuestDB.connection_events_delivered.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
10919: def connection_events_delivered(self) -> int:
10920: """
10921: Total connection events delivered to the listener. ``0`` when no
10922: listener is registered.
10923: """
+10924: cdef questdb_db* db = self._begin_db_use('connection_events_delivered')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_connection_events_delivered, NULL); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 10924, __pyx_L1_error) __pyx_v_db = __pyx_t_1;
+10925: try:
/*try:*/ {
+10926: return questdb_db_connection_events_delivered(db)
__pyx_t_2 = __Pyx_PyLong_From_uint64_t(questdb_db_connection_events_delivered(__pyx_v_db)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10926, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L3_return; }
10927: finally:
+10928: self._end_db_use()
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10928, __pyx_L7_error)
}
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
goto __pyx_L1_error;
__pyx_L7_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
goto __pyx_L1_error;
}
__pyx_L3_return: {
__pyx_t_11 = __pyx_r;
__pyx_r = 0;
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10928, __pyx_L1_error)
__pyx_r = __pyx_t_11;
__pyx_t_11 = 0;
goto __pyx_L0;
}
}
10929:
+10930: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_22error_events_delivered_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_22error_events_delivered_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_22error_events_delivered___get__(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_22error_events_delivered___get__(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
struct questdb_db *__pyx_v_db;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.QuestDB.error_events_delivered.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
10931: def error_events_delivered(self) -> int:
10932: """
10933: Total server rejections delivered to the ``error_handler``
10934: (or to the default logging handler when none was registered).
10935: """
+10936: cdef questdb_db* db = self._begin_db_use('error_events_delivered')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_error_events_delivered, NULL); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 10936, __pyx_L1_error) __pyx_v_db = __pyx_t_1;
+10937: try:
/*try:*/ {
+10938: return questdb_db_rejection_events_delivered(db)
__pyx_t_2 = __Pyx_PyLong_From_uint64_t(questdb_db_rejection_events_delivered(__pyx_v_db)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10938, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L3_return; }
10939: finally:
+10940: self._end_db_use()
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10940, __pyx_L7_error)
}
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
goto __pyx_L1_error;
__pyx_L7_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
goto __pyx_L1_error;
}
__pyx_L3_return: {
__pyx_t_11 = __pyx_r;
__pyx_r = 0;
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10940, __pyx_L1_error)
__pyx_r = __pyx_t_11;
__pyx_t_11 = 0;
goto __pyx_L0;
}
}
10941:
+10942: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_20error_events_dropped_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_20error_events_dropped_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_20error_events_dropped___get__(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_20error_events_dropped___get__(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
struct questdb_db *__pyx_v_db;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.QuestDB.error_events_dropped.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
10943: def error_events_dropped(self) -> int:
10944: """
10945: Total server rejections discarded by the handler inbox's
10946: drop-oldest policy.
10947: """
+10948: cdef questdb_db* db = self._begin_db_use('error_events_dropped')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_error_events_dropped, NULL); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 10948, __pyx_L1_error) __pyx_v_db = __pyx_t_1;
+10949: try:
/*try:*/ {
+10950: return questdb_db_rejection_events_dropped(db)
__pyx_t_2 = __Pyx_PyLong_From_uint64_t(questdb_db_rejection_events_dropped(__pyx_v_db)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10950, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L3_return; }
10951: finally:
+10952: self._end_db_use()
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10952, __pyx_L7_error)
}
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
goto __pyx_L1_error;
__pyx_L7_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
goto __pyx_L1_error;
}
__pyx_L3_return: {
__pyx_t_11 = __pyx_r;
__pyx_r = 0;
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10952, __pyx_L1_error)
__pyx_r = __pyx_t_11;
__pyx_t_11 = 0;
goto __pyx_L0;
}
}
10953:
+10954: def reap_idle(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_21reap_idle(PyObject *__pyx_v_self, #if CYTHON_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_20reap_idle, "\n Manually reap idle above-pool-size connections.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_21reap_idle = {"reap_idle", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_21reap_idle, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_20reap_idle}; static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_21reap_idle(PyObject *__pyx_v_self, #if CYTHON_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_20reap_idle(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_20reap_idle(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) { size_t __pyx_v_closed; PyThreadState *__pyx_v_gs; struct questdb_db *__pyx_v_db; int __pyx_v_db_use; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("questdb._client.QuestDB.reap_idle", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_21reap_idle, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB_reap_idle, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[218])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 10954, __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_reap_idle, __pyx_t_20) < (0)) __PYX_ERR(0, 10954, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
10955: """
10956: Manually reap idle above-pool-size connections.
10957: """
10958: cdef size_t closed
+10959: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+10960: cdef questdb_db* db = NULL
__pyx_v_db = NULL;
+10961: cdef bint db_use = False
__pyx_v_db_use = 0;
+10962: db = self._begin_db_use('reap_idle')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_reap_idle, NULL); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 10962, __pyx_L1_error) __pyx_v_db = __pyx_t_1;
+10963: db_use = True
__pyx_v_db_use = 1;
+10964: try:
/*try:*/ {
+10965: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+10966: closed = questdb_db_reap_idle(db)
__pyx_v_closed = questdb_db_reap_idle(__pyx_v_db);
+10967: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+10968: return closed
__pyx_t_2 = __Pyx_PyLong_FromSize_t(__pyx_v_closed); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10968, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L3_return; }
10969: finally:
+10970: _ensure_has_gil(&gs)
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
{
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
/* … */
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+10971: if db_use:
if (__pyx_v_db_use) {
/* … */
}
}
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
goto __pyx_L1_error;
__pyx_L7_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
goto __pyx_L1_error;
}
__pyx_L3_return: {
__pyx_t_11 = __pyx_r;
__pyx_r = 0;
/* … */
if (__pyx_v_db_use) {
/* … */
}
__pyx_r = __pyx_t_11;
__pyx_t_11 = 0;
goto __pyx_L0;
}
}
+10972: self._end_db_use()
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10972, __pyx_L7_error) /* … */ ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10972, __pyx_L1_error)
10973:
+10974: cpdef close(self, object timeout=_CLOSE_TIMEOUT_DEFAULT):
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_23close(PyObject *__pyx_v_self,
#if CYTHON_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__39;
struct questdb_db *__pyx_v_db;
PyThreadState *__pyx_v_gs;
int __pyx_v_closed;
int __pyx_v_locked;
PyObject *__pyx_v_interrupt = 0;
int __pyx_v_notice;
size_t __pyx_v_notice_leases;
size_t __pyx_v_notice_calls;
PyObject *__pyx_v_lease_limit = 0;
PyObject *__pyx_v_call_limit = 0;
int __pyx_v_in_callback;
int __pyx_v_already_closing;
int __pyx_v_callback_bound;
PyObject *__pyx_v_callback_deadline = 0;
PyObject *__pyx_v_oidc_auth = NULL;
PyObject *__pyx_v_started = NULL;
PyObject *__pyx_v_lease_deadline = NULL;
PyObject *__pyx_v_call_deadline = NULL;
PyObject *__pyx_v_msg = NULL;
PyObject *__pyx_v_next_notice = NULL;
PyObject *__pyx_v_deadline = NULL;
PyObject *__pyx_v_now = NULL;
PyObject *__pyx_v_wait_s = NULL;
PyObject *__pyx_v_remaining = NULL;
PyObject *__pyx_v_exc = NULL;
PyObject *__pyx_r = NULL;
if (__pyx_optional_args) {
if (__pyx_optional_args->__pyx_n > 0) {
__pyx_v_timeout = __pyx_optional_args->timeout;
}
}
/* Check if called by wrapper */
if (unlikely(__pyx_skip_dispatch)) ;
/* Check if overridden in Python */
else {
#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
#endif
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10974, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7questdb_7_client_7QuestDB_23close)) {
__pyx_t_3 = NULL;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_4 = __pyx_t_1;
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_timeout};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10974, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
{
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_8);
__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_callback_deadline);
__Pyx_XDECREF(__pyx_v_oidc_auth);
__Pyx_XDECREF(__pyx_v_started);
__Pyx_XDECREF(__pyx_v_lease_deadline);
__Pyx_XDECREF(__pyx_v_call_deadline);
__Pyx_XDECREF(__pyx_v_msg);
__Pyx_XDECREF(__pyx_v_next_notice);
__Pyx_XDECREF(__pyx_v_deadline);
__Pyx_XDECREF(__pyx_v_now);
__Pyx_XDECREF(__pyx_v_wait_s);
__Pyx_XDECREF(__pyx_v_remaining);
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_23close(PyObject *__pyx_v_self,
#if CYTHON_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_22close, "\n Close the client and its connection pool.\n\n Closing is one-way. Once a ``close()`` proceeds -- rather\n than being refused outright, as from inside one of the\n handle\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\n A persistence-warning handler for this handle\047s OIDC provider may\n not close it: called from the handler, ``close()`` raises\n :class:`QuestDBError <questdb.QuestDBError>` with ``code`` set to\n ``QuestDBErrorCode.InvalidApiCall`` instead of waiting for the\n worker delivering the warning or for its leases. A close on any\n other thread first waits for such a handler to return, and gives\n up with the same error after two seconds without starting to\n "" close -- which is how a close that the handler delegated to\n another thread, and waits for, is released. Called from any other\n OIDC callback -- a renderer callback, or a persistence-warning\n handler of another provider -- or from a ``bearer_token_provider=``\n call, each wait above is limited to two seconds, after which it\n raises the same error and leaves the handle closing: a lease or\n call on another thread may be blocked on a token the provider\n cannot supply until the callback returns.\n ");
static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_23close = {"close", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_23close, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_22close};
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_23close(PyObject *__pyx_v_self,
#if CYTHON_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, 10974, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 10974, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "close", 0) < (0)) __PYX_ERR(0, 10974, __pyx_L3_error)
if (!values[0]) values[0] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k__39);
} else {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 10974, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
if (!values[0]) values[0] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k__39);
}
__pyx_v_timeout = values[0];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("close", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 10974, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.QuestDB.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_22close(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self), __pyx_v_timeout);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_22close(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self, PyObject *__pyx_v_timeout) {
PyObject *__pyx_r = NULL;
__pyx_t_2.__pyx_n = 1;
__pyx_t_2.timeout = __pyx_v_timeout;
__pyx_t_1 = __pyx_vtabptr_7questdb_7_client_QuestDB->close(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10974, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
{
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_20, __pyx_mstate_global->__pyx_n_u_CLOSE_TIMEOUT_DEFAULT); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 10974, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_20);
__pyx_mstate_global->__pyx_k__39 = __pyx_t_20;
__Pyx_GIVEREF(__pyx_t_20);
__pyx_t_20 = 0;
__Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_CLOSE_TIMEOUT_DEFAULT); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 10974, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_20);
{
PyObject* __pyx_temp[1] = {__pyx_t_20};
__pyx_t_18 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10974, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
}
__Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
__pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_23close, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB_close, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[219])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 10974, __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_t_18);
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_close, __pyx_t_20) < (0)) __PYX_ERR(0, 10974, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
/* … */
struct __pyx_opt_args_7questdb_7_client_7QuestDB_close {
int __pyx_n;
PyObject *timeout;
};
10975: """
10976: Close the client and its connection pool.
10977:
10978: Closing is one-way. Once a ``close()`` proceeds -- rather
10979: than being refused outright, as from inside one of the
10980: handle's own calls or callbacks -- the handle refuses new
10981: work: ``sender()``, ``reader()``, ``dataframe()``, ``query()``
10982: and the rest raise. Work already in flight drains: a call in
10983: progress runs to completion, and an outstanding lease keeps
10984: working until its holder closes it. The one exception is
10985: :meth:`PooledSender.dataframe`, which forwards to
10986: :meth:`dataframe` over a connection of its own from the pool,
10987: so a load started through a lease after ``close()`` is new work
10988: and is refused like any other. The native pool is torn down by
10989: the first ``close()`` that finds nothing using the handle, or
10990: when the handle itself is collected.
10991:
10992: Calls on the handle and on its leases are counted per OS
10993: thread. With greenlets -- gevent, eventlet, or ``greenlet``
10994: used directly -- all greenlets on one thread count as one
10995: caller, so ``close()`` is also refused while another greenlet
10996: on the same thread is suspended inside a call on the handle or
10997: on one of its leases. See :ref:`sender_threading`.
10998:
10999: ``timeout`` sets how long this call waits for that drain.
11000: Calls are the handle's own methods in progress, such as
11001: ``dataframe()`` and ``query()``; anything done through a lease
11002: counts as that lease, including a long ``lease.dataframe()``
11003: already running when ``close()`` starts.
11004:
11005: - Left out: a call in progress is waited for until it
11006: returns, and an outstanding lease for up to a minute. A long
11007: load through a lease needs a larger ``timeout``, or ``None``.
11008: - A number of seconds: calls and leases alike are waited for
11009: up to that long. ``0`` closes only if nothing is in flight.
11010: - ``None``: calls and leases alike are waited for until they
11011: are done.
11012:
11013: ``close()`` cannot interrupt a call in progress. A
11014: ``dataframe()`` reading a stream that never ends, or one
11015: waiting on the very thread that calls ``close()``, keeps it
11016: waiting until ``timeout`` runs out -- and, with no limit on
11017: calls, for ever. A lease comes back only when its holder
11018: closes it, so one held by the calling thread, or by a thread
11019: that has since finished, never will: close every lease before
11020: closing the handle.
11021:
11022: When the limit runs out, this call raises
11023: :class:`QuestDBError <questdb.QuestDBError>` with ``code`` set
11024: to ``QuestDBErrorCode.InvalidApiCall``, naming how many leases
11025: and calls are still outstanding. The handle stays closing --
11026: it never goes back to open -- and a later ``close()``, with
11027: any ``timeout``, resumes the wait and finishes the teardown
11028: once the last of them is done. Waiting for a concurrent
11029: ``close()`` on another thread to finish its teardown is
11030: limited too: a number of seconds covers that wait and the
11031: drain together; left out, that wait gets a minute of its own;
11032: ``None`` puts no limit on it.
11033:
11034: ``timeout`` covers only this waiting. The teardown then spends
11035: up to ``close_flush_timeout_millis`` (5 seconds by default)
11036: draining each sender's queue. An in-memory queue drops whatever
11037: it has not delivered by then; a disk-backed queue (``sf_dir``)
11038: keeps it for replay on restart. The drop is not reported to
11039: Python: it raises nothing and logs nothing through the
11040: ``questdb`` logger. To be sure rows have arrived, close each
11041: lease with ``close(wait=True)`` before closing the handle.
11042:
11043: While it waits, it reports what it is still waiting for
11044: through the ``questdb`` logger at ``WARNING``: every five
11045: seconds for the first minute, then once a minute.
11046:
11047: A number of seconds is a budget for the whole close,
11048: including the close a ``with`` block makes on its way out:
11049: when the most recent ``close()`` on the handle was given one,
11050: leaving the block waits only for what is left of it, and not
11051: at all once it has run out. To bound leaving a ``with`` block,
11052: call ``close(timeout=...)`` as the block's last statement.
11053: Otherwise, leaving the block closes with the limits of a
11054: ``close()`` with no arguments.
11055:
11056: Idempotent: closing a closed handle returns without doing
11057: anything, and no ``close()`` returns success unless the
11058: teardown has run -- when several race, one of them runs it and
11059: the others return once it is done.
11060:
11061: When called from inside one of this handle's own
11062: ``error_handler`` / ``connection_listener`` callbacks, it
11063: never waits -- while the callback runs, that thread delivers
11064: nothing, including whatever a wait would need. It closes
11065: immediately when nothing is using the handle; it refuses when
11066: leases or calls are outstanding (close from another thread to
11067: wait for the drain); and when a concurrent ``close()`` is
11068: already running it returns without waiting, possibly before
11069: that close finishes -- the handle only moves toward closed,
11070: never back to open.
11071:
11072: A persistence-warning handler for this handle's OIDC provider may
11073: not close it: called from the handler, ``close()`` raises
11074: :class:`QuestDBError <questdb.QuestDBError>` with ``code`` set to
11075: ``QuestDBErrorCode.InvalidApiCall`` instead of waiting for the
11076: worker delivering the warning or for its leases. A close on any
11077: other thread first waits for such a handler to return, and gives
11078: up with the same error after two seconds without starting to
11079: close -- which is how a close that the handler delegated to
11080: another thread, and waits for, is released. Called from any other
11081: OIDC callback -- a renderer callback, or a persistence-warning
11082: handler of another provider -- or from a ``bearer_token_provider=``
11083: call, each wait above is limited to two seconds, after which it
11084: raises the same error and leaves the handle closing: a lease or
11085: call on another thread may be blocked on a token the provider
11086: cannot supply until the callback returns.
11087: """
+11088: cdef questdb_db* db = NULL
__pyx_v_db = NULL;
+11089: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+11090: cdef bint closed = False
__pyx_v_closed = 0;
+11091: cdef bint locked = False
__pyx_v_locked = 0;
+11092: cdef object interrupt = None
__Pyx_INCREF(Py_None);
__pyx_v_interrupt = Py_None;
+11093: cdef bint notice = False
__pyx_v_notice = 0;
+11094: cdef size_t notice_leases = 0
__pyx_v_notice_leases = 0;
+11095: cdef size_t notice_calls = 0
__pyx_v_notice_calls = 0;
11096: cdef object lease_limit
11097: cdef object call_limit
+11098: cdef bint in_callback = False
__pyx_v_in_callback = 0;
+11099: cdef bint already_closing = False
__pyx_v_already_closing = 0;
+11100: cdef bint callback_bound = False
__pyx_v_callback_bound = 0;
+11101: cdef object callback_deadline = None
__Pyx_INCREF(Py_None);
__pyx_v_callback_deadline = Py_None;
11102: # Read before anything is published, so a bad argument changes
11103: # nothing for any other thread.
+11104: if timeout is _CLOSE_TIMEOUT_DEFAULT:
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_CLOSE_TIMEOUT_DEFAULT); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11104, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = (__pyx_v_timeout == __pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_6) { /* … */ goto __pyx_L3; }
+11105: lease_limit = _CLOSE_LEASE_WAIT_LIMIT_S
__pyx_t_1 = PyFloat_FromDouble(__pyx_v_7questdb_7_client__CLOSE_LEASE_WAIT_LIMIT_S); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11105, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_lease_limit = __pyx_t_1; __pyx_t_1 = 0;
+11106: call_limit = None
__Pyx_INCREF(Py_None);
__pyx_v_call_limit = Py_None;
+11107: elif timeout is None:
__pyx_t_6 = (__pyx_v_timeout == Py_None);
if (__pyx_t_6) {
/* … */
goto __pyx_L3;
}
+11108: lease_limit = None
__Pyx_INCREF(Py_None);
__pyx_v_lease_limit = Py_None;
+11109: call_limit = None
__Pyx_INCREF(Py_None);
__pyx_v_call_limit = Py_None;
11110: else:
+11111: lease_limit = _close_timeout_seconds(timeout)
/*else*/ {
__pyx_t_7 = __pyx_f_7questdb_7_client__close_timeout_seconds(__pyx_v_timeout); if (unlikely(__PYX_CHECK_FLOAT_EXCEPTION(__pyx_t_7, ((double)(-1.0))))) __PYX_ERR(0, 11111, __pyx_L1_error)
__pyx_t_1 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11111, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_v_lease_limit = __pyx_t_1;
__pyx_t_1 = 0;
+11112: call_limit = lease_limit
__Pyx_INCREF(__pyx_v_lease_limit);
__pyx_v_call_limit = __pyx_v_lease_limit;
}
__pyx_L3:;
+11113: oidc_auth = self._oidc_auth
__pyx_t_1 = __pyx_v_self->_oidc_auth;
__Pyx_INCREF(__pyx_t_1);
__pyx_v_oidc_auth = __pyx_t_1;
__pyx_t_1 = 0;
+11114: if _oidc_diagnostic_on_this_thread(oidc_auth):
__pyx_t_6 = __pyx_f_7questdb_7_client__oidc_diagnostic_on_this_thread(__pyx_v_oidc_auth); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 11114, __pyx_L1_error)
if (unlikely(__pyx_t_6)) {
/* … */
}
+11115: raise QuestDBError(
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11115, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+11116: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11116, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11116, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_8, __pyx_mstate_global->__pyx_kp_u_QuestDB_close_cannot_run_inside}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11115, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11115, __pyx_L1_error)
11117: 'QuestDB.close() cannot run inside its OIDC provider\'s '
11118: 'persistence-warning callback. Return from the callback '
11119: 'before closing the pool.')
11120: # Any other OIDC callback on this thread -- a renderer event, or
11121: # another provider's persistence warning -- or a bearer token-provider
11122: # call may be what a lease or call on another thread is waiting for:
11123: # its ACK can need a token the provider cannot supply until the
11124: # callback returns. Every wait below is bounded then, as
11125: # `PooledSender._lock_enter()` bounds a wait for the lease.
+11126: in_callback = _in_bounded_wait_callback()
__pyx_t_6 = __pyx_f_7questdb_7_client__in_bounded_wait_callback(); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 11126, __pyx_L1_error)
__pyx_v_in_callback = __pyx_t_6;
11127: # Wait outside `_state_cond`, and before closing starts: the
11128: # callback's thread may need the lock to release a pool use before
11129: # the callback can return, and giving up here leaves the handle as
11130: # it was.
+11131: if not _oidc_wait_diagnostics_drained(
__pyx_t_6 = __pyx_f_7questdb_7_client__oidc_wait_diagnostics_drained(__pyx_v_oidc_auth, __pyx_v_7questdb_7_client__OIDC_CLOSE_DIAGNOSTIC_WAIT_SECS); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 11131, __pyx_L1_error)
__pyx_t_9 = (!__pyx_t_6);
if (unlikely(__pyx_t_9)) {
/* … */
}
11132: oidc_auth, _OIDC_CLOSE_DIAGNOSTIC_WAIT_SECS):
+11133: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11133, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
+11134: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11134, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11134, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_8))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_8); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_8, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_3, __pyx_mstate_global->__pyx_kp_u_QuestDB_close_gave_up_waiting_fo}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11133, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11133, __pyx_L1_error)
11135: 'QuestDB.close() gave up waiting for a '
11136: 'persistence-warning callback of its OIDC provider to '
11137: 'return on another thread. If that callback is waiting '
11138: 'for this close, return from it first; otherwise retry '
11139: 'the close.')
11140: # A lease is returned only by the code holding it, and a lease
11141: # about to be closed looks exactly like one nobody will ever
11142: # touch again; a call runs until its work is done, and nothing
11143: # here can interrupt it. Whether either will finish is
11144: # something only the caller can know, so the caller sets the
11145: # limits: one deadline for leases and one for calls, either of
11146: # which may be absent. Each applies only while something of
11147: # its kind is outstanding, and neither count grows once the
11148: # handle is closing. Running out leaves the handle closing,
11149: # and a later close() resumes the wait.
+11150: started = time.monotonic()
__pyx_t_8 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11150, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11150, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_8); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11150, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_started = __pyx_t_1; __pyx_t_1 = 0;
11151: lease_deadline = (
+11152: None if lease_limit is None else started + lease_limit)
__pyx_t_9 = (__pyx_v_lease_limit == Py_None);
if (__pyx_t_9) {
__Pyx_INCREF(Py_None);
__pyx_t_1 = Py_None;
} else {
__pyx_t_4 = __Pyx_PyNumber_Add_object_object(__pyx_v_started, __pyx_v_lease_limit); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11152, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_1 = __pyx_t_4;
__pyx_t_4 = 0;
}
__pyx_v_lease_deadline = __pyx_t_1;
__pyx_t_1 = 0;
11153: call_deadline = (
+11154: None if call_limit is None else started + call_limit)
__pyx_t_9 = (__pyx_v_call_limit == Py_None);
if (__pyx_t_9) {
__Pyx_INCREF(Py_None);
__pyx_t_1 = Py_None;
} else {
__pyx_t_4 = __Pyx_PyNumber_Add_object_object(__pyx_v_started, __pyx_v_call_limit); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11154, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_1 = __pyx_t_4;
__pyx_t_4 = 0;
}
__pyx_v_call_deadline = __pyx_t_1;
__pyx_t_1 = 0;
+11155: if in_callback:
if (__pyx_v_in_callback) {
/* … */
}
+11156: callback_deadline = started + _OIDC_CLOSE_DIAGNOSTIC_WAIT_SECS
__pyx_t_1 = PyFloat_FromDouble(__pyx_v_7questdb_7_client__OIDC_CLOSE_DIAGNOSTIC_WAIT_SECS); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11156, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyNumber_Add_object_float(__pyx_v_started, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11156, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_callback_deadline, __pyx_t_4); __pyx_t_4 = 0;
11157: # The lock is taken and released through `acquire` and `release`,
11158: # the RLock's own C methods, here and at every other place
11159: # `close()` and `__exit__` hold it. `Condition.__enter__` and
11160: # `__exit__` are written in Python, and a pending Ctrl-C is
11161: # raised at the start of the first Python function called after
11162: # it arrives. Raised on entry to `Condition.__exit__`, before
11163: # that releases the lock, it would leave this thread holding it,
11164: # and every other thread using the handle would block on it for
11165: # good. A blocked `acquire` can itself be interrupted; it then
11166: # raises without taking the lock, before the `try` it guards.
+11167: self._state_cond.acquire()
__pyx_t_1 = __pyx_v_self->_state_cond; __Pyx_INCREF(__pyx_t_1); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11167, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+11168: try:
/*try:*/ {
11169: # A close from inside one of this handle's own calls --
11170: # `dataframe()` reading `attrs`, a cell conversion, an
11171: # Arrow producer, a lease's own `row()` -- would wait on
11172: # the very frame that has to finish first, sit out the
11173: # whole bound, and leave the handle closing under its own
11174: # caller. Refused before `_closing` is published, so a
11175: # refused close changes nothing for any other thread.
+11176: if self._scoped_call_depth() != 0:
__pyx_t_10 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_scoped_call_depth(__pyx_v_self); if (unlikely(__pyx_t_10 == ((uintptr_t)((uintptr_t)-1L)) && PyErr_Occurred())) __PYX_ERR(0, 11176, __pyx_L8_error) __pyx_t_9 = (__pyx_t_10 != 0); if (__pyx_t_9) { /* … */ }
+11177: msg = ("close() can't be called from inside a call on "
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_close_can_t_be_called_from_insid);
__pyx_v_msg = __pyx_mstate_global->__pyx_kp_u_close_can_t_be_called_from_insid;
11178: 'this QuestDB handle. It would wait for that '
11179: 'call to finish, which cannot happen while the '
11180: 'call is waiting for close(). Close it after '
11181: 'the call returns.')
11182: # Only greenlets let another caller be suspended inside
11183: # a call on this OS thread, so only a process that has
11184: # loaded them is told about that case. gevent and
11185: # eventlet both run on `greenlet`.
+11186: if 'greenlet' in sys.modules:
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_sys); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11186, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_modules); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11186, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_9 = (__Pyx_PySequence_ContainsTF(__pyx_mstate_global->__pyx_n_u_greenlet, __pyx_t_1, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 11186, __pyx_L8_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_9) { /* … */ }
+11187: msg += (' With greenlets, every greenlet on an OS '
__pyx_t_1 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_v_msg, __pyx_mstate_global->__pyx_kp_u_With_greenlets_every_greenlet_o); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11187, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_msg, ((PyObject*)__pyx_t_1)); __pyx_t_1 = 0;
11188: 'thread counts as the same caller, so this '
11189: 'is also refused while another greenlet on '
11190: 'this thread is suspended inside a call on '
11191: 'the handle or on one of its leases.')
+11192: raise QuestDBError(QuestDBErrorCode.InvalidApiCall, msg)
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11192, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11192, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11192, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_8))) {
__pyx_t_4 = PyMethod_GET_SELF(__pyx_t_8);
assert(__pyx_t_4);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
__Pyx_INCREF(__pyx_t_4);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_2, __pyx_v_msg};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11192, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 11192, __pyx_L8_error)
11193: # A caller dispatching for this handle can wait on
11194: # nothing: while its callback frame is out, this thread
11195: # delivers no events and the native layer holds a borrow
11196: # on it, so anything the drain needs from this thread can
11197: # never happen. Refused before `_closing` is published,
11198: # like the depth refusal above, so a refused close changes
11199: # nothing for any other thread. With nothing outstanding
11200: # the close proceeds: there is no wait to refuse.
+11201: if (self._db != NULL
__pyx_t_6 = (__pyx_v_self->_db != NULL);
if (__pyx_t_6) {
} else {
__pyx_t_9 = __pyx_t_6;
goto __pyx_L13_bool_binop_done;
}
/* … */
if (unlikely(__pyx_t_9)) {
/* … */
}
+11202: and self._lease_uses + self._call_uses != 0
__pyx_t_6 = ((__pyx_v_self->_lease_uses + __pyx_v_self->_call_uses) != 0);
if (__pyx_t_6) {
} else {
__pyx_t_9 = __pyx_t_6;
goto __pyx_L13_bool_binop_done;
}
+11203: and _dispatching_for(self._thread_owner_token)):
__pyx_t_1 = __pyx_v_self->_thread_owner_token;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_6 = __pyx_f_7questdb_7_client__dispatching_for(__pyx_t_1);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_9 = __pyx_t_6;
__pyx_L13_bool_binop_done:;
+11204: raise QuestDBError(
__pyx_t_8 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11204, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_2);
+11205: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11205, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11205, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_8); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_3, __pyx_mstate_global->__pyx_kp_u_close_can_t_wait_for_outstanding}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11204, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11204, __pyx_L8_error)
11206: "close() can't wait for outstanding leases or "
11207: "calls from inside this handle's own "
11208: 'error_handler or connection_listener callback: '
11209: 'while the callback runs, this thread delivers '
11210: 'nothing, including whatever the wait needs. '
11211: 'Call close() from another thread.')
11212: # One-way from here: `_closing` is never cleared, so every
11213: # refusal it causes stays true, and the use counts only
11214: # move down -- `_begin_db_use` takes no new work once it
11215: # is set.
+11216: already_closing = self._closing
__pyx_t_9 = __pyx_v_self->_closing;
__pyx_v_already_closing = __pyx_t_9;
+11217: self._closing = True
__pyx_v_self->_closing = 1;
11218: # A number of seconds is a budget for the whole close: the
11219: # close a `with` block makes on its way out waits only for
11220: # what is left of it (see `__exit__`). Only a number sets
11221: # `call_deadline`, so the default and `None` clear the
11222: # budget, and the way out closes with the default limits.
+11223: self._close_deadline = call_deadline
__Pyx_INCREF(__pyx_v_call_deadline); __Pyx_GIVEREF(__pyx_v_call_deadline); __Pyx_GOTREF(__pyx_v_self->_close_deadline); __Pyx_DECREF_SET(__pyx_v_self->_close_deadline, __pyx_v_call_deadline); }
11224: finally:
+11225: self._state_cond.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_2 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11225, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L9;
}
__pyx_L8_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_19);
__pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
{
__pyx_t_2 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11225, __pyx_L17_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
}
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
__pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
goto __pyx_L1_error;
__pyx_L17_error:;
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
goto __pyx_L1_error;
}
__pyx_L9:;
}
11226: # Each wait below holds the lock only to read state and to
11227: # wait on it, and emits its progress notice with the lock
11228: # released. A notice runs the caller's logging handlers, which
11229: # are free to block or to reach this very handle from another
11230: # thread -- a handler that ingests its log lines into QuestDB
11231: # does both. While one runs, every lease return, call exit and
11232: # refusal still goes through the lock, so the drain being
11233: # reported on keeps moving.
+11234: next_notice = started + 5.0
__pyx_t_1 = __Pyx_PyFloat_AddObjC(__pyx_v_started, __pyx_mstate_global->__pyx_float_5_0, 5.0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11234, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_next_notice = __pyx_t_1; __pyx_t_1 = 0;
+11235: while True:
while (1) {
+11236: notice = False
__pyx_v_notice = 0;
11237: # Held through `acquire` and `release`, as above. Here it
11238: # also keeps Python code out of the step from claiming the
11239: # pointer to the native teardown: after the claim, the next
11240: # code to run is the `release` below and then the `try`
11241: # around `questdb_db_close`, so a Ctrl-C arriving in between
11242: # stays pending until the teardown's own `finally`, which
11243: # records the close first. A second Ctrl-C landing inside
11244: # `Condition.wait`'s own re-acquire of the lock can still
11245: # leave the lock in a bad state; nothing has been claimed
11246: # while this thread waits, so no teardown is skipped.
+11247: self._state_cond.acquire()
__pyx_t_2 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11247, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+11248: try:
/*try:*/ {
+11249: if self._db == NULL:
__pyx_t_9 = (__pyx_v_self->_db == NULL);
if (__pyx_t_9) {
/* … */
}
+11250: break
goto __pyx_L21_break;
+11251: if self._lease_uses + self._call_uses == 0:
__pyx_t_9 = ((__pyx_v_self->_lease_uses + __pyx_v_self->_call_uses) == 0);
if (__pyx_t_9) {
/* … */
}
11252: # Nothing is using the handle. The counts are read
11253: # and the pointer claimed under one hold of the
11254: # lock, which picks exactly one close() to run the
11255: # native teardown, and the pointer stays published
11256: # up to this very point -- so every borrower's
11257: # copy of it was valid for as long as the borrower
11258: # held a use.
+11259: db = self._db
__pyx_t_20 = __pyx_v_self->_db;
__pyx_v_db = __pyx_t_20;
+11260: self._db = NULL
__pyx_v_self->_db = NULL;
+11261: self._close_running = True
__pyx_v_self->_close_running = 1;
+11262: break
goto __pyx_L21_break;
+11263: deadline = None
__Pyx_INCREF(Py_None); __Pyx_XDECREF_SET(__pyx_v_deadline, Py_None);
+11264: if self._lease_uses != 0 and lease_deadline is not None:
__pyx_t_6 = (__pyx_v_self->_lease_uses != 0);
if (__pyx_t_6) {
} else {
__pyx_t_9 = __pyx_t_6;
goto __pyx_L28_bool_binop_done;
}
__pyx_t_6 = (__pyx_v_lease_deadline != Py_None);
__pyx_t_9 = __pyx_t_6;
__pyx_L28_bool_binop_done:;
if (__pyx_t_9) {
/* … */
}
+11265: deadline = lease_deadline
__Pyx_INCREF(__pyx_v_lease_deadline); __Pyx_DECREF_SET(__pyx_v_deadline, __pyx_v_lease_deadline);
+11266: if (self._call_uses != 0 and call_deadline is not None
__pyx_t_6 = (__pyx_v_self->_call_uses != 0);
if (__pyx_t_6) {
} else {
__pyx_t_9 = __pyx_t_6;
goto __pyx_L31_bool_binop_done;
}
/* … */
__pyx_t_6 = (__pyx_v_call_deadline != Py_None);
if (__pyx_t_6) {
} else {
__pyx_t_9 = __pyx_t_6;
goto __pyx_L31_bool_binop_done;
}
/* … */
if (__pyx_t_9) {
/* … */
}
+11267: and (deadline is None or call_deadline < deadline)):
__pyx_t_6 = (__pyx_v_deadline == Py_None);
if (!__pyx_t_6) {
} else {
__pyx_t_9 = __pyx_t_6;
goto __pyx_L31_bool_binop_done;
}
__pyx_t_6 = __Pyx_PyObject_CompareBoolLt_object_object(__pyx_v_call_deadline, __pyx_v_deadline, Py_LT); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 11267, __pyx_L23_error)
__pyx_t_9 = __pyx_t_6;
__pyx_L31_bool_binop_done:;
+11268: deadline = call_deadline
__Pyx_INCREF(__pyx_v_call_deadline); __Pyx_DECREF_SET(__pyx_v_deadline, __pyx_v_call_deadline);
+11269: now = time.monotonic()
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11269, __pyx_L23_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11269, __pyx_L23_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_8))) {
__pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8);
assert(__pyx_t_2);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
__Pyx_INCREF(__pyx_t_2);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11269, __pyx_L23_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_XDECREF_SET(__pyx_v_now, __pyx_t_1);
__pyx_t_1 = 0;
+11270: if deadline is not None and now >= deadline:
__pyx_t_6 = (__pyx_v_deadline != Py_None);
if (__pyx_t_6) {
} else {
__pyx_t_9 = __pyx_t_6;
goto __pyx_L36_bool_binop_done;
}
__pyx_t_6 = __Pyx_PyObject_CompareBoolGe_object_object(__pyx_v_now, __pyx_v_deadline, Py_GE); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 11270, __pyx_L23_error)
__pyx_t_9 = __pyx_t_6;
__pyx_L36_bool_binop_done:;
if (unlikely(__pyx_t_9)) {
/* … */
}
+11271: raise QuestDBError(
__pyx_t_8 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11271, __pyx_L23_error)
__Pyx_GOTREF(__pyx_t_2);
+11272: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11272, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11272, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+11273: _close_gave_up_message(
__pyx_t_3 = __pyx_f_7questdb_7_client__close_gave_up_message(__pyx_t_7, __pyx_v_self->_lease_uses, __pyx_v_self->_call_uses); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11273, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_8); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_4, __pyx_t_3}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11271, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11271, __pyx_L23_error)
+11274: deadline - started,
__pyx_t_3 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_deadline, __pyx_v_started); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11274, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 11274, __pyx_L23_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
11275: self._lease_uses,
11276: self._call_uses))
+11277: if callback_deadline is not None:
__pyx_t_9 = (__pyx_v_callback_deadline != Py_None);
if (__pyx_t_9) {
/* … */
}
+11278: if now >= callback_deadline:
__pyx_t_9 = __Pyx_PyObject_CompareBoolGe_object_object(__pyx_v_now, __pyx_v_callback_deadline, Py_GE); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 11278, __pyx_L23_error) if (unlikely(__pyx_t_9)) { /* … */ }
+11279: raise _callback_wait_refused(
__pyx_t_2 = __pyx_f_7questdb_7_client__callback_wait_refused(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11279, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 11279, __pyx_L23_error)
+11280: _close_callback_gave_up_message(
__pyx_t_1 = __pyx_f_7questdb_7_client__close_callback_gave_up_message(__pyx_v_already_closing, __pyx_v_self->_lease_uses, __pyx_v_self->_call_uses); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11280, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_1);
11281: already_closing,
11282: self._lease_uses,
11283: self._call_uses))
+11284: if deadline is None or callback_deadline < deadline:
__pyx_t_6 = (__pyx_v_deadline == Py_None);
if (!__pyx_t_6) {
} else {
__pyx_t_9 = __pyx_t_6;
goto __pyx_L41_bool_binop_done;
}
__pyx_t_6 = __Pyx_PyObject_CompareBoolLt_object_object(__pyx_v_callback_deadline, __pyx_v_deadline, Py_LT); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 11284, __pyx_L23_error)
__pyx_t_9 = __pyx_t_6;
__pyx_L41_bool_binop_done:;
if (__pyx_t_9) {
/* … */
}
+11285: deadline = callback_deadline
__Pyx_INCREF(__pyx_v_callback_deadline); __Pyx_DECREF_SET(__pyx_v_deadline, __pyx_v_callback_deadline);
11286: # Woken at whichever is sooner, the next notice or the
11287: # limit, so a limit holds whatever it is set to rather
11288: # than only at the notice cadence. A wait that runs out
11289: # with work still outstanding is reported either way.
+11290: wait_s = next_notice - now
__pyx_t_2 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_next_notice, __pyx_v_now); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11290, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_XDECREF_SET(__pyx_v_wait_s, __pyx_t_2); __pyx_t_2 = 0;
+11291: if deadline is not None and deadline - now < wait_s:
__pyx_t_6 = (__pyx_v_deadline != Py_None);
if (__pyx_t_6) {
} else {
__pyx_t_9 = __pyx_t_6;
goto __pyx_L44_bool_binop_done;
}
__pyx_t_2 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_deadline, __pyx_v_now); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11291, __pyx_L23_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_6 = __Pyx_PyObject_CompareBoolLt_object_object(__pyx_t_2, __pyx_v_wait_s, Py_LT); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 11291, __pyx_L23_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_9 = __pyx_t_6;
__pyx_L44_bool_binop_done:;
if (__pyx_t_9) {
/* … */
}
+11292: wait_s = deadline - now
__pyx_t_2 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_deadline, __pyx_v_now); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11292, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF_SET(__pyx_v_wait_s, __pyx_t_2); __pyx_t_2 = 0;
+11293: if (not self._state_cond.wait(timeout=max(wait_s, 0.0))
__pyx_t_1 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_7 = 0.0;
__Pyx_INCREF(__pyx_v_wait_s);
__pyx_t_3 = __pyx_v_wait_s;
__pyx_t_8 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11293, __pyx_L23_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_6 = __Pyx_PyObject_CompareBoolGt_float_object(__pyx_t_8, __pyx_t_3, Py_GT); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 11293, __pyx_L23_error)
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (__pyx_t_6) {
__pyx_t_8 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11293, __pyx_L23_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_4 = __pyx_t_8;
__pyx_t_8 = 0;
} else {
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = __pyx_t_3;
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
#if CYTHON_VECTORCALL
#endif
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_4};
#if CYTHON_VECTORCALL
__pyx_t_3 = __pyx_mstate_global->__pyx_tuple[47];
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11293, __pyx_L23_error)
__Pyx_INCREF(__pyx_t_3);
#else
{
PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_timeout};
__pyx_t_3 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11293, __pyx_L23_error)
__Pyx_GOTREF(__pyx_t_3);
}
#endif
__pyx_t_2 = __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_3);
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11293, __pyx_L23_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 11293, __pyx_L23_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_21 = (!__pyx_t_6);
if (__pyx_t_21) {
} else {
__pyx_t_9 = __pyx_t_21;
goto __pyx_L47_bool_binop_done;
}
/* … */
if (__pyx_t_9) {
/* … */
}
}
/* … */
{
PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_timeout};
__pyx_mstate_global->__pyx_tuple[47] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[47])) __PYX_ERR(0, 11293, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[47]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[47]);
11294: and (self._lease_uses
+11295: + self._call_uses) != 0):
__pyx_t_21 = ((__pyx_v_self->_lease_uses + __pyx_v_self->_call_uses) != 0);
__pyx_t_9 = __pyx_t_21;
__pyx_L47_bool_binop_done:;
+11296: notice = True
__pyx_v_notice = 1;
+11297: notice_leases = self._lease_uses
__pyx_t_5 = __pyx_v_self->_lease_uses;
__pyx_v_notice_leases = __pyx_t_5;
+11298: notice_calls = self._call_uses
__pyx_t_5 = __pyx_v_self->_call_uses;
__pyx_v_notice_calls = __pyx_t_5;
11299: # Every five seconds for the first minute, then
11300: # once a minute: a wait for a long load would
11301: # otherwise log a line every five seconds for as
11302: # long as the load runs.
+11303: now = time.monotonic()
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11303, __pyx_L23_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11303, __pyx_L23_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_1))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11303, __pyx_L23_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF_SET(__pyx_v_now, __pyx_t_2);
__pyx_t_2 = 0;
+11304: next_notice = now + (
__pyx_t_1 = __Pyx_PyNumber_Add_object_float(__pyx_v_now, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11304, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_next_notice, __pyx_t_1); __pyx_t_1 = 0;
+11305: 5.0 if now - started < 60.0 else 60.0)
__pyx_t_1 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_now, __pyx_v_started); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11305, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_9 = __Pyx_PyObject_CompareBoolLt_object_float(__pyx_t_1, __pyx_mstate_global->__pyx_float_60_0, Py_LT); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 11305, __pyx_L23_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_9) { __Pyx_INCREF(__pyx_mstate_global->__pyx_float_5_0); __pyx_t_2 = __pyx_mstate_global->__pyx_float_5_0; } else { __Pyx_INCREF(__pyx_mstate_global->__pyx_float_60_0); __pyx_t_2 = __pyx_mstate_global->__pyx_float_60_0; }
11306: finally:
+11307: self._state_cond.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_2 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11307, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L24;
}
__pyx_L23_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_15, &__pyx_t_14);
if ( unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_19);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_14);
__pyx_t_12 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
{
__pyx_t_2 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11307, __pyx_L52_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 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_L52_error:;
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_ExceptionReset(__pyx_t_16, __pyx_t_15, __pyx_t_14);
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0;
goto __pyx_L1_error;
}
__pyx_L21_break: {
__pyx_t_2 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11307, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L19_break;
}
__pyx_L24:;
}
+11308: if notice:
if (__pyx_v_notice) {
/* … */
}
}
__pyx_L19_break:;
11309: # Logged rather than warned, like every other
11310: # notice this client emits from a place the
11311: # caller did not ask for one: a warning turns
11312: # into an exception under `-W error`, which
11313: # would end the wait at the first notice and
11314: # hand back the wrong exception type.
+11315: logging.getLogger('questdb').warning(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11315, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_22 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 11315, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_22);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_22))) {
__pyx_t_4 = PyMethod_GET_SELF(__pyx_t_22);
assert(__pyx_t_4);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_22);
__Pyx_INCREF(__pyx_t_4);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_22, __pyx__function);
__pyx_t_5 = 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_22, __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_22); __pyx_t_22 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11315, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__pyx_t_2 = __pyx_t_3;
__Pyx_INCREF(__pyx_t_2);
11316: 'QuestDB.close() is waiting for %d '
11317: 'outstanding lease(s) and %d in-progress '
11318: 'call(s) to finish.',
+11319: notice_leases,
__pyx_t_22 = __Pyx_PyLong_FromSize_t(__pyx_v_notice_leases); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 11319, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_22);
+11320: notice_calls)
__pyx_t_4 = __Pyx_PyLong_FromSize_t(__pyx_v_notice_calls); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11320, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = 0; { PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_QuestDB_close_is_waiting_for_d_o, __pyx_t_22, __pyx_t_4}; __pyx_t_1 = __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_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11315, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+11321: if db == NULL:
__pyx_t_9 = (__pyx_v_db == NULL);
if (__pyx_t_9) {
/* … */
}
11322: # Another close() claimed the pointer, or the handle
11323: # never opened. A caller dispatching for this handle
11324: # must not wait for the teardown to finish: the
11325: # in-flight closer joins this very thread. Returning
11326: # early is safe because closing cannot be undone --
11327: # the handle only moves toward closed.
+11328: if _dispatching_for(self._thread_owner_token):
__pyx_t_1 = __pyx_v_self->_thread_owner_token;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_9 = __pyx_f_7questdb_7_client__dispatching_for(__pyx_t_1);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (__pyx_t_9) {
/* … */
}
+11329: return
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
11330: # A close() of this handle from a finalizer that a
11331: # garbage-collection pass runs on this thread while this
11332: # thread holds the pointer (after taking it, before
11333: # publishing the close) waits below for its own close
11334: # until its limit runs out, then raises. This is
11335: # deliberately left alone. It needs an unreachable object
11336: # whose finalizer closes this very handle, collected in a
11337: # window of a few Python operations, and it loses nothing.
11338: # The ways out are poor: returning early can report
11339: # success before the teardown has run, and a refusal needs
11340: # the tearing-down thread tracked for a case that
11341: # practically never happens.
11342: #
11343: # A number of seconds is one budget for the whole call, so
11344: # this wait gets only what the drain left of it and ends
11345: # at `call_deadline`. The default and `None` set no
11346: # budget: this wait gets a bound of its own, starting
11347: # when it does -- a minute by default, none for None.
+11348: if call_deadline is not None:
__pyx_t_9 = (__pyx_v_call_deadline != Py_None);
if (__pyx_t_9) {
/* … */
goto __pyx_L56;
}
+11349: deadline = call_deadline
__Pyx_INCREF(__pyx_v_call_deadline); __Pyx_XDECREF_SET(__pyx_v_deadline, __pyx_v_call_deadline);
11350: else:
+11351: deadline = (None if lease_limit is None
/*else*/ {
__pyx_t_9 = (__pyx_v_lease_limit == Py_None);
if (__pyx_t_9) {
__Pyx_INCREF(Py_None);
__pyx_t_1 = Py_None;
} else {
+11352: else time.monotonic() + lease_limit)
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 11352, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_22);
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11352, __pyx_L1_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_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[2] = {__pyx_t_4, 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_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11352, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__pyx_t_2 = __Pyx_PyNumber_Add_object_object(__pyx_t_3, __pyx_v_lease_limit); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11352, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_1 = __pyx_t_2;
__pyx_t_2 = 0;
}
__Pyx_XDECREF_SET(__pyx_v_deadline, __pyx_t_1);
__pyx_t_1 = 0;
}
__pyx_L56:;
+11353: if callback_deadline is not None and (
__pyx_t_21 = (__pyx_v_callback_deadline != Py_None);
if (__pyx_t_21) {
} else {
__pyx_t_9 = __pyx_t_21;
goto __pyx_L58_bool_binop_done;
}
/* … */
if (__pyx_t_9) {
/* … */
}
+11354: deadline is None or callback_deadline < deadline):
__pyx_t_21 = (__pyx_v_deadline == Py_None);
if (!__pyx_t_21) {
} else {
__pyx_t_9 = __pyx_t_21;
goto __pyx_L58_bool_binop_done;
}
__pyx_t_21 = __Pyx_PyObject_CompareBoolLt_object_object(__pyx_v_callback_deadline, __pyx_v_deadline, Py_LT); if (unlikely((__pyx_t_21 < 0))) __PYX_ERR(0, 11354, __pyx_L1_error)
__pyx_t_9 = __pyx_t_21;
__pyx_L58_bool_binop_done:;
+11355: deadline = callback_deadline
__Pyx_INCREF(__pyx_v_callback_deadline); __Pyx_DECREF_SET(__pyx_v_deadline, __pyx_v_callback_deadline);
+11356: callback_bound = True
__pyx_v_callback_bound = 1;
+11357: while True:
while (1) {
+11358: notice = False
__pyx_v_notice = 0;
11359: # Held through `acquire` and `release`, as above.
+11360: self._state_cond.acquire()
__pyx_t_2 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11360, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+11361: try:
/*try:*/ {
+11362: if not self._close_running:
__pyx_t_9 = (!__pyx_v_self->_close_running);
if (__pyx_t_9) {
/* … */
}
11363: # `_close_running` clearing says the close()
11364: # that claimed the pointer has finished;
11365: # `self._db` says what it did. After a
11366: # teardown the pointer stays NULL for good,
11367: # so a NULL pointer here is a close that ran.
11368: # A give-up hands the pointer back for a
11369: # later close() to claim, and returning
11370: # normally then would report a close that
11371: # did not take place.
+11372: if self._db == NULL:
__pyx_t_9 = (__pyx_v_self->_db == NULL);
if (__pyx_t_9) {
/* … */
}
+11373: return
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L65_return;
+11374: 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, 11374, __pyx_L66_error)
__Pyx_GOTREF(__pyx_t_3);
+11375: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11375, __pyx_L66_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_22 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 11375, __pyx_L66_error) __Pyx_GOTREF(__pyx_t_22); __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[3] = {__pyx_t_2, __pyx_t_22, __pyx_mstate_global->__pyx_kp_u_close_did_not_close_the_handle_t}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11374, __pyx_L66_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, 11374, __pyx_L66_error)
11376: 'close() did not close the handle: the '
11377: 'concurrent close() on another thread '
11378: 'that this call waited for could not '
11379: 'finish the teardown. The handle stays '
11380: 'closing; call close() again.')
+11381: wait_s = 5.0
__Pyx_INCREF(__pyx_mstate_global->__pyx_float_5_0); __Pyx_XDECREF_SET(__pyx_v_wait_s, __pyx_mstate_global->__pyx_float_5_0);
+11382: if deadline is not None:
__pyx_t_9 = (__pyx_v_deadline != Py_None);
if (__pyx_t_9) {
/* … */
}
+11383: remaining = deadline - time.monotonic()
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 11383, __pyx_L66_error)
__Pyx_GOTREF(__pyx_t_22);
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11383, __pyx_L66_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_2))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11383, __pyx_L66_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_t_2 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_deadline, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11383, __pyx_L66_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF_SET(__pyx_v_remaining, __pyx_t_2);
__pyx_t_2 = 0;
+11384: if remaining <= 0.0:
__pyx_t_9 = __Pyx_PyObject_CompareBoolLe_object_float(__pyx_v_remaining, __pyx_mstate_global->__pyx_float_0_0, Py_LE); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 11384, __pyx_L66_error) if (__pyx_t_9) { /* … */ }
+11385: if callback_bound:
if (unlikely(__pyx_v_callback_bound)) {
/* … */
}
+11386: raise _callback_wait_refused(
__pyx_t_1 = __pyx_f_7questdb_7_client__callback_wait_refused(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11386, __pyx_L66_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11386, __pyx_L66_error)
+11387: _close_callback_gave_up_message(
__pyx_t_2 = __pyx_f_7questdb_7_client__close_callback_gave_up_message(1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11387, __pyx_L66_error) __Pyx_GOTREF(__pyx_t_2);
11388: True, 0, 0))
+11389: 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, 11389, __pyx_L66_error)
__Pyx_GOTREF(__pyx_t_3);
+11390: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 11390, __pyx_L66_error) __Pyx_GOTREF(__pyx_t_22); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11390, __pyx_L66_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
+11391: '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_8 = __Pyx_PyUnicode_Join(__pyx_t_23, 3, __pyx_t_24, __pyx_t_11);
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11391, __pyx_L66_error)
__Pyx_GOTREF(__pyx_t_8);
__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_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[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_8};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11389, __pyx_L66_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, 11389, __pyx_L66_error)
+11392: 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, 11392, __pyx_L66_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;
11393: 'close() on another thread to finish '
11394: 'the teardown. The handle stays '
11395: 'closing; call close() again to '
11396: 'resume waiting.')
+11397: wait_s = min(5.0, remaining)
__Pyx_INCREF(__pyx_v_remaining); __pyx_t_1 = __pyx_v_remaining; __pyx_t_7 = 5.0; __pyx_t_8 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11397, __pyx_L66_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = __Pyx_PyObject_CompareBoolLt_object_float(__pyx_t_1, __pyx_t_8, Py_LT); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 11397, __pyx_L66_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (__pyx_t_9) { __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = __pyx_t_1; } else { __pyx_t_8 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11397, __pyx_L66_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_3 = __pyx_t_8; __pyx_t_8 = 0; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __pyx_t_3; __Pyx_INCREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF_SET(__pyx_v_wait_s, __pyx_t_1); __pyx_t_1 = 0;
+11398: if (not self._state_cond.wait(timeout=wait_s)
__pyx_t_3 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_3);
#if CYTHON_VECTORCALL
#endif
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_wait_s};
#if CYTHON_VECTORCALL
__pyx_t_8 = __pyx_mstate_global->__pyx_tuple[47];
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11398, __pyx_L66_error)
__Pyx_INCREF(__pyx_t_8);
#else
{
PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_timeout};
__pyx_t_8 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11398, __pyx_L66_error)
__Pyx_GOTREF(__pyx_t_8);
}
#endif
__pyx_t_1 = __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_8);
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11398, __pyx_L66_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_t_21 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_21 < 0))) __PYX_ERR(0, 11398, __pyx_L66_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_6 = (!__pyx_t_21);
if (__pyx_t_6) {
} else {
__pyx_t_9 = __pyx_t_6;
goto __pyx_L74_bool_binop_done;
}
/* … */
if (__pyx_t_9) {
/* … */
}
}
+11399: and self._close_running):
__pyx_t_9 = __pyx_v_self->_close_running;
__pyx_L74_bool_binop_done:;
+11400: notice = True
__pyx_v_notice = 1;
11401: finally:
+11402: self._state_cond.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_8 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_8);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11402, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L67;
}
__pyx_L66_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_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_8); __pyx_t_8 = 0;
__Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_19);
__pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
{
__pyx_t_8 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_8);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11402, __pyx_L79_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_L79_error:;
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
goto __pyx_L1_error;
}
__pyx_L65_return: {
__pyx_t_19 = __pyx_r;
__pyx_r = 0;
__pyx_t_8 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_8);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11402, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_r = __pyx_t_19;
__pyx_t_19 = 0;
goto __pyx_L0;
}
__pyx_L67:;
}
+11403: if notice:
if (__pyx_v_notice) {
/* … */
}
}
+11404: logging.getLogger('questdb').warning(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11404, __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, 11404, __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_4 = PyMethod_GET_SELF(__pyx_t_22);
assert(__pyx_t_4);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_22);
__Pyx_INCREF(__pyx_t_4);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_22, __pyx__function);
__pyx_t_5 = 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_22, __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_22); __pyx_t_22 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11404, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__pyx_t_8 = __pyx_t_3;
__Pyx_INCREF(__pyx_t_8);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_mstate_global->__pyx_kp_u_QuestDB_close_is_still_waiting_f};
__pyx_t_1 = __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_8); __pyx_t_8 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11404, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
11405: 'QuestDB.close() is still waiting for '
11406: 'a concurrent close() on another '
11407: 'thread to finish.')
+11408: try:
/*try:*/ {
+11409: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
11410: # `questdb_db_close` drains both the writer and reader free
11411: # lists in one shot (see `db.rs::DbInner::Drop`).
+11412: questdb_db_close(db)
questdb_db_close(__pyx_v_db);
+11413: closed = True
__pyx_v_closed = 1; }
11414: finally:
+11415: _ensure_has_gil(&gs)
/*finally:*/ {
/*normal exit:*/{
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
11416: # The close is published as finished before the callbacks
11417: # are released. Releasing them can run their finalizers
11418: # right here, on this thread: a finalizer that calls
11419: # close() on this handle, or that waits for a lock held by
11420: # a thread waiting for this close, finds the close already
11421: # finished instead of waiting for it. Nothing needs the
11422: # callbacks by now: `questdb_db_close` has joined the
11423: # dispatchers, so no callback can run any more.
11424: #
11425: # No Python code runs from the claim of the pointer to the
11426: # moment the close is published. A Ctrl-C during the native
11427: # close, which runs without the GIL, or between the claim
11428: # and it, is held as a pending signal and raised at the
11429: # first Python function called after it. `with
11430: # self._state_cond:` would be that call --
11431: # `Condition.__enter__` is written in Python -- and every
11432: # later close() would then wait for this one for good, with
11433: # the callbacks still pinned. So the lock is taken through
11434: # `acquire`, which is the RLock's own C method, and the
11435: # state is written by plain attribute assignment. A blocked
11436: # acquire can still be interrupted by a further signal; it
11437: # is retried, and the first interrupt is raised once
11438: # everything here is done.
+11439: while not locked:
while (1) {
__pyx_t_9 = (!__pyx_v_locked);
if (!__pyx_t_9) break;
+11440: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
goto __pyx_L93_try_end;
__pyx_L86_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_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_8); __pyx_t_8 = 0;
/* … */
__pyx_L88_except_error:;
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_ExceptionReset(__pyx_t_19, __pyx_t_18, __pyx_t_17);
goto __pyx_L1_error;
__pyx_L87_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_ExceptionReset(__pyx_t_19, __pyx_t_18, __pyx_t_17);
__pyx_L93_try_end:;
}
}
+11441: self._state_cond.acquire()
__pyx_t_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, 11441, __pyx_L86_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+11442: locked = True
__pyx_v_locked = 1;
+11443: except BaseException as exc:
__pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_12) { __Pyx_AddTraceback("questdb._client.QuestDB.close", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_3, &__pyx_t_8) < 0) __PYX_ERR(0, 11443, __pyx_L88_except_error) __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_3); __Pyx_XGOTREF(__pyx_t_8); __Pyx_INCREF(__pyx_t_3); __pyx_v_exc = __pyx_t_3; /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; goto __pyx_L100; } __pyx_L100:; } __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; goto __pyx_L87_exception_handled; } goto __pyx_L88_except_error;
+11444: if interrupt is None:
__pyx_t_9 = (__pyx_v_interrupt == Py_None);
if (__pyx_t_9) {
/* … */
}
}
+11445: interrupt = exc
__Pyx_INCREF(__pyx_v_exc); __Pyx_DECREF_SET(__pyx_v_interrupt, __pyx_v_exc);
+11446: try:
/*try:*/ {
+11447: if closed:
if (__pyx_v_closed) {
/* … */
goto __pyx_L105;
}
+11448: self._conf_str = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_conf_str); __Pyx_DECREF_SET(__pyx_v_self->_conf_str, Py_None);
11449: else:
11450: # The native close did not run, so the pointer
11451: # goes back for a later close() to claim. The
11452: # handle stays closing either way.
+11453: self._db = db
/*else*/ {
__pyx_v_self->_db = __pyx_v_db;
}
__pyx_L105:;
+11454: self._close_running = False
__pyx_v_self->_close_running = 0;
11455: # The first Python code here, so a pending interrupt
11456: # fires in it before anyone is woken. The interrupt
11457: # has been taken by then, and a second call wakes the
11458: # waiters; one that is still not woken rechecks within
11459: # five seconds.
+11460: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
goto __pyx_L111_try_end;
__pyx_L106_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_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_8); __pyx_t_8 = 0;
/* … */
__pyx_L108_except_error:;
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
goto __pyx_L103_error;
__pyx_L107_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__pyx_L111_try_end:;
}
}
+11461: self._state_cond.notify_all()
__pyx_t_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_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_notify_all, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11461, __pyx_L106_error)
__Pyx_GOTREF(__pyx_t_8);
}
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+11462: except BaseException as exc:
__pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_12) { __Pyx_AddTraceback("questdb._client.QuestDB.close", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_3, &__pyx_t_1) < 0) __PYX_ERR(0, 11462, __pyx_L108_except_error) __Pyx_XGOTREF(__pyx_t_8); __Pyx_XGOTREF(__pyx_t_3); __Pyx_XGOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_3); __pyx_v_exc = __pyx_t_3; /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; goto __pyx_L118; } __pyx_L117_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 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_L108_except_error; } __pyx_L118:; } __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L107_exception_handled; } goto __pyx_L108_except_error;
+11463: if interrupt is None:
__pyx_t_9 = (__pyx_v_interrupt == Py_None);
if (__pyx_t_9) {
/* … */
}
+11464: interrupt = exc
__Pyx_INCREF(__pyx_v_exc); __Pyx_DECREF_SET(__pyx_v_interrupt, __pyx_v_exc);
+11465: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
goto __pyx_L127_try_end;
__pyx_L120_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
__pyx_L122_except_error:;
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_ExceptionReset(__pyx_t_16, __pyx_t_15, __pyx_t_14);
goto __pyx_L117_error;
__pyx_L121_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_ExceptionReset(__pyx_t_16, __pyx_t_15, __pyx_t_14);
__pyx_L127_try_end:;
}
}
+11466: self._state_cond.notify_all()
__pyx_t_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_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_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 11466, __pyx_L120_error)
__Pyx_GOTREF(__pyx_t_22);
}
__Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
+11467: except BaseException:
__pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_12) { __Pyx_ErrRestore(0,0,0); goto __pyx_L121_exception_handled; } goto __pyx_L122_except_error;
11468: pass
11469: finally:
+11470: self._state_cond.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_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_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_1)) __PYX_ERR(0, 11470, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
__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_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_1)) __PYX_ERR(0, 11470, __pyx_L136_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+11471: if closed:
if (__pyx_v_closed) {
/* … */
}
goto __pyx_L104;
}
__pyx_L103_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_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_8); __pyx_t_8 = 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_L136_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_L104:;
}
+11472: _release_callback_refs(self._cb_refs_key)
__pyx_t_1 = __pyx_f_7questdb_7_client__release_callback_refs(__pyx_v_self->_cb_refs_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11472, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* … */ __pyx_t_1 = __pyx_f_7questdb_7_client__release_callback_refs(__pyx_v_self->_cb_refs_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11472, __pyx_L136_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+11473: self._cb_refs_key = 0
__pyx_v_self->_cb_refs_key = 0;
/* … */
__pyx_v_self->_cb_refs_key = 0;
+11474: self._dispatch_context = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_dispatch_context); __Pyx_DECREF_SET(__pyx_v_self->_dispatch_context, Py_None); /* … */ __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_dispatch_context); __Pyx_DECREF_SET(__pyx_v_self->_dispatch_context, Py_None);
+11475: self._error_handler = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_error_handler); __Pyx_DECREF_SET(__pyx_v_self->_error_handler, Py_None); /* … */ __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_error_handler); __Pyx_DECREF_SET(__pyx_v_self->_error_handler, Py_None);
+11476: self._connection_listener = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_connection_listener); __Pyx_DECREF_SET(__pyx_v_self->_connection_listener, Py_None); /* … */ __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_connection_listener); __Pyx_DECREF_SET(__pyx_v_self->_connection_listener, Py_None);
+11477: self._oidc_auth = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_oidc_auth); __Pyx_DECREF_SET(__pyx_v_self->_oidc_auth, Py_None); /* … */ __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_oidc_auth); __Pyx_DECREF_SET(__pyx_v_self->_oidc_auth, Py_None);
+11478: self._bearer_token_provider = None
if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_bearer_token_provider, Py_None) < (0)) __PYX_ERR(0, 11478, __pyx_L1_error) /* … */ if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_bearer_token_provider, Py_None) < (0)) __PYX_ERR(0, 11478, __pyx_L136_error)
+11479: if interrupt is not None:
__pyx_t_9 = (__pyx_v_interrupt != Py_None);
if (unlikely(__pyx_t_9)) {
/* … */
}
goto __pyx_L83;
}
__pyx_L83:;
}
+11480: raise interrupt
__Pyx_Raise(__pyx_v_interrupt, 0, 0, 0); __PYX_ERR(0, 11480, __pyx_L1_error)
11481:
+11482: def __exit__(self, exc_type, exc_val, exc_tb):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_25__exit__(PyObject *__pyx_v_self, #if CYTHON_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_24__exit__, "\n Close the handle at the end of a ``with`` block.\n\n When the most recent :meth:`close` on the handle was given a\n number of seconds, this close waits only for what is left of\n that budget; otherwise it closes with the limits of a\n :meth:`close` with no arguments.\n\n Leaving the block on an exception still closes, but a close\n that cannot finish is reported through the ``questdb`` logger\n instead of raised: the frames unwinding here are often the\n ones holding the leases the close is waiting for, so raising\n would replace the exception being reported with a complaint\n that follows from it. Leaving the block normally raises as\n :meth:`close` does -- a lease left open there is a leak worth\n hearing about.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_25__exit__ = {"__exit__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_25__exit__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_24__exit__}; static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_25__exit__(PyObject *__pyx_v_self, #if CYTHON_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, 11482, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 3: values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 11482, __pyx_L3_error) CYTHON_FALLTHROUGH; case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 11482, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 11482, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__exit__", 0) < (0)) __PYX_ERR(0, 11482, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 3; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, i); __PYX_ERR(0, 11482, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 11482, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 11482, __pyx_L3_error) values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 11482, __pyx_L3_error) } __pyx_v_exc_type = values[0]; __pyx_v_exc_val = values[1]; __pyx_v_exc_tb = values[2]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 11482, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.QuestDB.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_24__exit__(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self), __pyx_v_exc_type, __pyx_v_exc_val, __pyx_v_exc_tb); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_24__exit__(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self, PyObject *__pyx_v_exc_type, CYTHON_UNUSED PyObject *__pyx_v_exc_val, CYTHON_UNUSED PyObject *__pyx_v_exc_tb) { PyObject *__pyx_v_deadline = NULL; PyObject *__pyx_v_timeout = NULL; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_13); __Pyx_XDECREF(__pyx_t_14); __Pyx_XDECREF(__pyx_t_15); __Pyx_XDECREF(__pyx_t_16); __Pyx_XDECREF(__pyx_t_17); __Pyx_AddTraceback("questdb._client.QuestDB.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_deadline); __Pyx_XDECREF(__pyx_v_timeout); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_25__exit__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB___exit, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[220])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 11482, __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_exit, __pyx_t_20) < (0)) __PYX_ERR(0, 11482, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
11483: """
11484: Close the handle at the end of a ``with`` block.
11485:
11486: When the most recent :meth:`close` on the handle was given a
11487: number of seconds, this close waits only for what is left of
11488: that budget; otherwise it closes with the limits of a
11489: :meth:`close` with no arguments.
11490:
11491: Leaving the block on an exception still closes, but a close
11492: that cannot finish is reported through the ``questdb`` logger
11493: instead of raised: the frames unwinding here are often the
11494: ones holding the leases the close is waiting for, so raising
11495: would replace the exception being reported with a complaint
11496: that follows from it. Leaving the block normally raises as
11497: :meth:`close` does -- a lease left open there is a leak worth
11498: hearing about.
11499: """
11500: # Held through `acquire` and `release`, as in `close()`.
+11501: self._state_cond.acquire()
__pyx_t_2 = __pyx_v_self->_state_cond; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11501, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+11502: try:
/*try:*/ {
+11503: deadline = self._close_deadline
__pyx_t_1 = __pyx_v_self->_close_deadline;
__Pyx_INCREF(__pyx_t_1);
__pyx_v_deadline = __pyx_t_1;
__pyx_t_1 = 0;
}
11504: finally:
+11505: self._state_cond.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_2 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11505, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L5;
}
__pyx_L5:;
}
+11506: if deadline is None:
__pyx_t_4 = (__pyx_v_deadline == Py_None);
if (__pyx_t_4) {
/* … */
goto __pyx_L6;
}
+11507: timeout = _CLOSE_TIMEOUT_DEFAULT
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_CLOSE_TIMEOUT_DEFAULT); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11507, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_timeout = __pyx_t_1; __pyx_t_1 = 0;
11508: else:
+11509: timeout = max(deadline - time.monotonic(), 0.0)
/*else*/ {
__pyx_t_5 = 0.0;
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11509, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11509, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__pyx_t_3 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_7))) {
__pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7);
assert(__pyx_t_2);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
__Pyx_INCREF(__pyx_t_2);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
__pyx_t_3 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11509, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_t_7 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_deadline, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11509, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_2 = PyFloat_FromDouble(__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11509, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_4 = __Pyx_PyObject_CompareBoolGt_float_object(__pyx_t_2, __pyx_t_7, Py_GT); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 11509, __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, 11509, __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:;
+11510: if exc_type is None:
__pyx_t_4 = (__pyx_v_exc_type == Py_None);
if (__pyx_t_4) {
/* … */
}
+11511: self.close(timeout)
__pyx_t_8.__pyx_n = 1;
__pyx_t_8.timeout = __pyx_v_timeout;
__pyx_t_7 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0, &__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11511, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+11512: return
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+11513: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
goto __pyx_L13_try_end;
__pyx_L8_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
__pyx_L10_except_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
goto __pyx_L1_error;
__pyx_L9_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__pyx_L13_try_end:;
}
+11514: self.close(timeout)
__pyx_t_8.__pyx_n = 1;
__pyx_t_8.timeout = __pyx_v_timeout;
__pyx_t_7 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0, &__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11514, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+11515: except QuestDBError:
__Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_1, &__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11515, __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, 11515, __pyx_L10_except_error) __Pyx_XGOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_7);
+11516: logging.getLogger('questdb').exception(
__pyx_t_15 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 11516, __pyx_L10_except_error)
__Pyx_GOTREF(__pyx_t_16);
__pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 11516, __pyx_L10_except_error)
__Pyx_GOTREF(__pyx_t_17);
__Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
__pyx_t_3 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_17))) {
__pyx_t_15 = PyMethod_GET_SELF(__pyx_t_17);
assert(__pyx_t_15);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_17);
__Pyx_INCREF(__pyx_t_15);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_17, __pyx__function);
__pyx_t_3 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_mstate_global->__pyx_n_u_questdb};
__pyx_t_14 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_17, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 11516, __pyx_L10_except_error)
__Pyx_GOTREF(__pyx_t_14);
}
__pyx_t_13 = __pyx_t_14;
__Pyx_INCREF(__pyx_t_13);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_mstate_global->__pyx_kp_u_QuestDB_close_could_not_finish_w};
__pyx_t_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, 11516, __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;
11517: 'QuestDB.close() could not finish while leaving a '
11518: '`with` block that was already raising. The handle '
11519: 'stays closing; the original exception follows.')
11520:
+11521: def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_7questdb_7_client_7QuestDB_27__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7questdb_7_client_7QuestDB_27__dealloc__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_pf_7questdb_7_client_7QuestDB_26__dealloc__(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
}
static void __pyx_pf_7questdb_7_client_7QuestDB_26__dealloc__(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
struct questdb_db *__pyx_v_db;
PyThreadState *__pyx_v_gs;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_WriteUnraisable("questdb._client.QuestDB.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
11522: cdef questdb_db* db
+11523: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+11524: if self._db != NULL:
__pyx_t_1 = (__pyx_v_self->_db != NULL);
if (__pyx_t_1) {
/* … */
}
+11525: db = self._db
__pyx_t_2 = __pyx_v_self->_db;
__pyx_v_db = __pyx_t_2;
+11526: self._db = NULL
__pyx_v_self->_db = NULL;
+11527: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+11528: questdb_db_close(db)
questdb_db_close(__pyx_v_db);
+11529: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+11530: _release_callback_refs(self._cb_refs_key)
__pyx_t_3 = __pyx_f_7questdb_7_client__release_callback_refs(__pyx_v_self->_cb_refs_key); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11530, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+11531: self._cb_refs_key = 0
__pyx_v_self->_cb_refs_key = 0;
11532:
11533:
+11534: @cython.no_gc_clear
struct __pyx_vtabstruct_7questdb_7_client_Sender {
__pyx_t_7questdb_7_client_void_int (*_set_sender_fields)(struct __pyx_obj_7questdb_7_client_Sender *, struct qdb_pystr_buf *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *);
PyObject *(*_new_buffer_for_sender)(struct __pyx_obj_7questdb_7_client_Sender *);
PyObject *(*flush)(struct __pyx_obj_7questdb_7_client_Sender *, int __pyx_skip_dispatch, struct __pyx_opt_args_7questdb_7_client_6Sender_flush *__pyx_optional_args);
__pyx_t_7questdb_7_client_void_int (*_flush_c_buf)(struct __pyx_obj_7questdb_7_client_Sender *, struct __pyx_obj_7questdb_7_client_Buffer *, int, int, int);
int (*_enter_native)(struct __pyx_obj_7questdb_7_client_Sender *);
void (*_exit_native)(struct __pyx_obj_7questdb_7_client_Sender *, int);
__pyx_t_7questdb_7_client_void_int (*_check_not_in_own_callback)(struct __pyx_obj_7questdb_7_client_Sender *, PyObject *, struct __pyx_opt_args_7questdb_7_client_6Sender__check_not_in_own_callback *__pyx_optional_args);
__pyx_t_7questdb_7_client_void_int (*_check_qwp_ws)(struct __pyx_obj_7questdb_7_client_Sender *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_check_buffer_protocol)(struct __pyx_obj_7questdb_7_client_Sender *, struct __pyx_obj_7questdb_7_client_Buffer *);
PyObject *(*_close)(struct __pyx_obj_7questdb_7_client_Sender *, struct __pyx_opt_args_7questdb_7_client_6Sender__close *__pyx_optional_args);
PyObject *(*close)(struct __pyx_obj_7questdb_7_client_Sender *, int __pyx_skip_dispatch, struct __pyx_opt_args_7questdb_7_client_6Sender_close *__pyx_optional_args);
};
static struct __pyx_vtabstruct_7questdb_7_client_Sender *__pyx_vtabptr_7questdb_7_client_Sender;
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Sender__new_buffer_for_sender(struct __pyx_obj_7questdb_7_client_Sender *);
static CYTHON_INLINE int __pyx_f_7questdb_7_client_6Sender__enter_native(struct __pyx_obj_7questdb_7_client_Sender *);
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Sender__exit_native(struct __pyx_obj_7questdb_7_client_Sender *, int);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(struct __pyx_obj_7questdb_7_client_Sender *, PyObject *, struct __pyx_opt_args_7questdb_7_client_6Sender__check_not_in_own_callback *__pyx_optional_args);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(struct __pyx_obj_7questdb_7_client_Sender *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Sender__check_buffer_protocol(struct __pyx_obj_7questdb_7_client_Sender *, struct __pyx_obj_7questdb_7_client_Buffer *);
11535: cdef class Sender:
11536: """
11537: Ingest data into QuestDB over a single connection.
11538:
11539: This is the connection-level API: one sender drives exactly one
11540: connection (ILP/HTTP, ILP/TCP, QWP/UDP, or a single QWP/WebSocket
11541: connection) and carries the point-to-point capabilities the
11542: deployment-level handle does not: HTTP transactions, UDP datagrams,
11543: and manual ws progress and buffer control. For pooled ingestion and
11544: queries, prefer :func:`questdb.connect`.
11545:
11546: See the :ref:`sender` documentation for more information.
11547: """
11548:
11549: # We need the Buffer held by a Sender can hold a weakref to its Sender.
11550: # This avoids a circular reference that requires the GC to clean up.
11551: cdef object __weakref__
11552:
11553: cdef line_sender_protocol _c_protocol
11554: cdef line_sender_opts* _opts
11555: cdef line_sender* _impl
11556: cdef Buffer _buffer
11557: cdef object _thread_owner_token
11558: cdef object _dispatch_context
11559: cdef object _error_handler
11560: cdef object _connection_listener
11561: cdef object _oidc_auth
11562: # The bearer-token holder on CPython; see `_sender_hold_bearer`.
11563: cdef object _bearer_holder
11564: # Holds the bearer-token holder on PyPy only, where a cpyext field would
11565: # hide it from the collector and a provider that owns this sender could
11566: # never be collected. CPython keeps the pointer NULL: an instance
11567: # dictionary, even an empty one, stops CPython caching the method lookup
11568: # of `sender.row(...)`, which is made once per row. `__setattr__` keeps
11569: # every other name out of it. Reading `__dict__` recreates it; see
11570: # `_sender_drop_unused_dict`.
11571: cdef dict __dict__
11572: cdef auto_flush_mode_t _auto_flush_mode
11573: cdef bint _auto_flush_bytes_dynamic
11574: cdef int64_t* _last_flush_ms
11575: cdef size_t _init_buf_size
11576: cdef bint _in_txn
11577: # Set while a GIL-released native call borrows this sender/buffer: another
11578: # thread must not free the sender or mutate its buffer before the call
11579: # returns. An OIDC diagnostic or a token-provider callback can also
11580: # reacquire the GIL on that very thread and run arbitrary logging or
11581: # signal handlers before then. See `_enter_native`.
11582: cdef bint _native_in_flight
11583: cdef int64_t _slot_id
11584: # A clone of the fully-configured opts for QWP/WebSocket senders, retained
11585: # so dataframe() can open a poolless direct columnar connection per call
11586: # (carrying auth/TLS). NULL for other protocols.
11587: cdef line_sender_opts* _qwp_ws_opts
11588: cdef size_t _cb_refs_key
11589:
+11590: cdef void_int _set_sender_fields(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Sender__set_sender_fields(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_protocol, PyObject *__pyx_v_bind_interface, PyObject *__pyx_v_username, PyObject *__pyx_v_password, PyObject *__pyx_v_token, PyObject *__pyx_v_oidc_auth, PyObject *__pyx_v_bearer_token_provider, PyObject *__pyx_v_token_x, PyObject *__pyx_v_token_y, PyObject *__pyx_v_auth_timeout, PyObject *__pyx_v_tls_verify, PyObject *__pyx_v_tls_ca, PyObject *__pyx_v_tls_roots, PyObject *__pyx_v_tls_roots_password, PyObject *__pyx_v_max_buf_size, PyObject *__pyx_v_retry_timeout, PyObject *__pyx_v_retry_max_backoff, PyObject *__pyx_v_request_min_throughput, PyObject *__pyx_v_request_timeout, PyObject *__pyx_v_auto_flush, PyObject *__pyx_v_auto_flush_rows, PyObject *__pyx_v_auto_flush_bytes, PyObject *__pyx_v_auto_flush_interval, PyObject *__pyx_v_max_datagram_size, PyObject *__pyx_v_multicast_ttl, PyObject *__pyx_v_protocol_version, PyObject *__pyx_v_qwp_ws_progress, PyObject *__pyx_v_error_handler, PyObject *__pyx_v_connection_listener, PyObject *__pyx_v_connection_event_inbox_capacity, PyObject *__pyx_v_init_buf_size, PyObject *__pyx_v_max_name_len) {
struct line_sender_error *__pyx_v_err;
PyObject *__pyx_v_user_agent = 0;
struct line_sender_utf8 __pyx_v_c_user_agent;
struct line_sender_utf8 __pyx_v_c_bind_interface;
struct line_sender_utf8 __pyx_v_c_username;
struct line_sender_utf8 __pyx_v_c_password;
struct line_sender_utf8 __pyx_v_c_token;
struct line_sender_utf8 __pyx_v_c_token_x;
struct line_sender_utf8 __pyx_v_c_token_y;
uint64_t __pyx_v_c_auth_timeout;
int __pyx_v_c_tls_verify;
enum line_sender_ca __pyx_v_c_tls_ca;
struct line_sender_utf8 __pyx_v_c_tls_roots;
struct line_sender_utf8 __pyx_v_c_tls_roots_password;
uint64_t __pyx_v_c_max_buf_size;
uint64_t __pyx_v_c_retry_timeout;
uint64_t __pyx_v_c_retry_max_backoff;
uint64_t __pyx_v_c_request_min_throughput;
uint64_t __pyx_v_c_request_timeout;
size_t __pyx_v_c_max_name_len;
size_t __pyx_v_c_max_datagram_size;
uint32_t __pyx_v_c_multicast_ttl;
enum line_sender_qwpws_progress __pyx_v_c_qwp_ws_progress;
PyObject *__pyx_v__conflicting = NULL;
PyObject *__pyx_v__holder = NULL;
PyObject *__pyx_9genexpr31__pyx_v_name = NULL;
PyObject *__pyx_9genexpr31__pyx_v_value = NULL;
PyObject *__pyx_gb_7questdb_7_client_6Sender_18_set_sender_fields_2generator11 = 0;
PyObject *__pyx_9genexpr33__pyx_v_name = NULL;
PyObject *__pyx_9genexpr33__pyx_v_value = NULL;
PyObject *__pyx_gb_7questdb_7_client_6Sender_18_set_sender_fields_5generator12 = 0;
__pyx_t_7questdb_7_client_void_int __pyx_r;
__Pyx_INCREF(__pyx_v_tls_roots);
__Pyx_INCREF(__pyx_v_auto_flush_bytes);
__Pyx_INCREF(__pyx_v_error_handler);
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_18);
__Pyx_XDECREF(__pyx_t_19);
__Pyx_XDECREF(__pyx_t_20);
__Pyx_XDECREF(__pyx_t_21);
__Pyx_AddTraceback("questdb._client.Sender._set_sender_fields", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_user_agent);
__Pyx_XDECREF(__pyx_v__conflicting);
__Pyx_XDECREF(__pyx_v__holder);
__Pyx_XDECREF(__pyx_9genexpr31__pyx_v_name);
__Pyx_XDECREF(__pyx_9genexpr31__pyx_v_value);
__Pyx_XDECREF(__pyx_gb_7questdb_7_client_6Sender_18_set_sender_fields_2generator11);
__Pyx_XDECREF(__pyx_9genexpr33__pyx_v_name);
__Pyx_XDECREF(__pyx_9genexpr33__pyx_v_value);
__Pyx_XDECREF(__pyx_gb_7questdb_7_client_6Sender_18_set_sender_fields_5generator12);
__Pyx_XDECREF(__pyx_v_tls_roots);
__Pyx_XDECREF(__pyx_v_auto_flush_bytes);
__Pyx_XDECREF(__pyx_v_error_handler);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
11591: self,
11592: qdb_pystr_buf* b,
11593: object protocol,
11594: str bind_interface,
11595: str username,
11596: str password,
11597: str token,
11598: object oidc_auth,
11599: object bearer_token_provider,
11600: str token_x,
11601: str token_y,
11602: object auth_timeout,
11603: object tls_verify,
11604: object tls_ca,
11605: object tls_roots,
11606: object tls_roots_password,
11607: object max_buf_size,
11608: object retry_timeout,
11609: object retry_max_backoff,
11610: object request_min_throughput,
11611: object request_timeout,
11612: object auto_flush,
11613: object auto_flush_rows,
11614: object auto_flush_bytes,
11615: object auto_flush_interval,
11616: object max_datagram_size,
11617: object multicast_ttl,
11618: object protocol_version,
11619: object qwp_ws_progress,
11620: object error_handler,
11621: object connection_listener,
11622: object connection_event_inbox_capacity,
11623: object init_buf_size,
11624: object max_name_len) except -1:
11625: """
11626: Set optional parameters for the sender.
11627: """
+11628: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+11629: cdef str user_agent = 'questdb/python/' + VERSION
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_VERSION); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11629, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_Add(__pyx_mstate_global->__pyx_kp_u_questdb_python, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11629, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (!(likely(PyUnicode_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_2))) __PYX_ERR(0, 11629, __pyx_L1_error) __pyx_v_user_agent = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0;
11630: cdef line_sender_utf8 c_user_agent
11631: cdef line_sender_utf8 c_bind_interface
11632: cdef line_sender_utf8 c_username
11633: cdef line_sender_utf8 c_password
11634: cdef line_sender_utf8 c_token
11635: cdef line_sender_utf8 c_token_x
11636: cdef line_sender_utf8 c_token_y
11637: cdef uint64_t c_auth_timeout
11638: cdef bint c_tls_verify
11639: cdef line_sender_ca c_tls_ca
11640: cdef line_sender_utf8 c_tls_roots
11641: cdef line_sender_utf8 c_tls_roots_password
11642: cdef uint64_t c_max_buf_size
11643: cdef uint64_t c_retry_timeout
11644: cdef uint64_t c_retry_max_backoff
11645: cdef uint64_t c_request_min_throughput
11646: cdef uint64_t c_request_timeout
11647: cdef size_t c_max_name_len
+11648: cdef size_t c_max_datagram_size = 0
__pyx_v_c_max_datagram_size = 0;
+11649: cdef uint32_t c_multicast_ttl = 0
__pyx_v_c_multicast_ttl = 0;
11650: cdef line_sender_qwpws_progress c_qwp_ws_progress
11651:
+11652: self._c_protocol = protocol.c_value
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_protocol, __pyx_mstate_global->__pyx_n_u_c_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11652, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = ((enum line_sender_protocol)__Pyx_PyLong_As_enum__line_sender_protocol(__pyx_t_2)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 11652, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_self->_c_protocol = __pyx_t_3;
11653:
11654: # It's OK to override this setting.
+11655: str_to_utf8(b, <PyObject*>user_agent, &c_user_agent)
__pyx_t_4 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_user_agent), (&__pyx_v_c_user_agent)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11655, __pyx_L1_error)
+11656: if not line_sender_opts_user_agent(self._opts, c_user_agent, &err):
__pyx_t_5 = (!line_sender_opts_user_agent(__pyx_v_self->_opts, __pyx_v_c_user_agent, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
+11657: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11657, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 11657, __pyx_L1_error)
11658:
+11659: if bind_interface is not None:
__pyx_t_5 = (__pyx_v_bind_interface != ((PyObject*)Py_None));
if (__pyx_t_5) {
/* … */
}
+11660: str_to_utf8(b, <PyObject*>bind_interface, &c_bind_interface)
__pyx_t_4 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_bind_interface), (&__pyx_v_c_bind_interface)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11660, __pyx_L1_error)
+11661: if not line_sender_opts_bind_interface(
__pyx_t_5 = (!line_sender_opts_bind_interface(__pyx_v_self->_opts, __pyx_v_c_bind_interface, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
11662: self._opts, c_bind_interface, &err):
+11663: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11663, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 11663, __pyx_L1_error)
11664:
+11665: if max_datagram_size is not None:
__pyx_t_5 = (__pyx_v_max_datagram_size != Py_None);
if (__pyx_t_5) {
/* … */
}
+11666: if not _is_qwp_udp_protocol(self._c_protocol):
__pyx_t_5 = __pyx_f_7questdb_7_client__is_qwp_udp_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11666, __pyx_L1_error) __pyx_t_6 = (!__pyx_t_5); if (unlikely(__pyx_t_6)) { /* … */ }
+11667: raise QuestDBError(
__pyx_t_1 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11667, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
+11668: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11668, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 11668, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_9, __pyx_mstate_global->__pyx_kp_u_max_datagram_size_is_only_suppo}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11667, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 11667, __pyx_L1_error)
11669: '"max_datagram_size" is only supported for QWP/UDP senders.')
+11670: if not isinstance(max_datagram_size, int) or isinstance(max_datagram_size, bool):
__pyx_t_5 = PyLong_Check(__pyx_v_max_datagram_size); __pyx_t_11 = (!__pyx_t_5); if (!__pyx_t_11) { } else { __pyx_t_6 = __pyx_t_11; goto __pyx_L9_bool_binop_done; } __pyx_t_11 = __Pyx_TypeCheck(__pyx_v_max_datagram_size, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); __pyx_t_6 = __pyx_t_11; __pyx_L9_bool_binop_done:; if (unlikely(__pyx_t_6)) { /* … */ }
+11671: raise TypeError(
__pyx_t_7 = NULL;
+11672: '"max_datagram_size" must be a positive int, '
__pyx_t_9 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_max_datagram_size_must_be_a_pos, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 11672, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_9}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11671, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 11671, __pyx_L1_error)
+11673: f'not {_fqn(type(max_datagram_size))}')
__pyx_t_9 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_max_datagram_size)))); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 11673, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11673, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+11674: if max_datagram_size <= 0 or max_datagram_size > 65507:
__pyx_t_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, 11674, __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, 11674, __pyx_L1_error) __pyx_t_6 = __pyx_t_11; __pyx_L12_bool_binop_done:; if (unlikely(__pyx_t_6)) { /* … */ }
+11675: raise ValueError(
__pyx_t_9 = NULL;
+11676: '"max_datagram_size" must be an int between 1 and 65507, '
__pyx_t_1 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_max_datagram_size_must_be_an_in, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11676, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_1}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11675, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 11675, __pyx_L1_error)
+11677: f'not {max_datagram_size!r}')
__pyx_t_7 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_max_datagram_size), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7);
+11678: c_max_datagram_size = max_datagram_size
__pyx_t_10 = __Pyx_PyLong_As_size_t(__pyx_v_max_datagram_size); if (unlikely((__pyx_t_10 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 11678, __pyx_L1_error) __pyx_v_c_max_datagram_size = __pyx_t_10;
+11679: if not line_sender_opts_max_datagram_size(
__pyx_t_6 = (!line_sender_opts_max_datagram_size(__pyx_v_self->_opts, __pyx_v_c_max_datagram_size, (&__pyx_v_err)));
if (unlikely(__pyx_t_6)) {
/* … */
}
11680: self._opts, c_max_datagram_size, &err):
+11681: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11681, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 11681, __pyx_L1_error)
11682:
+11683: if multicast_ttl is not None:
__pyx_t_6 = (__pyx_v_multicast_ttl != Py_None);
if (__pyx_t_6) {
/* … */
}
+11684: if not _is_qwp_udp_protocol(self._c_protocol):
__pyx_t_6 = __pyx_f_7questdb_7_client__is_qwp_udp_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11684, __pyx_L1_error) __pyx_t_11 = (!__pyx_t_6); if (unlikely(__pyx_t_11)) { /* … */ }
+11685: raise QuestDBError(
__pyx_t_1 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 11685, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
+11686: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11686, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11686, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_8, __pyx_mstate_global->__pyx_kp_u_multicast_ttl_is_only_supported}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11685, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 11685, __pyx_L1_error)
11687: '"multicast_ttl" is only supported for QWP/UDP senders.')
+11688: if not isinstance(multicast_ttl, int) or isinstance(multicast_ttl, bool):
__pyx_t_6 = PyLong_Check(__pyx_v_multicast_ttl); __pyx_t_5 = (!__pyx_t_6); if (!__pyx_t_5) { } else { __pyx_t_11 = __pyx_t_5; goto __pyx_L18_bool_binop_done; } __pyx_t_5 = __Pyx_TypeCheck(__pyx_v_multicast_ttl, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); __pyx_t_11 = __pyx_t_5; __pyx_L18_bool_binop_done:; if (unlikely(__pyx_t_11)) { /* … */ }
+11689: raise TypeError(
__pyx_t_9 = NULL;
+11690: '"multicast_ttl" must be an int (0-255), '
__pyx_t_8 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_multicast_ttl_must_be_an_int_0, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11690, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_8}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11689, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 11689, __pyx_L1_error)
+11691: f'not {_fqn(type(multicast_ttl))}')
__pyx_t_8 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_multicast_ttl)))); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11691, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11691, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+11692: if multicast_ttl < 0 or multicast_ttl > 255:
__pyx_t_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, 11692, __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, 11692, __pyx_L1_error) __pyx_t_11 = __pyx_t_5; __pyx_L21_bool_binop_done:; if (unlikely(__pyx_t_11)) { /* … */ }
+11693: raise ValueError(
__pyx_t_8 = NULL;
+11694: '"multicast_ttl" must be an int (0-255), '
__pyx_t_1 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_multicast_ttl_must_be_an_int_0, __pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_1}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11693, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 11693, __pyx_L1_error)
+11695: f'not {multicast_ttl!r}')
__pyx_t_9 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_multicast_ttl), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 11695, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9);
+11696: c_multicast_ttl = multicast_ttl
__pyx_t_12 = __Pyx_PyLong_As_uint32_t(__pyx_v_multicast_ttl); if (unlikely((__pyx_t_12 == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 11696, __pyx_L1_error) __pyx_v_c_multicast_ttl = __pyx_t_12;
+11697: if not line_sender_opts_multicast_ttl(
__pyx_t_11 = (!line_sender_opts_multicast_ttl(__pyx_v_self->_opts, __pyx_v_c_multicast_ttl, (&__pyx_v_err)));
if (unlikely(__pyx_t_11)) {
/* … */
}
11698: self._opts, c_multicast_ttl, &err):
+11699: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 11699, __pyx_L1_error)
11700:
+11701: if qwp_ws_progress is not None:
__pyx_t_11 = (__pyx_v_qwp_ws_progress != Py_None);
if (__pyx_t_11) {
/* … */
}
+11702: if not _is_qwp_ws_protocol(self._c_protocol):
__pyx_t_11 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11702, __pyx_L1_error) __pyx_t_5 = (!__pyx_t_11); if (unlikely(__pyx_t_5)) { /* … */ }
+11703: raise QuestDBError(
__pyx_t_1 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11703, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
+11704: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 11704, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11704, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_8))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_8, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_qwp_ws_progress_is_only_support}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11703, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 11703, __pyx_L1_error)
11705: '"qwp_ws_progress" is only supported for QWP/WebSocket senders.')
+11706: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
goto __pyx_L31_try_end;
__pyx_L26_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
__pyx_L28_except_error:;
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15);
goto __pyx_L1_error;
__pyx_L31_try_end:;
}
+11707: c_qwp_ws_progress = QwpWsProgress.parse(qwp_ws_progress).c_value
__pyx_t_8 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QwpWsProgress); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11707, __pyx_L26_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_parse); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11707, __pyx_L26_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__pyx_t_10 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_1))) {
__pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
assert(__pyx_t_8);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
__Pyx_INCREF(__pyx_t_8);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
__pyx_t_10 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_v_qwp_ws_progress};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11707, __pyx_L26_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_c_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11707, __pyx_L26_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_16 = ((enum line_sender_qwpws_progress)__Pyx_PyLong_As_enum__line_sender_qwpws_progress(__pyx_t_1)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 11707, __pyx_L26_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_v_c_qwp_ws_progress = __pyx_t_16;
+11708: except ValueError:
__pyx_t_17 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_ValueError)))); if (__pyx_t_17) { __Pyx_AddTraceback("questdb._client.Sender._set_sender_fields", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_8) < 0) __PYX_ERR(0, 11708, __pyx_L28_except_error) __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_t_8);
+11709: raise QuestDBError(
__pyx_t_9 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11709, __pyx_L28_except_error)
__Pyx_GOTREF(__pyx_t_18);
+11710: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11710, __pyx_L28_except_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 11710, __pyx_L28_except_error) __Pyx_GOTREF(__pyx_t_20); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+11711: f'"qwp_ws_progress" has invalid value: {qwp_ws_progress!r}')
__pyx_t_19 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_qwp_ws_progress), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11711, __pyx_L28_except_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_21 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_qwp_ws_progress_has_invalid_val, __pyx_t_19); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 11711, __pyx_L28_except_error) __Pyx_GOTREF(__pyx_t_21); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_18))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_18); assert(__pyx_t_9); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_18); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_18, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_9, __pyx_t_20, __pyx_t_21}; __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_18, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11709, __pyx_L28_except_error) __Pyx_GOTREF(__pyx_t_7); } __Pyx_Raise(__pyx_t_7, 0, 0, 0); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __PYX_ERR(0, 11709, __pyx_L28_except_error) } goto __pyx_L28_except_error;
+11712: if not line_sender_opts_qwpws_progress(
__pyx_t_5 = (!line_sender_opts_qwpws_progress(__pyx_v_self->_opts, __pyx_v_c_qwp_ws_progress, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
11713: self._opts, c_qwp_ws_progress, &err):
+11714: raise c_err_to_py(err)
__pyx_t_8 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11714, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 11714, __pyx_L1_error)
11715:
+11716: if error_handler is not None and not callable(error_handler):
__pyx_t_11 = (__pyx_v_error_handler != Py_None);
if (__pyx_t_11) {
} else {
__pyx_t_5 = __pyx_t_11;
goto __pyx_L36_bool_binop_done;
}
__pyx_t_11 = __Pyx_PyCallable_Check(__pyx_v_error_handler); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 11716, __pyx_L1_error)
__pyx_t_6 = (!__pyx_t_11);
__pyx_t_5 = __pyx_t_6;
__pyx_L36_bool_binop_done:;
if (unlikely(__pyx_t_5)) {
/* … */
}
+11717: raise TypeError(
__pyx_t_2 = NULL;
+11718: '"error_handler" must be callable or None, '
__pyx_t_1 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_error_handler_must_be_callable, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11718, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_1}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11717, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 11717, __pyx_L1_error)
+11719: f'not {_fqn(type(error_handler))}')
__pyx_t_1 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_error_handler)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11719, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11719, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+11720: if error_handler is not None and not _is_qwp_ws_protocol(self._c_protocol):
__pyx_t_6 = (__pyx_v_error_handler != Py_None);
if (__pyx_t_6) {
} else {
__pyx_t_5 = __pyx_t_6;
goto __pyx_L39_bool_binop_done;
}
__pyx_t_6 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11720, __pyx_L1_error)
__pyx_t_11 = (!__pyx_t_6);
__pyx_t_5 = __pyx_t_11;
__pyx_L39_bool_binop_done:;
if (unlikely(__pyx_t_5)) {
/* … */
}
+11721: raise QuestDBError(
__pyx_t_1 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11721, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
+11722: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11722, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11722, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_18, __pyx_mstate_global->__pyx_kp_u_error_handler_is_only_supported}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11721, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 11721, __pyx_L1_error)
11723: 'error_handler is only supported for QWP/WebSocket senders.')
+11724: if connection_listener is not None and not callable(
__pyx_t_11 = (__pyx_v_connection_listener != Py_None);
if (__pyx_t_11) {
} else {
__pyx_t_5 = __pyx_t_11;
goto __pyx_L42_bool_binop_done;
}
/* … */
__pyx_t_11 = __Pyx_PyCallable_Check(__pyx_v_connection_listener); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 11724, __pyx_L1_error)
/* … */
__pyx_t_6 = (!__pyx_t_11);
__pyx_t_5 = __pyx_t_6;
__pyx_L42_bool_binop_done:;
if (unlikely(__pyx_t_5)) {
/* … */
}
11725: connection_listener):
+11726: raise TypeError(
__pyx_t_2 = NULL;
+11727: '"connection_listener" must be callable or None, '
__pyx_t_18 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_connection_listener_must_be_cal, __pyx_t_1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11727, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_18}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11726, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 11726, __pyx_L1_error)
+11728: f'not {_fqn(type(connection_listener))}')
__pyx_t_18 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_connection_listener)))); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11728, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_t_18); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11728, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+11729: if connection_listener is not None and not _is_qwp_ws_protocol(
__pyx_t_6 = (__pyx_v_connection_listener != Py_None);
if (__pyx_t_6) {
} else {
__pyx_t_5 = __pyx_t_6;
goto __pyx_L45_bool_binop_done;
}
/* … */
__pyx_t_6 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11729, __pyx_L1_error)
/* … */
__pyx_t_11 = (!__pyx_t_6);
__pyx_t_5 = __pyx_t_11;
__pyx_L45_bool_binop_done:;
if (unlikely(__pyx_t_5)) {
/* … */
}
11730: self._c_protocol):
+11731: raise QuestDBError(
__pyx_t_18 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11731, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
+11732: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11732, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11732, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_18); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_18); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_18, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_connection_listener_is_only_supp}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11731, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 11731, __pyx_L1_error)
11733: 'connection_listener is only supported for QWP/WebSocket '
11734: 'senders.')
11735:
+11736: if _is_qwp_ws_protocol(self._c_protocol):
__pyx_t_5 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11736, __pyx_L1_error) if (__pyx_t_5) { /* … */ }
+11737: if error_handler is None:
__pyx_t_5 = (__pyx_v_error_handler == Py_None);
if (__pyx_t_5) {
/* … */
}
+11738: error_handler = _default_error_handler
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_default_error_handler); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11738, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF_SET(__pyx_v_error_handler, __pyx_t_8); __pyx_t_8 = 0;
+11739: self._error_handler = error_handler
__Pyx_INCREF(__pyx_v_error_handler); __Pyx_GIVEREF(__pyx_v_error_handler); __Pyx_GOTREF(__pyx_v_self->_error_handler); __Pyx_DECREF_SET(__pyx_v_self->_error_handler, __pyx_v_error_handler);
+11740: self._connection_listener = connection_listener
__Pyx_INCREF(__pyx_v_connection_listener); __Pyx_GIVEREF(__pyx_v_connection_listener); __Pyx_GOTREF(__pyx_v_self->_connection_listener); __Pyx_DECREF_SET(__pyx_v_self->_connection_listener, __pyx_v_connection_listener);
+11741: self._dispatch_context = _new_dispatch_context(
__pyx_t_18 = ((PyObject *)__pyx_f_7questdb_7_client__new_dispatch_context(__pyx_t_8, __pyx_t_2, __pyx_t_7)); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11741, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_GIVEREF(__pyx_t_18); __Pyx_GOTREF(__pyx_v_self->_dispatch_context); __Pyx_DECREF_SET(__pyx_v_self->_dispatch_context, __pyx_t_18); __pyx_t_18 = 0;
+11742: self._thread_owner_token,
__pyx_t_8 = __pyx_v_self->_thread_owner_token;
__Pyx_INCREF(__pyx_t_8);
+11743: self._error_handler,
__pyx_t_2 = __pyx_v_self->_error_handler;
__Pyx_INCREF(__pyx_t_2);
+11744: self._connection_listener)
__pyx_t_7 = __pyx_v_self->_connection_listener;
__Pyx_INCREF(__pyx_t_7);
+11745: if not line_sender_opts_qwpws_error_handler(
__pyx_t_5 = (!line_sender_opts_qwpws_error_handler(__pyx_v_self->_opts, __pyx_f_7questdb_7_client__sender_error_trampoline, ((void *)__pyx_v_self->_dispatch_context), (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
11746: self._opts,
11747: _sender_error_trampoline,
11748: <void*>self._dispatch_context,
11749: &err):
+11750: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11750, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 11750, __pyx_L1_error)
+11751: if connection_listener is not None:
__pyx_t_5 = (__pyx_v_connection_listener != Py_None);
if (__pyx_t_5) {
/* … */
}
+11752: if not line_sender_opts_connection_event_handler(
__pyx_t_5 = (!line_sender_opts_connection_event_handler(__pyx_v_self->_opts, __pyx_f_7questdb_7_client__connection_event_trampoline, ((void *)__pyx_v_self->_dispatch_context), ((size_t)__pyx_t_10), (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
11753: self._opts,
11754: _connection_event_trampoline,
11755: <void*>self._dispatch_context,
+11756: <size_t>(connection_event_inbox_capacity or 0),
__pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_connection_event_inbox_capacity); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 11756, __pyx_L1_error) if (!__pyx_t_5) { } else { __pyx_t_22 = __Pyx_PyLong_As_size_t(__pyx_v_connection_event_inbox_capacity); if (unlikely((__pyx_t_22 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 11756, __pyx_L1_error) __pyx_t_10 = __pyx_t_22; goto __pyx_L52_bool_binop_done; } __pyx_t_10 = 0; __pyx_L52_bool_binop_done:;
11757: &err):
+11758: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11758, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 11758, __pyx_L1_error)
11759:
+11760: if username is not None:
__pyx_t_5 = (__pyx_v_username != ((PyObject*)Py_None));
if (__pyx_t_5) {
/* … */
}
+11761: str_to_utf8(b, <PyObject*>username, &c_username)
__pyx_t_4 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_username), (&__pyx_v_c_username)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11761, __pyx_L1_error)
+11762: if not line_sender_opts_username(self._opts, c_username, &err):
__pyx_t_5 = (!line_sender_opts_username(__pyx_v_self->_opts, __pyx_v_c_username, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
+11763: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11763, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 11763, __pyx_L1_error)
11764:
+11765: if password is not None:
__pyx_t_5 = (__pyx_v_password != ((PyObject*)Py_None));
if (__pyx_t_5) {
/* … */
}
+11766: str_to_utf8(b, <PyObject*>password, &c_password)
__pyx_t_4 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_password), (&__pyx_v_c_password)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11766, __pyx_L1_error)
+11767: if not line_sender_opts_password(self._opts, c_password, &err):
__pyx_t_5 = (!line_sender_opts_password(__pyx_v_self->_opts, __pyx_v_c_password, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
+11768: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11768, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 11768, __pyx_L1_error)
11769:
+11770: if token is not None:
__pyx_t_5 = (__pyx_v_token != ((PyObject*)Py_None));
if (__pyx_t_5) {
/* … */
}
+11771: str_to_utf8(b, <PyObject*>token, &c_token)
__pyx_t_4 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_token), (&__pyx_v_c_token)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11771, __pyx_L1_error)
+11772: if not line_sender_opts_token(self._opts, c_token, &err):
__pyx_t_5 = (!line_sender_opts_token(__pyx_v_self->_opts, __pyx_v_c_token, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
+11773: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11773, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 11773, __pyx_L1_error)
11774:
+11775: if oidc_auth is not None:
__pyx_t_5 = (__pyx_v_oidc_auth != Py_None);
if (__pyx_t_5) {
/* … */
}
+11776: if not isinstance(oidc_auth, OidcDeviceAuth):
__pyx_t_5 = __Pyx_TypeCheck(__pyx_v_oidc_auth, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth);
__pyx_t_11 = (!__pyx_t_5);
if (unlikely(__pyx_t_11)) {
/* … */
}
+11777: raise _ConfigTypeError(
__pyx_t_7 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ConfigTypeError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11777, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
+11778: '"oidc_auth" must be an OidcDeviceAuth or None, '
__pyx_t_8 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_oidc_auth_must_be_an_OidcDevice, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11778, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_8}; __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11777, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); } __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 11777, __pyx_L1_error)
+11779: f'not {_fqn(type(oidc_auth))}')
__pyx_t_8 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_oidc_auth)))); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11779, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11779, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+11780: _oidc_require_native_token(oidc_auth)
__pyx_t_4 = __pyx_f_7questdb_7_client__oidc_require_native_token(__pyx_v_oidc_auth); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11780, __pyx_L1_error)
11781: # Distinguish the two states the way `_require_open` does: a NULL
11782: # handle is a provider whose construction never completed, which
11783: # "is closed" misdescribes and sends the caller looking for a
11784: # close() they never made.
+11785: if (<OidcDeviceAuth>oidc_auth)._raw == NULL:
__pyx_t_11 = (((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_oidc_auth)->_raw == NULL);
if (unlikely(__pyx_t_11)) {
/* … */
}
+11786: raise _ConfigValueError('"oidc_auth" is not initialized')
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_ConfigValueError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11786, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_10 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_8))) {
__pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8);
assert(__pyx_t_2);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
__Pyx_INCREF(__pyx_t_2);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
__pyx_t_10 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_oidc_auth_is_not_initialized};
__pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11786, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
}
__Pyx_Raise(__pyx_t_18, 0, 0, 0);
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
__PYX_ERR(0, 11786, __pyx_L1_error)
+11787: if (<OidcDeviceAuth>oidc_auth)._closed:
if (((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_oidc_auth)->_closed) {
/* … */
}
+11788: _raise_oidc_auth_closed()
__pyx_t_17 = __pyx_f_7questdb_7_client__raise_oidc_auth_closed(); if (unlikely(__pyx_t_17 == ((int)-1))) __PYX_ERR(0, 11788, __pyx_L1_error)
11789: # Reject the conflict here, in terms of the parameters the caller
11790: # actually wrote. Native enforces it too, but reports the internal
11791: # config key it knows -- "qwp_ws_token_provider" or
11792: # "http_token_provider" -- which exists in no public API, so a user
11793: # who passed oidc_auth= and token= was told about a symbol they
11794: # cannot find.
+11795: _conflicting = [
{ /* enter inner scope */
__pyx_t_18 = PyList_New(0); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11795, __pyx_L66_error)
__Pyx_GOTREF(__pyx_t_18);
+11796: name for name, value in (
__pyx_t_7 = __pyx_t_1; __Pyx_INCREF(__pyx_t_7); __pyx_t_23 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; for (;;) { if (__pyx_t_23 >= 3) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_23)); #else __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_7, __pyx_t_23); #endif ++__pyx_t_23; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11796, __pyx_L66_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_1))) __PYX_ERR(0, 11796, __pyx_L66_error) if (likely(__pyx_t_1 != Py_None)) { PyObject* sequence = __pyx_t_1; Py_ssize_t size = __Pyx_PyTuple_GET_SIZE(sequence); if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 11796, __pyx_L66_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); __Pyx_INCREF(__pyx_t_2); __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_8); #else __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11796, __pyx_L66_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_8 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11796, __pyx_L66_error) __Pyx_GOTREF(__pyx_t_8); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 11796, __pyx_L66_error) } if (!(likely(PyUnicode_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_2))) __PYX_ERR(0, 11796, __pyx_L66_error) if (!(likely(PyUnicode_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_8))) __PYX_ERR(0, 11796, __pyx_L66_error) __Pyx_XDECREF_SET(__pyx_9genexpr31__pyx_v_name, ((PyObject*)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_XDECREF_SET(__pyx_9genexpr31__pyx_v_value, ((PyObject*)__pyx_t_8)); __pyx_t_8 = 0; /* … */ if (unlikely(__Pyx_ListComp_Append(__pyx_t_18, __pyx_9genexpr31__pyx_v_name))) __PYX_ERR(0, 11795, __pyx_L66_error) /* … */ } __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF(__pyx_9genexpr31__pyx_v_name); __pyx_9genexpr31__pyx_v_name = 0; __Pyx_XDECREF(__pyx_9genexpr31__pyx_v_value); __pyx_9genexpr31__pyx_v_value = 0; goto __pyx_L71_exit_scope; __pyx_L66_error:; __Pyx_XDECREF(__pyx_9genexpr31__pyx_v_name); __pyx_9genexpr31__pyx_v_name = 0; __Pyx_XDECREF(__pyx_9genexpr31__pyx_v_value); __pyx_9genexpr31__pyx_v_value = 0; goto __pyx_L1_error; __pyx_L71_exit_scope:; } /* exit inner scope */ __pyx_v__conflicting = ((PyObject*)__pyx_t_18); __pyx_t_18 = 0;
+11797: ('token', token),
__pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11797, __pyx_L66_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_token); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_n_u_token); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_mstate_global->__pyx_n_u_token) != (0)) __PYX_ERR(0, 11797, __pyx_L66_error); __Pyx_INCREF(__pyx_v_token); __Pyx_GIVEREF(__pyx_v_token); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_token) != (0)) __PYX_ERR(0, 11797, __pyx_L66_error); /* … */ __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11797, __pyx_L66_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_8); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8) != (0)) __PYX_ERR(0, 11797, __pyx_L66_error); __Pyx_GIVEREF(__pyx_t_2); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2) != (0)) __PYX_ERR(0, 11797, __pyx_L66_error); __Pyx_GIVEREF(__pyx_t_7); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_7) != (0)) __PYX_ERR(0, 11797, __pyx_L66_error); __pyx_t_8 = 0; __pyx_t_2 = 0; __pyx_t_7 = 0;
+11798: ('username', username),
__pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11798, __pyx_L66_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_username); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_n_u_username); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_mstate_global->__pyx_n_u_username) != (0)) __PYX_ERR(0, 11798, __pyx_L66_error); __Pyx_INCREF(__pyx_v_username); __Pyx_GIVEREF(__pyx_v_username); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_username) != (0)) __PYX_ERR(0, 11798, __pyx_L66_error);
+11799: ('password', password))
__pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11799, __pyx_L66_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_password); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_n_u_password); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_mstate_global->__pyx_n_u_password) != (0)) __PYX_ERR(0, 11799, __pyx_L66_error); __Pyx_INCREF(__pyx_v_password); __Pyx_GIVEREF(__pyx_v_password); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_password) != (0)) __PYX_ERR(0, 11799, __pyx_L66_error);
+11800: if value is not None]
__pyx_t_11 = (__pyx_9genexpr31__pyx_v_value != ((PyObject*)Py_None));
if (__pyx_t_11) {
/* … */
}
+11801: if _conflicting:
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v__conflicting);
if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 11801, __pyx_L1_error)
__pyx_t_11 = (__pyx_temp != 0);
}
if (unlikely(__pyx_t_11)) {
/* … */
}
+11802: raise QuestDBError(
__pyx_t_7 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11802, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
+11803: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11803, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11803, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
11804: '"oidc_auth" is mutually exclusive with '
+11805: + ', '.join(f'"{name}"' for name in _conflicting)
static PyObject *__pyx_pf_7questdb_7_client_6Sender_18_set_sender_fields_genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_15_genexpr *__pyx_cur_scope;
PyObject *__pyx_r = NULL;
__pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_15_genexpr *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_15_genexpr(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_15_genexpr, __pyx_mstate_global->__pyx_empty_tuple, NULL);
if (unlikely(!__pyx_cur_scope)) {
__pyx_cur_scope = ((struct __pyx_obj_7questdb_7_client___pyx_scope_struct_15_genexpr *)Py_None);
__Pyx_INCREF(Py_None);
__PYX_ERR(0, 11805, __pyx_L1_error)
} else {
__Pyx_GOTREF((PyObject *)__pyx_cur_scope);
}
__pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
__Pyx_INCREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
{
__pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7questdb_7_client_6Sender_18_set_sender_fields_2generator11, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[11]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_Sender__set_sender_fields_locals, __pyx_mstate_global->__pyx_n_u_questdb__client); if (unlikely(!gen)) __PYX_ERR(0, 11805, __pyx_L1_error)
__Pyx_DECREF(__pyx_cur_scope);
__Pyx_RefNannyFinishContext();
return (PyObject *) gen;
}
/* function exit code */
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client.Sender._set_sender_fields.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__Pyx_DECREF((PyObject *)__pyx_cur_scope);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_gb_7questdb_7_client_6Sender_18_set_sender_fields_2generator11(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("genexpr", 0);
__pyx_L3_first_run:;
if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 11805, __pyx_L1_error)
__pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 11805, __pyx_L1_error)
__Pyx_GOTREF(__pyx_r);
if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 11805, __pyx_L1_error) }
__pyx_t_1 = __pyx_cur_scope->__pyx_genexpr_arg_0; __Pyx_INCREF(__pyx_t_1);
__pyx_t_2 = 0;
for (;;) {
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
#if !CYTHON_ASSUME_SAFE_SIZE
if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 11805, __pyx_L1_error)
#endif
if (__pyx_t_2 >= __pyx_temp) break;
}
__pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_1, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
++__pyx_t_2;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11805, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_name);
__Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_name, __pyx_t_3);
__Pyx_GIVEREF(__pyx_t_3);
__pyx_t_3 = 0;
__pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_name, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11805, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_4[0] = __pyx_mstate_global->__pyx_kp_u__26;
__pyx_t_4[1] = __pyx_t_3;
__pyx_t_4[2] = __pyx_mstate_global->__pyx_kp_u__26;
__pyx_t_5 = 2;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4[1]);
#endif
__pyx_t_6 = 0;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_6 |= __Pyx_PyUnicode_KIND_04(__pyx_t_4[1]);
#endif
__pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, __pyx_t_5, __pyx_t_6);
if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11805, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_GIVEREF(__pyx_t_7);
if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_r, __pyx_t_7))) __PYX_ERR(0, 11805, __pyx_L1_error)
__pyx_t_7 = 0;
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_r); __pyx_r = 0;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_7);
if (__Pyx_PyErr_Occurred()) {
__Pyx_Generator_Replace_StopIteration(0);
__Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
}
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
#if !CYTHON_USE_EXC_INFO_STACK
__Pyx_Coroutine_ResetAndClearException(__pyx_generator);
#endif
__pyx_generator->resume_label = -1;
__Pyx_Coroutine_clear((PyObject*)__pyx_generator);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_gb_7questdb_7_client_6Sender_18_set_sender_fields_5generator12(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
__pyx_t_8 = __pyx_pf_7questdb_7_client_6Sender_18_set_sender_fields_genexpr(NULL, __pyx_v__conflicting); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11805, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_21 = __Pyx_Generator_GetInlinedResult(__pyx_t_8); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 11805, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_21);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_8 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__28, __pyx_t_21); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11805, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
__pyx_t_21 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_oidc_auth_is_mutually_exclusive, __pyx_t_8); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 11805, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_21);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_15_genexpr {
PyObject_HEAD
PyObject *__pyx_genexpr_arg_0;
PyObject *__pyx_v_name;
};
+11806: + '. An OIDC provider supplies the credential itself; '
__pyx_t_8 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_21, __pyx_mstate_global->__pyx_kp_u_An_OIDC_provider_supplies_the_c); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11806, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_1))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_1, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_2, __pyx_t_8}; __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11802, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); } __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 11802, __pyx_L1_error)
11807: 'remove the fixed credential, or drop "oidc_auth" to keep '
11808: 'using it.')
+11809: if not line_sender_opts_oidc_auth(
__pyx_t_11 = (!line_sender_opts_oidc_auth(__pyx_v_self->_opts, ((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_oidc_auth)->_raw, (&__pyx_v_err)));
if (unlikely(__pyx_t_11)) {
/* … */
}
11810: self._opts, (<OidcDeviceAuth>oidc_auth)._raw, &err):
+11811: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11811, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 11811, __pyx_L1_error)
+11812: self._oidc_auth = oidc_auth
__Pyx_INCREF(__pyx_v_oidc_auth); __Pyx_GIVEREF(__pyx_v_oidc_auth); __Pyx_GOTREF(__pyx_v_self->_oidc_auth); __Pyx_DECREF_SET(__pyx_v_self->_oidc_auth, __pyx_v_oidc_auth);
11813:
+11814: if bearer_token_provider is not None:
__pyx_t_11 = (__pyx_v_bearer_token_provider != Py_None);
if (__pyx_t_11) {
/* … */
}
+11815: if oidc_auth is not None:
__pyx_t_11 = (__pyx_v_oidc_auth != Py_None);
if (unlikely(__pyx_t_11)) {
/* … */
}
+11816: raise QuestDBError(
__pyx_t_1 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11816, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
+11817: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11817, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11817, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_8))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_8, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_bearer_token_provider_and_oidc}; __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11816, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); } __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 11816, __pyx_L1_error)
11818: '"bearer_token_provider" and "oidc_auth" are mutually '
11819: 'exclusive: attach one token provider.')
+11820: _conflicting = [
{ /* enter inner scope */
__pyx_t_18 = PyList_New(0); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11820, __pyx_L78_error)
__Pyx_GOTREF(__pyx_t_18);
+11821: name for name, value in (
__pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_23 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; for (;;) { if (__pyx_t_23 >= 3) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_2 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_23)); #else __pyx_t_2 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_23); #endif ++__pyx_t_23; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11821, __pyx_L78_error) __Pyx_GOTREF(__pyx_t_2); if (!(likely(PyTuple_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_2))) __PYX_ERR(0, 11821, __pyx_L78_error) if (likely(__pyx_t_2 != Py_None)) { PyObject* sequence = __pyx_t_2; Py_ssize_t size = __Pyx_PyTuple_GET_SIZE(sequence); if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 11821, __pyx_L78_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); __Pyx_INCREF(__pyx_t_7); __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_8); #else __pyx_t_7 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11821, __pyx_L78_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11821, __pyx_L78_error) __Pyx_GOTREF(__pyx_t_8); #endif __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else { __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 11821, __pyx_L78_error) } if (!(likely(PyUnicode_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_7))) __PYX_ERR(0, 11821, __pyx_L78_error) if (!(likely(PyUnicode_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_8))) __PYX_ERR(0, 11821, __pyx_L78_error) __Pyx_XDECREF_SET(__pyx_9genexpr33__pyx_v_name, ((PyObject*)__pyx_t_7)); __pyx_t_7 = 0; __Pyx_XDECREF_SET(__pyx_9genexpr33__pyx_v_value, ((PyObject*)__pyx_t_8)); __pyx_t_8 = 0; /* … */ if (unlikely(__Pyx_ListComp_Append(__pyx_t_18, __pyx_9genexpr33__pyx_v_name))) __PYX_ERR(0, 11820, __pyx_L78_error) /* … */ } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_9genexpr33__pyx_v_name); __pyx_9genexpr33__pyx_v_name = 0; __Pyx_XDECREF(__pyx_9genexpr33__pyx_v_value); __pyx_9genexpr33__pyx_v_value = 0; goto __pyx_L83_exit_scope; __pyx_L78_error:; __Pyx_XDECREF(__pyx_9genexpr33__pyx_v_name); __pyx_9genexpr33__pyx_v_name = 0; __Pyx_XDECREF(__pyx_9genexpr33__pyx_v_value); __pyx_9genexpr33__pyx_v_value = 0; goto __pyx_L1_error; __pyx_L83_exit_scope:; } /* exit inner scope */ __Pyx_XDECREF_SET(__pyx_v__conflicting, ((PyObject*)__pyx_t_18)); __pyx_t_18 = 0;
+11822: ('token', token),
__pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11822, __pyx_L78_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_token); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_n_u_token); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_mstate_global->__pyx_n_u_token) != (0)) __PYX_ERR(0, 11822, __pyx_L78_error); __Pyx_INCREF(__pyx_v_token); __Pyx_GIVEREF(__pyx_v_token); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_token) != (0)) __PYX_ERR(0, 11822, __pyx_L78_error); /* … */ __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11822, __pyx_L78_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_8); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8) != (0)) __PYX_ERR(0, 11822, __pyx_L78_error); __Pyx_GIVEREF(__pyx_t_7); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_7) != (0)) __PYX_ERR(0, 11822, __pyx_L78_error); __Pyx_GIVEREF(__pyx_t_1); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_1) != (0)) __PYX_ERR(0, 11822, __pyx_L78_error); __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_1 = 0;
+11823: ('username', username),
__pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11823, __pyx_L78_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_username); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_n_u_username); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_mstate_global->__pyx_n_u_username) != (0)) __PYX_ERR(0, 11823, __pyx_L78_error); __Pyx_INCREF(__pyx_v_username); __Pyx_GIVEREF(__pyx_v_username); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_username) != (0)) __PYX_ERR(0, 11823, __pyx_L78_error);
+11824: ('password', password))
__pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11824, __pyx_L78_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_password); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_n_u_password); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_mstate_global->__pyx_n_u_password) != (0)) __PYX_ERR(0, 11824, __pyx_L78_error); __Pyx_INCREF(__pyx_v_password); __Pyx_GIVEREF(__pyx_v_password); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_password) != (0)) __PYX_ERR(0, 11824, __pyx_L78_error);
+11825: if value is not None]
__pyx_t_11 = (__pyx_9genexpr33__pyx_v_value != ((PyObject*)Py_None));
if (__pyx_t_11) {
/* … */
}
+11826: if _conflicting:
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v__conflicting);
if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 11826, __pyx_L1_error)
__pyx_t_11 = (__pyx_temp != 0);
}
if (unlikely(__pyx_t_11)) {
/* … */
}
+11827: raise QuestDBError(
__pyx_t_1 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11827, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
+11828: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11828, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11828, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
11829: '"bearer_token_provider" is mutually exclusive with '
+11830: + ', '.join(f'"{name}"' for name in _conflicting)
static PyObject *__pyx_pf_7questdb_7_client_6Sender_18_set_sender_fields_3genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_16_genexpr *__pyx_cur_scope;
PyObject *__pyx_r = NULL;
__pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_16_genexpr *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_16_genexpr(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_16_genexpr, __pyx_mstate_global->__pyx_empty_tuple, NULL);
if (unlikely(!__pyx_cur_scope)) {
__pyx_cur_scope = ((struct __pyx_obj_7questdb_7_client___pyx_scope_struct_16_genexpr *)Py_None);
__Pyx_INCREF(Py_None);
__PYX_ERR(0, 11830, __pyx_L1_error)
} else {
__Pyx_GOTREF((PyObject *)__pyx_cur_scope);
}
__pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
__Pyx_INCREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
{
__pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7questdb_7_client_6Sender_18_set_sender_fields_5generator12, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[12]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_Sender__set_sender_fields_locals, __pyx_mstate_global->__pyx_n_u_questdb__client); if (unlikely(!gen)) __PYX_ERR(0, 11830, __pyx_L1_error)
__Pyx_DECREF(__pyx_cur_scope);
__Pyx_RefNannyFinishContext();
return (PyObject *) gen;
}
/* function exit code */
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client.Sender._set_sender_fields.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__Pyx_DECREF((PyObject *)__pyx_cur_scope);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_gb_7questdb_7_client_6Sender_18_set_sender_fields_5generator12(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("genexpr", 0);
__pyx_L3_first_run:;
if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 11830, __pyx_L1_error)
__pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 11830, __pyx_L1_error)
__Pyx_GOTREF(__pyx_r);
if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 11830, __pyx_L1_error) }
__pyx_t_1 = __pyx_cur_scope->__pyx_genexpr_arg_0; __Pyx_INCREF(__pyx_t_1);
__pyx_t_2 = 0;
for (;;) {
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
#if !CYTHON_ASSUME_SAFE_SIZE
if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 11830, __pyx_L1_error)
#endif
if (__pyx_t_2 >= __pyx_temp) break;
}
__pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_1, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
++__pyx_t_2;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11830, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_name);
__Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_name, __pyx_t_3);
__Pyx_GIVEREF(__pyx_t_3);
__pyx_t_3 = 0;
__pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_name, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11830, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_4[0] = __pyx_mstate_global->__pyx_kp_u__26;
__pyx_t_4[1] = __pyx_t_3;
__pyx_t_4[2] = __pyx_mstate_global->__pyx_kp_u__26;
__pyx_t_5 = 2;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4[1]);
#endif
__pyx_t_6 = 0;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_6 |= __Pyx_PyUnicode_KIND_04(__pyx_t_4[1]);
#endif
__pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, __pyx_t_5, __pyx_t_6);
if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11830, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_GIVEREF(__pyx_t_7);
if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_r, __pyx_t_7))) __PYX_ERR(0, 11830, __pyx_L1_error)
__pyx_t_7 = 0;
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_r); __pyx_r = 0;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_7);
if (__Pyx_PyErr_Occurred()) {
__Pyx_Generator_Replace_StopIteration(0);
__Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
}
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
#if !CYTHON_USE_EXC_INFO_STACK
__Pyx_Coroutine_ResetAndClearException(__pyx_generator);
#endif
__pyx_generator->resume_label = -1;
__Pyx_Coroutine_clear((PyObject*)__pyx_generator);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_8 = __pyx_pf_7questdb_7_client_6Sender_18_set_sender_fields_3genexpr(NULL, __pyx_v__conflicting); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11830, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_21 = __Pyx_Generator_GetInlinedResult(__pyx_t_8); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 11830, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_21);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_8 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__28, __pyx_t_21); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11830, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
__pyx_t_21 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_bearer_token_provider_is_mutual, __pyx_t_8); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 11830, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_21);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_16_genexpr {
PyObject_HEAD
PyObject *__pyx_genexpr_arg_0;
PyObject *__pyx_v_name;
};
+11831: + '. A token provider supplies the credential itself; '
__pyx_t_8 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_21, __pyx_mstate_global->__pyx_kp_u_A_token_provider_supplies_the_c); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11831, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_7, __pyx_t_8}; __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11827, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); } __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 11827, __pyx_L1_error)
11832: 'remove the fixed credential, or drop '
11833: '"bearer_token_provider" to keep using it.')
+11834: _holder = _tp_resolve_bearer_token_provider(bearer_token_provider)
__pyx_t_18 = __pyx_f_7questdb_7_client__tp_resolve_bearer_token_provider(__pyx_v_bearer_token_provider); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11834, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __pyx_v__holder = __pyx_t_18; __pyx_t_18 = 0;
+11835: if not line_sender_opts_token_provider(
__pyx_t_11 = (!line_sender_opts_token_provider(__pyx_v_self->_opts, __pyx_t_24, (&__pyx_v_err)));
if (unlikely(__pyx_t_11)) {
/* … */
}
+11836: self._opts, _tp_holder_raw(_holder), &err):
__pyx_t_24 = __pyx_f_7questdb_7_client__tp_holder_raw(__pyx_v__holder); if (unlikely(__pyx_t_24 == ((void *)NULL))) __PYX_ERR(0, 11836, __pyx_L1_error)
+11837: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11837, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 11837, __pyx_L1_error)
+11838: _sender_hold_bearer(self, _holder)
__pyx_t_4 = __pyx_f_7questdb_7_client__sender_hold_bearer(__pyx_v_self, __pyx_v__holder); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11838, __pyx_L1_error)
11839:
+11840: if oidc_auth is not None or bearer_token_provider is not None:
__pyx_t_5 = (__pyx_v_oidc_auth != Py_None);
if (!__pyx_t_5) {
} else {
__pyx_t_11 = __pyx_t_5;
goto __pyx_L87_bool_binop_done;
}
__pyx_t_5 = (__pyx_v_bearer_token_provider != Py_None);
__pyx_t_11 = __pyx_t_5;
__pyx_L87_bool_binop_done:;
if (__pyx_t_11) {
/* … */
}
+11841: _tp_warn_if_cleartext(protocol)
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_tp_warn_if_cleartext); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11841, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_10 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_8))) {
__pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8);
assert(__pyx_t_2);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
__Pyx_INCREF(__pyx_t_2);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
__pyx_t_10 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_protocol};
__pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11841, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
}
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
11842:
+11843: if token_x is not None:
__pyx_t_11 = (__pyx_v_token_x != ((PyObject*)Py_None));
if (__pyx_t_11) {
/* … */
}
+11844: str_to_utf8(b, <PyObject*>token_x, &c_token_x)
__pyx_t_4 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_token_x), (&__pyx_v_c_token_x)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11844, __pyx_L1_error)
+11845: if not line_sender_opts_token_x(self._opts, c_token_x, &err):
__pyx_t_11 = (!line_sender_opts_token_x(__pyx_v_self->_opts, __pyx_v_c_token_x, (&__pyx_v_err)));
if (unlikely(__pyx_t_11)) {
/* … */
}
+11846: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11846, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 11846, __pyx_L1_error)
11847:
+11848: if token_y is not None:
__pyx_t_11 = (__pyx_v_token_y != ((PyObject*)Py_None));
if (__pyx_t_11) {
/* … */
}
+11849: str_to_utf8(b, <PyObject*>token_y, &c_token_y)
__pyx_t_4 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_token_y), (&__pyx_v_c_token_y)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11849, __pyx_L1_error)
+11850: if not line_sender_opts_token_y(self._opts, c_token_y, &err):
__pyx_t_11 = (!line_sender_opts_token_y(__pyx_v_self->_opts, __pyx_v_c_token_y, (&__pyx_v_err)));
if (unlikely(__pyx_t_11)) {
/* … */
}
+11851: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11851, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 11851, __pyx_L1_error)
11852:
+11853: if protocol_version is not None:
__pyx_t_11 = (__pyx_v_protocol_version != Py_None);
if (__pyx_t_11) {
/* … */
}
+11854: if protocol_version == 'auto':
__pyx_t_11 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_n_u_auto, Py_EQ); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 11854, __pyx_L1_error) if (__pyx_t_11) { goto __pyx_L94; }
11855: pass
+11856: elif (protocol_version == 1) or (protocol_version == '1'):
__pyx_t_5 = (__Pyx_PyLong_BoolEqObjC(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_int_1, 1, 0)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 11856, __pyx_L1_error) if (!__pyx_t_5) { } else { __pyx_t_11 = __pyx_t_5; goto __pyx_L95_bool_binop_done; } __pyx_t_5 = (__Pyx_PyObject_Equals_obj_ch49(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_kp_u_1, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 11856, __pyx_L1_error) __pyx_t_11 = __pyx_t_5; __pyx_L95_bool_binop_done:; if (__pyx_t_11) { /* … */ goto __pyx_L94; }
+11857: if not line_sender_opts_protocol_version(
__pyx_t_11 = (!line_sender_opts_protocol_version(__pyx_v_self->_opts, line_sender_protocol_version_1, (&__pyx_v_err)));
if (unlikely(__pyx_t_11)) {
/* … */
}
11858: self._opts, line_sender_protocol_version_1, &err):
+11859: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11859, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 11859, __pyx_L1_error)
+11860: elif (protocol_version == 2) or (protocol_version == '2'):
__pyx_t_5 = (__Pyx_PyLong_BoolEqObjC(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_int_2, 2, 0)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 11860, __pyx_L1_error) if (!__pyx_t_5) { } else { __pyx_t_11 = __pyx_t_5; goto __pyx_L98_bool_binop_done; } __pyx_t_5 = (__Pyx_PyObject_Equals_obj_ch50(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_kp_u_2, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 11860, __pyx_L1_error) __pyx_t_11 = __pyx_t_5; __pyx_L98_bool_binop_done:; if (__pyx_t_11) { /* … */ goto __pyx_L94; }
+11861: if not line_sender_opts_protocol_version(
__pyx_t_11 = (!line_sender_opts_protocol_version(__pyx_v_self->_opts, line_sender_protocol_version_2, (&__pyx_v_err)));
if (unlikely(__pyx_t_11)) {
/* … */
}
11862: self._opts, line_sender_protocol_version_2, &err):
+11863: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11863, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 11863, __pyx_L1_error)
+11864: elif (protocol_version == 3) or (protocol_version == '3'):
__pyx_t_5 = (__Pyx_PyLong_BoolEqObjC(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_int_3, 3, 0)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 11864, __pyx_L1_error) if (!__pyx_t_5) { } else { __pyx_t_11 = __pyx_t_5; goto __pyx_L101_bool_binop_done; } __pyx_t_5 = (__Pyx_PyObject_Equals_obj_ch51(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_kp_u_3, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 11864, __pyx_L1_error) __pyx_t_11 = __pyx_t_5; __pyx_L101_bool_binop_done:; if (likely(__pyx_t_11)) { /* … */ goto __pyx_L94; }
+11865: if not line_sender_opts_protocol_version(
__pyx_t_11 = (!line_sender_opts_protocol_version(__pyx_v_self->_opts, line_sender_protocol_version_3, (&__pyx_v_err)));
if (unlikely(__pyx_t_11)) {
/* … */
}
11866: self._opts, line_sender_protocol_version_3, &err):
+11867: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11867, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 11867, __pyx_L1_error)
11868: else:
+11869: raise QuestDBError(
/*else*/ {
__pyx_t_8 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11869, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
+11870: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11870, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11870, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+11871: '"protocol_version" must be None, "auto", 1-3' +
__pyx_t_7 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_protocol_version_must_be_None_a, __pyx_t_21); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11871, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_8); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_1, __pyx_t_7}; __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11869, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); } __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 11869, __pyx_L1_error) } __pyx_L94:;
+11872: f' not {protocol_version!r}')
__pyx_t_7 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_protocol_version), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11872, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_21 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_not_2, __pyx_t_7); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 11872, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_21); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
11873:
+11874: if auth_timeout is not None:
__pyx_t_11 = (__pyx_v_auth_timeout != Py_None);
if (__pyx_t_11) {
/* … */
}
+11875: if _is_int_not_bool(auth_timeout):
__pyx_t_11 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_auth_timeout); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11875, __pyx_L1_error) if (__pyx_t_11) { /* … */ goto __pyx_L105; }
+11876: c_auth_timeout = auth_timeout
__pyx_t_25 = __Pyx_PyLong_As_uint64_t(__pyx_v_auth_timeout); if (unlikely((__pyx_t_25 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 11876, __pyx_L1_error) __pyx_v_c_auth_timeout = __pyx_t_25;
+11877: elif isinstance(auth_timeout, cp_timedelta):
__pyx_t_11 = __Pyx_TypeCheck(__pyx_v_auth_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta);
if (likely(__pyx_t_11)) {
/* … */
goto __pyx_L105;
}
+11878: c_auth_timeout = _timedelta_to_millis(auth_timeout)
if (!(likely(((__pyx_v_auth_timeout) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_auth_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta))))) __PYX_ERR(0, 11878, __pyx_L1_error) __pyx_t_25 = __pyx_f_7questdb_7_client__timedelta_to_millis(((PyDateTime_Delta *)__pyx_v_auth_timeout)); if (unlikely(__pyx_t_25 == ((uint64_t)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 11878, __pyx_L1_error) __pyx_v_c_auth_timeout = __pyx_t_25;
11879: else:
+11880: raise TypeError(
/*else*/ {
__pyx_t_2 = NULL;
+11881: '"auth_timeout" must be an int or a timedelta, '
__pyx_t_7 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auth_timeout_must_be_an_int_or, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11881, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_7}; __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11880, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); } __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 11880, __pyx_L1_error) } __pyx_L105:;
+11882: f'not {_fqn(type(auth_timeout))}')
__pyx_t_7 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_auth_timeout)))); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11882, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11882, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+11883: if not line_sender_opts_auth_timeout(self._opts, c_auth_timeout, &err):
__pyx_t_11 = (!line_sender_opts_auth_timeout(__pyx_v_self->_opts, __pyx_v_c_auth_timeout, (&__pyx_v_err)));
if (unlikely(__pyx_t_11)) {
/* … */
}
+11884: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11884, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 11884, __pyx_L1_error)
11885:
+11886: if tls_verify is not None:
__pyx_t_11 = (__pyx_v_tls_verify != Py_None);
if (__pyx_t_11) {
/* … */
}
+11887: if (tls_verify is True) or (tls_verify == 'on'):
__pyx_t_5 = (__pyx_v_tls_verify == Py_True);
if (!__pyx_t_5) {
} else {
__pyx_t_11 = __pyx_t_5;
goto __pyx_L109_bool_binop_done;
}
__pyx_t_5 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_tls_verify, __pyx_mstate_global->__pyx_n_u_on, Py_EQ); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 11887, __pyx_L1_error)
__pyx_t_11 = __pyx_t_5;
__pyx_L109_bool_binop_done:;
if (__pyx_t_11) {
/* … */
goto __pyx_L108;
}
+11888: c_tls_verify = True
__pyx_v_c_tls_verify = 1;
+11889: elif (tls_verify is False) or (tls_verify == 'unsafe_off'):
__pyx_t_5 = (__pyx_v_tls_verify == Py_False);
if (!__pyx_t_5) {
} else {
__pyx_t_11 = __pyx_t_5;
goto __pyx_L111_bool_binop_done;
}
__pyx_t_5 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_tls_verify, __pyx_mstate_global->__pyx_n_u_unsafe_off, Py_EQ); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 11889, __pyx_L1_error)
__pyx_t_11 = __pyx_t_5;
__pyx_L111_bool_binop_done:;
if (likely(__pyx_t_11)) {
/* … */
goto __pyx_L108;
}
+11890: c_tls_verify = False
__pyx_v_c_tls_verify = 0;
11891: else:
+11892: raise ValueError(
/*else*/ {
__pyx_t_7 = NULL;
+11893: '"tls_verify" must be a bool, "on" or "unsafe_off", '
__pyx_t_1 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_tls_verify_must_be_a_bool_on_or, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11893, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_1}; __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11892, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); } __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 11892, __pyx_L1_error) } __pyx_L108:;
+11894: f'not {tls_verify!r}')
__pyx_t_2 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_tls_verify), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11894, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2);
+11895: if not line_sender_opts_tls_verify(self._opts, c_tls_verify, &err):
__pyx_t_11 = (!line_sender_opts_tls_verify(__pyx_v_self->_opts, __pyx_v_c_tls_verify, (&__pyx_v_err)));
if (unlikely(__pyx_t_11)) {
/* … */
}
+11896: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11896, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 11896, __pyx_L1_error)
11897:
+11898: if tls_roots is not None:
__pyx_t_11 = (__pyx_v_tls_roots != Py_None);
if (__pyx_t_11) {
/* … */
}
+11899: tls_roots = str(tls_roots)
__pyx_t_18 = __Pyx_PyObject_Unicode(__pyx_v_tls_roots); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11899, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF_SET(__pyx_v_tls_roots, __pyx_t_18); __pyx_t_18 = 0;
+11900: str_to_utf8(b, <PyObject*>tls_roots, &c_tls_roots)
__pyx_t_4 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_tls_roots), (&__pyx_v_c_tls_roots)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11900, __pyx_L1_error)
+11901: if not line_sender_opts_tls_roots(self._opts, c_tls_roots, &err):
__pyx_t_11 = (!line_sender_opts_tls_roots(__pyx_v_self->_opts, __pyx_v_c_tls_roots, (&__pyx_v_err)));
if (unlikely(__pyx_t_11)) {
/* … */
}
+11902: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11902, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 11902, __pyx_L1_error)
11903:
+11904: if tls_roots_password is not None:
__pyx_t_11 = (__pyx_v_tls_roots_password != Py_None);
if (__pyx_t_11) {
/* … */
}
+11905: str_to_utf8(b, <PyObject*>tls_roots_password, &c_tls_roots_password)
__pyx_t_4 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_tls_roots_password), (&__pyx_v_c_tls_roots_password)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11905, __pyx_L1_error)
+11906: if not line_sender_opts_tls_roots_password(
__pyx_t_11 = (!line_sender_opts_tls_roots_password(__pyx_v_self->_opts, __pyx_v_c_tls_roots_password, (&__pyx_v_err)));
if (unlikely(__pyx_t_11)) {
/* … */
}
11907: self._opts, c_tls_roots_password, &err):
+11908: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11908, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 11908, __pyx_L1_error)
11909:
+11910: if tls_ca is not None:
__pyx_t_11 = (__pyx_v_tls_ca != Py_None);
if (__pyx_t_11) {
/* … */
goto __pyx_L118;
}
+11911: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
goto __pyx_L124_try_end;
__pyx_L119_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
__Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
__pyx_L121_except_error:;
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_15, __pyx_t_14, __pyx_t_13);
goto __pyx_L1_error;
__pyx_L124_try_end:;
}
+11912: c_tls_ca = TlsCa.parse(tls_ca).c_value
__pyx_t_1 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_TlsCa); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11912, __pyx_L119_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_parse); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11912, __pyx_L119_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__pyx_t_10 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_2))) {
__pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
assert(__pyx_t_1);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
__Pyx_INCREF(__pyx_t_1);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
__pyx_t_10 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_tls_ca};
__pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11912, __pyx_L119_error)
__Pyx_GOTREF(__pyx_t_18);
}
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_c_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11912, __pyx_L119_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
__pyx_t_26 = ((enum line_sender_ca)__Pyx_PyLong_As_enum__line_sender_ca(__pyx_t_2)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 11912, __pyx_L119_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_v_c_tls_ca = __pyx_t_26;
+11913: except ValueError:
__pyx_t_17 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_ValueError)))); if (__pyx_t_17) { __Pyx_AddTraceback("questdb._client.Sender._set_sender_fields", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_18, &__pyx_t_1) < 0) __PYX_ERR(0, 11913, __pyx_L121_except_error) __Pyx_XGOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_t_18); __Pyx_XGOTREF(__pyx_t_1);
+11914: raise QuestDBError(
__pyx_t_8 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 11914, __pyx_L121_except_error)
__Pyx_GOTREF(__pyx_t_21);
+11915: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 11915, __pyx_L121_except_error) __Pyx_GOTREF(__pyx_t_20); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 11915, __pyx_L121_except_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+11916: f'"tls_ca" has invalid value: {tls_ca!r}')
__pyx_t_20 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_tls_ca), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 11916, __pyx_L121_except_error) __Pyx_GOTREF(__pyx_t_20); __pyx_t_19 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_tls_ca_has_invalid_value, __pyx_t_20); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11916, __pyx_L121_except_error) __Pyx_GOTREF(__pyx_t_19); __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_21))) { __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_21); assert(__pyx_t_8); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_21); __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_21, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_9, __pyx_t_19}; __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_21, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11914, __pyx_L121_except_error) __Pyx_GOTREF(__pyx_t_7); } __Pyx_Raise(__pyx_t_7, 0, 0, 0); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __PYX_ERR(0, 11914, __pyx_L121_except_error) } goto __pyx_L121_except_error;
+11917: if not line_sender_opts_tls_ca(self._opts, c_tls_ca, &err):
__pyx_t_11 = (!line_sender_opts_tls_ca(__pyx_v_self->_opts, __pyx_v_c_tls_ca, (&__pyx_v_err)));
if (unlikely(__pyx_t_11)) {
/* … */
}
+11918: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11918, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11918, __pyx_L1_error)
+11919: elif protocol.tls_enabled and tls_roots is None:
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_protocol, __pyx_mstate_global->__pyx_n_u_tls_enabled); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11919, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 11919, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_5) { } else { __pyx_t_11 = __pyx_t_5; goto __pyx_L128_bool_binop_done; } __pyx_t_5 = (__pyx_v_tls_roots == Py_None); __pyx_t_11 = __pyx_t_5; __pyx_L128_bool_binop_done:; if (__pyx_t_11) { /* … */ } __pyx_L118:;
11920: # Set different default for Python than the the Rust default.
11921: # We don't set it if `tls_roots` is set, as it would override it.
+11922: c_tls_ca = line_sender_ca_webpki_and_os_roots
__pyx_v_c_tls_ca = line_sender_ca_webpki_and_os_roots;
+11923: if not line_sender_opts_tls_ca(self._opts, c_tls_ca, &err):
__pyx_t_11 = (!line_sender_opts_tls_ca(__pyx_v_self->_opts, __pyx_v_c_tls_ca, (&__pyx_v_err)));
if (unlikely(__pyx_t_11)) {
/* … */
}
+11924: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11924, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11924, __pyx_L1_error)
11925:
+11926: if max_buf_size is not None:
__pyx_t_11 = (__pyx_v_max_buf_size != Py_None);
if (__pyx_t_11) {
/* … */
}
+11927: if not _is_int_not_bool(max_buf_size):
__pyx_t_11 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_max_buf_size); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11927, __pyx_L1_error) __pyx_t_5 = (!__pyx_t_11); if (unlikely(__pyx_t_5)) { /* … */ }
+11928: raise TypeError(
__pyx_t_18 = NULL;
+11929: '"max_buf_size" must be an int, '
__pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_max_buf_size_must_be_an_int_not, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11929, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_18, __pyx_t_2}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11928, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11928, __pyx_L1_error)
+11930: f'not {_fqn(type(max_buf_size))}')
__pyx_t_2 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_max_buf_size)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11930, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11930, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+11931: c_max_buf_size = max_buf_size
__pyx_t_25 = __Pyx_PyLong_As_uint64_t(__pyx_v_max_buf_size); if (unlikely((__pyx_t_25 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 11931, __pyx_L1_error) __pyx_v_c_max_buf_size = __pyx_t_25;
+11932: if not line_sender_opts_max_buf_size(self._opts, c_max_buf_size, &err):
__pyx_t_5 = (!line_sender_opts_max_buf_size(__pyx_v_self->_opts, __pyx_v_c_max_buf_size, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
+11933: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11933, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11933, __pyx_L1_error)
11934:
+11935: if retry_timeout is not None:
__pyx_t_5 = (__pyx_v_retry_timeout != Py_None);
if (__pyx_t_5) {
/* … */
}
+11936: if _is_int_not_bool(retry_timeout):
__pyx_t_5 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_retry_timeout); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11936, __pyx_L1_error) if (__pyx_t_5) { /* … */ goto __pyx_L135; }
+11937: c_retry_timeout = retry_timeout
__pyx_t_25 = __Pyx_PyLong_As_uint64_t(__pyx_v_retry_timeout); if (unlikely((__pyx_t_25 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 11937, __pyx_L1_error) __pyx_v_c_retry_timeout = __pyx_t_25;
+11938: if not line_sender_opts_retry_timeout(self._opts, c_retry_timeout, &err):
__pyx_t_5 = (!line_sender_opts_retry_timeout(__pyx_v_self->_opts, __pyx_v_c_retry_timeout, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
+11939: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11939, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11939, __pyx_L1_error)
+11940: elif isinstance(retry_timeout, cp_timedelta):
__pyx_t_5 = __Pyx_TypeCheck(__pyx_v_retry_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta);
if (likely(__pyx_t_5)) {
/* … */
goto __pyx_L135;
}
+11941: c_retry_timeout = _timedelta_to_millis(retry_timeout)
if (!(likely(((__pyx_v_retry_timeout) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_retry_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta))))) __PYX_ERR(0, 11941, __pyx_L1_error) __pyx_t_25 = __pyx_f_7questdb_7_client__timedelta_to_millis(((PyDateTime_Delta *)__pyx_v_retry_timeout)); if (unlikely(__pyx_t_25 == ((uint64_t)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 11941, __pyx_L1_error) __pyx_v_c_retry_timeout = __pyx_t_25;
+11942: if not line_sender_opts_retry_timeout(self._opts, c_retry_timeout, &err):
__pyx_t_5 = (!line_sender_opts_retry_timeout(__pyx_v_self->_opts, __pyx_v_c_retry_timeout, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
+11943: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11943, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11943, __pyx_L1_error)
11944: else:
+11945: raise TypeError(
/*else*/ {
__pyx_t_2 = NULL;
+11946: '"retry_timeout" must be an int or a timedelta, '
__pyx_t_18 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_retry_timeout_must_be_an_int_or, __pyx_t_7); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11946, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_18}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11945, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11945, __pyx_L1_error) } __pyx_L135:;
+11947: f'not {_fqn(type(retry_timeout))}')
__pyx_t_18 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_retry_timeout)))); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11947, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_t_18); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11947, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
11948:
+11949: if retry_max_backoff is not None:
__pyx_t_5 = (__pyx_v_retry_max_backoff != Py_None);
if (__pyx_t_5) {
/* … */
}
+11950: if _is_int_not_bool(retry_max_backoff):
__pyx_t_5 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_retry_max_backoff); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11950, __pyx_L1_error) if (__pyx_t_5) { /* … */ goto __pyx_L139; }
+11951: c_retry_max_backoff = retry_max_backoff
__pyx_t_25 = __Pyx_PyLong_As_uint64_t(__pyx_v_retry_max_backoff); if (unlikely((__pyx_t_25 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 11951, __pyx_L1_error) __pyx_v_c_retry_max_backoff = __pyx_t_25;
+11952: if not line_sender_opts_retry_max_backoff(
__pyx_t_5 = (!line_sender_opts_retry_max_backoff(__pyx_v_self->_opts, __pyx_v_c_retry_max_backoff, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
11953: self._opts, c_retry_max_backoff, &err):
+11954: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11954, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11954, __pyx_L1_error)
+11955: elif isinstance(retry_max_backoff, cp_timedelta):
__pyx_t_5 = __Pyx_TypeCheck(__pyx_v_retry_max_backoff, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta);
if (likely(__pyx_t_5)) {
/* … */
goto __pyx_L139;
}
+11956: c_retry_max_backoff = _timedelta_to_millis(retry_max_backoff)
if (!(likely(((__pyx_v_retry_max_backoff) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_retry_max_backoff, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta))))) __PYX_ERR(0, 11956, __pyx_L1_error) __pyx_t_25 = __pyx_f_7questdb_7_client__timedelta_to_millis(((PyDateTime_Delta *)__pyx_v_retry_max_backoff)); if (unlikely(__pyx_t_25 == ((uint64_t)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 11956, __pyx_L1_error) __pyx_v_c_retry_max_backoff = __pyx_t_25;
+11957: if not line_sender_opts_retry_max_backoff(
__pyx_t_5 = (!line_sender_opts_retry_max_backoff(__pyx_v_self->_opts, __pyx_v_c_retry_max_backoff, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
11958: self._opts, c_retry_max_backoff, &err):
+11959: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11959, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11959, __pyx_L1_error)
11960: else:
+11961: raise TypeError(
/*else*/ {
__pyx_t_18 = NULL;
+11962: '"retry_max_backoff" must be an int or a timedelta, '
__pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_retry_max_backoff_must_be_an_in, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11962, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_18, __pyx_t_2}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11961, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11961, __pyx_L1_error) } __pyx_L139:;
+11963: f'not {_fqn(type(retry_max_backoff))}')
__pyx_t_2 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_retry_max_backoff)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11963, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11963, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
11964:
+11965: if request_min_throughput is not None:
__pyx_t_5 = (__pyx_v_request_min_throughput != Py_None);
if (__pyx_t_5) {
/* … */
}
+11966: if not _is_int_not_bool(request_min_throughput):
__pyx_t_5 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_request_min_throughput); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11966, __pyx_L1_error) __pyx_t_11 = (!__pyx_t_5); if (unlikely(__pyx_t_11)) { /* … */ }
+11967: raise TypeError(
__pyx_t_2 = NULL;
+11968: '"request_min_throughput" must be an int, '
__pyx_t_18 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_request_min_throughput_must_be, __pyx_t_7); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11968, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_18}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11967, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11967, __pyx_L1_error)
+11969: f'not {_fqn(type(request_min_throughput))}')
__pyx_t_18 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_request_min_throughput)))); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11969, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_t_18); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11969, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+11970: c_request_min_throughput = request_min_throughput
__pyx_t_25 = __Pyx_PyLong_As_uint64_t(__pyx_v_request_min_throughput); if (unlikely((__pyx_t_25 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 11970, __pyx_L1_error) __pyx_v_c_request_min_throughput = __pyx_t_25;
+11971: if not line_sender_opts_request_min_throughput(self._opts, c_request_min_throughput, &err):
__pyx_t_11 = (!line_sender_opts_request_min_throughput(__pyx_v_self->_opts, __pyx_v_c_request_min_throughput, (&__pyx_v_err)));
if (unlikely(__pyx_t_11)) {
/* … */
}
+11972: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11972, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11972, __pyx_L1_error)
11973:
+11974: if max_name_len is not None:
__pyx_t_11 = (__pyx_v_max_name_len != Py_None);
if (__pyx_t_11) {
/* … */
}
+11975: if not _is_int_not_bool(max_name_len):
__pyx_t_11 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_max_name_len); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11975, __pyx_L1_error) __pyx_t_5 = (!__pyx_t_11); if (unlikely(__pyx_t_5)) { /* … */ }
+11976: raise TypeError(
__pyx_t_18 = NULL;
+11977: '"max_name_len" must be an int, '
__pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_max_name_len_must_be_an_int_not, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11977, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_18, __pyx_t_2}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11976, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11976, __pyx_L1_error)
+11978: f'not {_fqn(type(max_name_len))}')
__pyx_t_2 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_max_name_len)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11978, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11978, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+11979: c_max_name_len = max_name_len
__pyx_t_10 = __Pyx_PyLong_As_size_t(__pyx_v_max_name_len); if (unlikely((__pyx_t_10 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 11979, __pyx_L1_error) __pyx_v_c_max_name_len = __pyx_t_10;
+11980: if not line_sender_opts_max_name_len(self._opts, c_max_name_len, &err):
__pyx_t_5 = (!line_sender_opts_max_name_len(__pyx_v_self->_opts, __pyx_v_c_max_name_len, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
+11981: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11981, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11981, __pyx_L1_error)
11982:
+11983: if request_timeout is not None:
__pyx_t_5 = (__pyx_v_request_timeout != Py_None);
if (__pyx_t_5) {
/* … */
}
+11984: if _is_int_not_bool(request_timeout):
__pyx_t_5 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_request_timeout); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11984, __pyx_L1_error) if (__pyx_t_5) { /* … */ goto __pyx_L149; }
+11985: c_request_timeout = request_timeout
__pyx_t_25 = __Pyx_PyLong_As_uint64_t(__pyx_v_request_timeout); if (unlikely((__pyx_t_25 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 11985, __pyx_L1_error) __pyx_v_c_request_timeout = __pyx_t_25;
+11986: if not line_sender_opts_request_timeout(self._opts, c_request_timeout, &err):
__pyx_t_5 = (!line_sender_opts_request_timeout(__pyx_v_self->_opts, __pyx_v_c_request_timeout, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
+11987: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11987, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11987, __pyx_L1_error)
+11988: elif isinstance(request_timeout, cp_timedelta):
__pyx_t_5 = __Pyx_TypeCheck(__pyx_v_request_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta);
if (likely(__pyx_t_5)) {
/* … */
goto __pyx_L149;
}
+11989: c_request_timeout = _timedelta_to_millis(request_timeout)
if (!(likely(((__pyx_v_request_timeout) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_request_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta))))) __PYX_ERR(0, 11989, __pyx_L1_error) __pyx_t_25 = __pyx_f_7questdb_7_client__timedelta_to_millis(((PyDateTime_Delta *)__pyx_v_request_timeout)); if (unlikely(__pyx_t_25 == ((uint64_t)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 11989, __pyx_L1_error) __pyx_v_c_request_timeout = __pyx_t_25;
+11990: if not line_sender_opts_request_timeout(self._opts, c_request_timeout, &err):
__pyx_t_5 = (!line_sender_opts_request_timeout(__pyx_v_self->_opts, __pyx_v_c_request_timeout, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
+11991: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11991, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11991, __pyx_L1_error)
11992: else:
+11993: raise TypeError(
/*else*/ {
__pyx_t_2 = NULL;
+11994: '"request_timeout" must be an int or a timedelta, '
__pyx_t_18 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_request_timeout_must_be_an_int, __pyx_t_7); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11994, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_18}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11993, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11993, __pyx_L1_error) } __pyx_L149:;
+11995: f'not {_fqn(type(request_timeout))}')
__pyx_t_18 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_request_timeout)))); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11995, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_t_18); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11995, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
11996:
+11997: if _is_qwp_ws_protocol(self._c_protocol) and auto_flush_bytes is None:
__pyx_t_11 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11997, __pyx_L1_error) if (__pyx_t_11) { } else { __pyx_t_5 = __pyx_t_11; goto __pyx_L153_bool_binop_done; } __pyx_t_11 = (__pyx_v_auto_flush_bytes == Py_None); __pyx_t_5 = __pyx_t_11; __pyx_L153_bool_binop_done:; if (__pyx_t_5) { /* … */ }
11998: # As on a pooled lease, the byte threshold derives from the
11999: # connection's frame cap, read on every check. The placeholder
12000: # lets the byte trigger alone turn auto-flush on.
+12001: auto_flush_bytes = 1
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_1); __Pyx_DECREF_SET(__pyx_v_auto_flush_bytes, __pyx_mstate_global->__pyx_int_1);
+12002: self._auto_flush_bytes_dynamic = True
__pyx_v_self->_auto_flush_bytes_dynamic = 1;
+12003: _parse_auto_flush(
__pyx_t_4 = __pyx_f_7questdb_7_client__parse_auto_flush(__pyx_v_self->_c_protocol, __pyx_v_auto_flush, __pyx_v_auto_flush_rows, __pyx_v_auto_flush_bytes, __pyx_v_auto_flush_interval, (&__pyx_v_self->_auto_flush_mode), __pyx_v_c_max_datagram_size); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12003, __pyx_L1_error)
12004: self._c_protocol,
12005: auto_flush,
12006: auto_flush_rows,
12007: auto_flush_bytes,
12008: auto_flush_interval,
12009: &self._auto_flush_mode,
12010: c_max_datagram_size)
12011:
+12012: self._init_buf_size = init_buf_size or 65536
__pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_init_buf_size); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 12012, __pyx_L1_error) if (!__pyx_t_5) { } else { __pyx_t_22 = __Pyx_PyLong_As_size_t(__pyx_v_init_buf_size); if (unlikely((__pyx_t_22 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 12012, __pyx_L1_error) __pyx_t_10 = __pyx_t_22; goto __pyx_L155_bool_binop_done; } __pyx_t_10 = 0x10000; __pyx_L155_bool_binop_done:; __pyx_v_self->_init_buf_size = __pyx_t_10;
+12013: self._last_flush_ms = <int64_t*>calloc(1, sizeof(int64_t))
__pyx_v_self->_last_flush_ms = ((int64_t *)calloc(1, (sizeof(int64_t))));
+12014: if self._last_flush_ms == NULL:
__pyx_t_5 = (__pyx_v_self->_last_flush_ms == NULL);
if (unlikely(__pyx_t_5)) {
/* … */
}
+12015: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 12015, __pyx_L1_error)
12016:
12017: # Retain a clone of the fully-configured opts (auth/TLS included) so a
12018: # ws sender's dataframe() can open a poolless direct columnar
12019: # connection per call, independent of how it was built.
+12020: if _is_qwp_ws_protocol(self._c_protocol) and self._opts != NULL:
__pyx_t_11 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12020, __pyx_L1_error) if (__pyx_t_11) { } else { __pyx_t_5 = __pyx_t_11; goto __pyx_L159_bool_binop_done; } __pyx_t_11 = (__pyx_v_self->_opts != NULL); __pyx_t_5 = __pyx_t_11; __pyx_L159_bool_binop_done:; if (__pyx_t_5) { /* … */ }
+12021: self._qwp_ws_opts = line_sender_opts_clone(self._opts)
__pyx_v_self->_qwp_ws_opts = line_sender_opts_clone(__pyx_v_self->_opts);
12022:
+12023: def __setattr__(self, name, value):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_6Sender_1__setattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_7questdb_7_client_6Sender_1__setattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__setattr__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_6Sender___setattr__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), ((PyObject *)__pyx_v_name), ((PyObject *)__pyx_v_value));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_6Sender___setattr__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.Sender.__setattr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+12024: _setattr_without_dict(self, Sender, _DICT_ONLY_ATTRS, name, value)
__pyx_t_1 = __pyx_v_7questdb_7_client__DICT_ONLY_ATTRS; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = __pyx_f_7questdb_7_client__setattr_without_dict(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, ((PyObject*)__pyx_t_1), __pyx_v_name, __pyx_v_value); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12024, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
12025:
12026: # A class attribute because Cython refuses an extension type's own
12027: # `__init_subclass__` method. See `_subclass_keeps_generic_setattr`.
+12028: __init_subclass__ = classmethod(_sender_init_subclass)
__Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_sender_init_subclass); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 12028, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __pyx_t_18 = __Pyx_Method_ClassMethod(__pyx_t_20); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 12028, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __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_init_subclass, __pyx_t_18) < (0)) __PYX_ERR(0, 12028, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
12029:
+12030: def __dir__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_3__dir__(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_6Sender_3__dir__ = {"__dir__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_3__dir__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_3__dir__(PyObject *__pyx_v_self,
#if CYTHON_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("__dir__ (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("__dir__", 1, 0, 0, __pyx_nargs); return NULL; }
const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) return NULL;
if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__dir__", __pyx_kwds); return NULL;}
__pyx_r = __pyx_pf_7questdb_7_client_6Sender_2__dir__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Sender_2__dir__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
PyObject *__pyx_v_names = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Sender.__dir__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_names);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_3__dir__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender___dir, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[223])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 12030, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
#endif
if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_dir, __pyx_t_18) < (0)) __PYX_ERR(0, 12030, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
12031: # `object.__dir__` reads `__dict__`, which recreates the dictionary.
+12032: names = object.__dir__(self)
__pyx_t_2 = __pyx_builtin_object; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_self)}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_dir, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12032, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_names = __pyx_t_1; __pyx_t_1 = 0;
+12033: _sender_drop_unused_dict(self)
__pyx_f_7questdb_7_client__sender_drop_unused_dict(__pyx_v_self);
+12034: return names
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_names);
__pyx_r = __pyx_v_names;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
12035:
+12036: def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_6Sender_5__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_5__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_4__cinit__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_6Sender_4__cinit__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Sender.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
12037: # Cython has just created the instance dictionary, which CPython
12038: # does not use: see `__dict__` above.
+12039: qdb_drop_empty_instance_dict(self)
qdb_drop_empty_instance_dict(((PyObject *)__pyx_v_self));
+12040: self._c_protocol = line_sender_protocol_tcp
__pyx_v_self->_c_protocol = line_sender_protocol_tcp;
+12041: self._opts = NULL
__pyx_v_self->_opts = NULL;
+12042: self._impl = NULL
__pyx_v_self->_impl = NULL;
+12043: self._buffer = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_buffer); __Pyx_DECREF_SET(__pyx_v_self->_buffer, ((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None));
+12044: self._thread_owner_token = object()
__pyx_t_2 = NULL;
__pyx_t_3 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_object, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12044, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_GIVEREF(__pyx_t_1);
__Pyx_GOTREF(__pyx_v_self->_thread_owner_token);
__Pyx_DECREF_SET(__pyx_v_self->_thread_owner_token, __pyx_t_1);
__pyx_t_1 = 0;
+12045: self._dispatch_context = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_dispatch_context); __Pyx_DECREF_SET(__pyx_v_self->_dispatch_context, Py_None);
+12046: self._error_handler = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_error_handler); __Pyx_DECREF_SET(__pyx_v_self->_error_handler, Py_None);
+12047: self._connection_listener = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_connection_listener); __Pyx_DECREF_SET(__pyx_v_self->_connection_listener, Py_None);
+12048: self._oidc_auth = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_oidc_auth); __Pyx_DECREF_SET(__pyx_v_self->_oidc_auth, Py_None);
+12049: self._bearer_holder = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_bearer_holder); __Pyx_DECREF_SET(__pyx_v_self->_bearer_holder, Py_None);
+12050: self._auto_flush_mode.enabled = False
__pyx_v_self->_auto_flush_mode.enabled = 0;
+12051: self._auto_flush_bytes_dynamic = False
__pyx_v_self->_auto_flush_bytes_dynamic = 0;
+12052: self._last_flush_ms = NULL
__pyx_v_self->_last_flush_ms = NULL;
+12053: self._init_buf_size = 0
__pyx_v_self->_init_buf_size = 0;
+12054: self._in_txn = False
__pyx_v_self->_in_txn = 0;
+12055: self._native_in_flight = False
__pyx_v_self->_native_in_flight = 0;
+12056: self._slot_id = -1
__pyx_v_self->_slot_id = -1L;
+12057: self._qwp_ws_opts = NULL
__pyx_v_self->_qwp_ws_opts = NULL;
+12058: self._cb_refs_key = 0
__pyx_v_self->_cb_refs_key = 0;
12059:
+12060: def __init__(
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_6Sender_7__init__(PyObject *__pyx_v_self,
#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_7__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_oidc_auth = 0;
PyObject *__pyx_v_bearer_token_provider = 0;
PyObject *__pyx_v_token_x = 0;
PyObject *__pyx_v_token_y = 0;
PyObject *__pyx_v_auth_timeout = 0;
PyObject *__pyx_v_tls_verify = 0;
PyObject *__pyx_v_tls_ca = 0;
PyObject *__pyx_v_tls_roots = 0;
PyObject *__pyx_v_tls_roots_password = 0;
PyObject *__pyx_v_max_buf_size = 0;
PyObject *__pyx_v_retry_timeout = 0;
PyObject *__pyx_v_retry_max_backoff = 0;
PyObject *__pyx_v_request_min_throughput = 0;
PyObject *__pyx_v_request_timeout = 0;
PyObject *__pyx_v_auto_flush = 0;
PyObject *__pyx_v_auto_flush_rows = 0;
PyObject *__pyx_v_auto_flush_bytes = 0;
PyObject *__pyx_v_auto_flush_interval = 0;
PyObject *__pyx_v_max_datagram_size = 0;
PyObject *__pyx_v_multicast_ttl = 0;
PyObject *__pyx_v_qwp_ws_progress = 0;
PyObject *__pyx_v_error_handler = 0;
PyObject *__pyx_v_connection_listener = 0;
PyObject *__pyx_v_connection_event_inbox_capacity = 0;
PyObject *__pyx_v_protocol_version = 0;
PyObject *__pyx_v_init_buf_size = 0;
PyObject *__pyx_v_max_name_len = 0;
#if !CYTHON_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_oidc_auth,&__pyx_mstate_global->__pyx_n_u_bearer_token_provider_2,&__pyx_mstate_global->__pyx_n_u_token_x,&__pyx_mstate_global->__pyx_n_u_token_y,&__pyx_mstate_global->__pyx_n_u_auth_timeout,&__pyx_mstate_global->__pyx_n_u_tls_verify,&__pyx_mstate_global->__pyx_n_u_tls_ca,&__pyx_mstate_global->__pyx_n_u_tls_roots,&__pyx_mstate_global->__pyx_n_u_tls_roots_password,&__pyx_mstate_global->__pyx_n_u_max_buf_size,&__pyx_mstate_global->__pyx_n_u_retry_timeout,&__pyx_mstate_global->__pyx_n_u_retry_max_backoff,&__pyx_mstate_global->__pyx_n_u_request_min_throughput,&__pyx_mstate_global->__pyx_n_u_request_timeout,&__pyx_mstate_global->__pyx_n_u_auto_flush,&__pyx_mstate_global->__pyx_n_u_auto_flush_rows,&__pyx_mstate_global->__pyx_n_u_auto_flush_bytes,&__pyx_mstate_global->__pyx_n_u_auto_flush_interval,&__pyx_mstate_global->__pyx_n_u_max_datagram_size,&__pyx_mstate_global->__pyx_n_u_multicast_ttl,&__pyx_mstate_global->__pyx_n_u_qwp_ws_progress,&__pyx_mstate_global->__pyx_n_u_error_handler,&__pyx_mstate_global->__pyx_n_u_connection_listener,&__pyx_mstate_global->__pyx_n_u_connection_event_inbox_capacity,&__pyx_mstate_global->__pyx_n_u_protocol_version,&__pyx_mstate_global->__pyx_n_u_init_buf_size,&__pyx_mstate_global->__pyx_n_u_max_name_len,0};
PyObject* values[34] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL_TPNEW(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 12060, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 3:
values[2] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 12060, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 12060, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 12060, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__init__", 0) < (0)) __PYX_ERR(0, 12060, __pyx_L3_error)
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = -1;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
goto __pyx_L7_cleaned_up;
__pyx_L0:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__pyx_L7_cleaned_up:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_6Sender_6__init__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, PyObject *__pyx_v_protocol, PyObject *__pyx_v_host, PyObject *__pyx_v_port, PyObject *__pyx_v_bind_interface, PyObject *__pyx_v_username, PyObject *__pyx_v_password, PyObject *__pyx_v_token, PyObject *__pyx_v_oidc_auth, PyObject *__pyx_v_bearer_token_provider, PyObject *__pyx_v_token_x, PyObject *__pyx_v_token_y, PyObject *__pyx_v_auth_timeout, PyObject *__pyx_v_tls_verify, PyObject *__pyx_v_tls_ca, PyObject *__pyx_v_tls_roots, PyObject *__pyx_v_tls_roots_password, PyObject *__pyx_v_max_buf_size, PyObject *__pyx_v_retry_timeout, PyObject *__pyx_v_retry_max_backoff, PyObject *__pyx_v_request_min_throughput, PyObject *__pyx_v_request_timeout, PyObject *__pyx_v_auto_flush, PyObject *__pyx_v_auto_flush_rows, PyObject *__pyx_v_auto_flush_bytes, PyObject *__pyx_v_auto_flush_interval, PyObject *__pyx_v_max_datagram_size, PyObject *__pyx_v_multicast_ttl, PyObject *__pyx_v_qwp_ws_progress, PyObject *__pyx_v_error_handler, PyObject *__pyx_v_connection_listener, PyObject *__pyx_v_connection_event_inbox_capacity, PyObject *__pyx_v_protocol_version, PyObject *__pyx_v_init_buf_size, PyObject *__pyx_v_max_name_len) {
struct line_sender_utf8 __pyx_v_c_host;
PyObject *__pyx_v_port_str = 0;
enum line_sender_protocol __pyx_v_c_protocol;
struct line_sender_utf8 __pyx_v_c_port;
struct qdb_pystr_buf *__pyx_v_b;
int __pyx_r;
__Pyx_INCREF(__pyx_v_protocol);
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.Sender.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_port_str);
__Pyx_XDECREF(__pyx_v_protocol);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
12061: self,
12062: object protocol,
12063: str host,
12064: object port,
12065: *,
+12066: str bind_interface=None,
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None));
+12067: str username=None,
if (!values[4]) values[4] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[4]) values[4] = __Pyx_NewRef(((PyObject*)Py_None));
+12068: str password=None,
if (!values[5]) values[5] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[5]) values[5] = __Pyx_NewRef(((PyObject*)Py_None));
+12069: str token=None,
if (!values[6]) values[6] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[6]) values[6] = __Pyx_NewRef(((PyObject*)Py_None));
+12070: object oidc_auth=None,
if (!values[7]) values[7] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[7]) values[7] = __Pyx_NewRef(((PyObject *)Py_None));
+12071: object bearer_token_provider=None,
if (!values[8]) values[8] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[8]) values[8] = __Pyx_NewRef(((PyObject *)Py_None));
+12072: str token_x=None,
if (!values[9]) values[9] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[9]) values[9] = __Pyx_NewRef(((PyObject*)Py_None));
+12073: str token_y=None,
if (!values[10]) values[10] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[10]) values[10] = __Pyx_NewRef(((PyObject*)Py_None));
+12074: object auth_timeout=None, # default: 15000 milliseconds
if (!values[11]) values[11] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[11]) values[11] = __Pyx_NewRef(((PyObject *)Py_None));
+12075: object tls_verify=None, # default: True
if (!values[12]) values[12] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[12]) values[12] = __Pyx_NewRef(((PyObject *)Py_None));
+12076: object tls_ca=None, # TLS default: TlsCa.WebpkiAndOsRoots
if (!values[13]) values[13] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[13]) values[13] = __Pyx_NewRef(((PyObject *)Py_None));
+12077: object tls_roots=None,
if (!values[14]) values[14] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[14]) values[14] = __Pyx_NewRef(((PyObject *)Py_None));
+12078: str tls_roots_password=None,
if (!values[15]) values[15] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[15]) values[15] = __Pyx_NewRef(((PyObject*)Py_None));
+12079: object max_buf_size=None, # 100 * 1024 * 1024 - 100MiB
if (!values[16]) values[16] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[16]) values[16] = __Pyx_NewRef(((PyObject *)Py_None));
+12080: object retry_timeout=None, # default: 10000 milliseconds
if (!values[17]) values[17] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[17]) values[17] = __Pyx_NewRef(((PyObject *)Py_None));
+12081: object retry_max_backoff=None, # default: 1000 milliseconds
if (!values[18]) values[18] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[18]) values[18] = __Pyx_NewRef(((PyObject *)Py_None));
+12082: object request_min_throughput=None, # default: 100 * 1024 - 100KiB/s
if (!values[19]) values[19] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[19]) values[19] = __Pyx_NewRef(((PyObject *)Py_None));
+12083: object request_timeout=None,
if (!values[20]) values[20] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[20]) values[20] = __Pyx_NewRef(((PyObject *)Py_None));
+12084: object auto_flush=None, # Default True
if (!values[21]) values[21] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[21]) values[21] = __Pyx_NewRef(((PyObject *)Py_None));
+12085: object auto_flush_rows=None, # Default 75000 (HTTP) or 600 (TCP)
if (!values[22]) values[22] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[22]) values[22] = __Pyx_NewRef(((PyObject *)Py_None));
+12086: object auto_flush_bytes=None, # Default off (90% of the frame cap for ws and wss)
if (!values[23]) values[23] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[23]) values[23] = __Pyx_NewRef(((PyObject *)Py_None));
+12087: object auto_flush_interval=None, # Default 1000 milliseconds
if (!values[24]) values[24] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[24]) values[24] = __Pyx_NewRef(((PyObject *)Py_None));
+12088: object max_datagram_size=None, # Default 1400 for QWP/UDP
if (!values[25]) values[25] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[25]) values[25] = __Pyx_NewRef(((PyObject *)Py_None));
+12089: object multicast_ttl=None, # Default 1 for QWP/UDP
if (!values[26]) values[26] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[26]) values[26] = __Pyx_NewRef(((PyObject *)Py_None));
+12090: object qwp_ws_progress=None, # Default background for QWP/WebSocket
if (!values[27]) values[27] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[27]) values[27] = __Pyx_NewRef(((PyObject *)Py_None));
+12091: object error_handler=None,
if (!values[28]) values[28] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[28]) values[28] = __Pyx_NewRef(((PyObject *)Py_None));
+12092: object connection_listener=None,
if (!values[29]) values[29] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[30]) values[30] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); /* … */ if (!values[29]) values[29] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[30]) values[30] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
12093: object connection_event_inbox_capacity=0,
+12094: object protocol_version=None, # Default auto
if (!values[31]) values[31] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[31]) values[31] = __Pyx_NewRef(((PyObject *)Py_None));
+12095: object init_buf_size=None, # 64KiB
if (!values[32]) values[32] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[32]) values[32] = __Pyx_NewRef(((PyObject *)Py_None));
+12096: object max_name_len=None): # 127
if (!values[33]) values[33] = __Pyx_NewRef(((PyObject *)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 3; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, i); __PYX_ERR(0, 12060, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 12060, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 12060, __pyx_L3_error) values[2] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 12060, __pyx_L3_error) /* … */ if (!values[33]) values[33] = __Pyx_NewRef(((PyObject *)Py_None)); } __pyx_v_protocol = values[0]; __pyx_v_host = ((PyObject*)values[1]); __pyx_v_port = values[2]; __pyx_v_bind_interface = ((PyObject*)values[3]); __pyx_v_username = ((PyObject*)values[4]); __pyx_v_password = ((PyObject*)values[5]); __pyx_v_token = ((PyObject*)values[6]); __pyx_v_oidc_auth = values[7]; __pyx_v_bearer_token_provider = values[8]; __pyx_v_token_x = ((PyObject*)values[9]); __pyx_v_token_y = ((PyObject*)values[10]); __pyx_v_auth_timeout = values[11]; __pyx_v_tls_verify = values[12]; __pyx_v_tls_ca = values[13]; __pyx_v_tls_roots = values[14]; __pyx_v_tls_roots_password = ((PyObject*)values[15]); __pyx_v_max_buf_size = values[16]; __pyx_v_retry_timeout = values[17]; __pyx_v_retry_max_backoff = values[18]; __pyx_v_request_min_throughput = values[19]; __pyx_v_request_timeout = values[20]; __pyx_v_auto_flush = values[21]; __pyx_v_auto_flush_rows = values[22]; __pyx_v_auto_flush_bytes = values[23]; __pyx_v_auto_flush_interval = values[24]; __pyx_v_max_datagram_size = values[25]; __pyx_v_multicast_ttl = values[26]; __pyx_v_qwp_ws_progress = values[27]; __pyx_v_error_handler = values[28]; __pyx_v_connection_listener = values[29]; __pyx_v_connection_event_inbox_capacity = values[30]; __pyx_v_protocol_version = values[31]; __pyx_v_init_buf_size = values[32]; __pyx_v_max_name_len = values[33]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 12060, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Sender.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return -1; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_host), (&PyUnicode_Type), 1, "host", 1))) __PYX_ERR(0, 12063, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_bind_interface), (&PyUnicode_Type), 1, "bind_interface", 1))) __PYX_ERR(0, 12066, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_username), (&PyUnicode_Type), 1, "username", 1))) __PYX_ERR(0, 12067, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_password), (&PyUnicode_Type), 1, "password", 1))) __PYX_ERR(0, 12068, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 1, "token", 1))) __PYX_ERR(0, 12069, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token_x), (&PyUnicode_Type), 1, "token_x", 1))) __PYX_ERR(0, 12072, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token_y), (&PyUnicode_Type), 1, "token_y", 1))) __PYX_ERR(0, 12073, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tls_roots_password), (&PyUnicode_Type), 1, "tls_roots_password", 1))) __PYX_ERR(0, 12078, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_6Sender_6__init__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_protocol, __pyx_v_host, __pyx_v_port, __pyx_v_bind_interface, __pyx_v_username, __pyx_v_password, __pyx_v_token, __pyx_v_oidc_auth, __pyx_v_bearer_token_provider, __pyx_v_token_x, __pyx_v_token_y, __pyx_v_auth_timeout, __pyx_v_tls_verify, __pyx_v_tls_ca, __pyx_v_tls_roots, __pyx_v_tls_roots_password, __pyx_v_max_buf_size, __pyx_v_retry_timeout, __pyx_v_retry_max_backoff, __pyx_v_request_min_throughput, __pyx_v_request_timeout, __pyx_v_auto_flush, __pyx_v_auto_flush_rows, __pyx_v_auto_flush_bytes, __pyx_v_auto_flush_interval, __pyx_v_max_datagram_size, __pyx_v_multicast_ttl, __pyx_v_qwp_ws_progress, __pyx_v_error_handler, __pyx_v_connection_listener, __pyx_v_connection_event_inbox_capacity, __pyx_v_protocol_version, __pyx_v_init_buf_size, __pyx_v_max_name_len);
12097:
12098: cdef line_sender_utf8 c_host
12099: cdef str port_str
12100: cdef line_sender_protocol c_protocol
12101: cdef line_sender_utf8 c_port
12102: cdef qdb_pystr_buf* b
+12103: if (self._opts != NULL or self._impl != NULL or
__pyx_t_2 = (__pyx_v_self->_opts != NULL);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_self->_impl != NULL);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
/* … */
if (unlikely(__pyx_t_1)) {
/* … */
}
+12104: self._last_flush_ms != NULL):
__pyx_t_2 = (__pyx_v_self->_last_flush_ms != NULL); __pyx_t_1 = __pyx_t_2; __pyx_L4_bool_binop_done:;
+12105: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12105, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+12106: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12106, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12106, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_Sender_is_already_initialized}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12105, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 12105, __pyx_L1_error)
12107: 'Sender is already initialized.')
+12108: b = qdb_pystr_buf_new()
__pyx_v_b = qdb_pystr_buf_new();
+12109: try:
/*try:*/ {
+12110: protocol = Protocol.parse(protocol)
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_Protocol); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12110, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_parse); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12110, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__pyx_t_8 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_5);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_5);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_8 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_protocol};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12110, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_DECREF_SET(__pyx_v_protocol, __pyx_t_3);
__pyx_t_3 = 0;
+12111: if protocol is None:
__pyx_t_1 = (__pyx_v_protocol == Py_None);
if (unlikely(__pyx_t_1)) {
/* … */
}
+12112: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12112, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_5);
+12113: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12113, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12113, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_protocol_is_required_and_cannot}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12112, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 12112, __pyx_L8_error)
12114: '"protocol" is required and cannot be None.')
+12115: c_protocol = protocol.c_value
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_protocol, __pyx_mstate_global->__pyx_n_u_c_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12115, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_9 = ((enum line_sender_protocol)__Pyx_PyLong_As_enum__line_sender_protocol(__pyx_t_3)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 12115, __pyx_L8_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_c_protocol = __pyx_t_9;
+12116: if PyLong_CheckExact(<PyObject*>port):
__pyx_t_1 = PyLong_CheckExact(((PyObject *)__pyx_v_port));
if (__pyx_t_1) {
/* … */
goto __pyx_L11;
}
+12117: port_str = str(port)
__pyx_t_3 = __Pyx_PyObject_Unicode(__pyx_v_port); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12117, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_port_str = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0;
+12118: elif PyUnicode_CheckExact(<PyObject*>port):
__pyx_t_1 = PyUnicode_CheckExact(((PyObject *)__pyx_v_port));
if (likely(__pyx_t_1)) {
/* … */
goto __pyx_L11;
}
+12119: port_str = port
__pyx_t_3 = __pyx_v_port;
__Pyx_INCREF(__pyx_t_3);
if (!(likely(PyUnicode_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_3))) __PYX_ERR(0, 12119, __pyx_L8_error)
__pyx_v_port_str = ((PyObject*)__pyx_t_3);
__pyx_t_3 = 0;
12120: else:
+12121: raise TypeError(
/*else*/ {
__pyx_t_5 = NULL;
+12122: f'port must be an int or a str, not {_fqn(type(port))}')
__pyx_t_6 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_port)))); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12122, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = __Pyx_PyUnicode_Unicode(__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12122, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_port_must_be_an_int_or_a_str_not, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12122, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_8 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12121, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 12121, __pyx_L8_error) } __pyx_L11:;
+12123: str_to_utf8(b, <PyObject*>host, &c_host)
__pyx_t_10 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_host), (&__pyx_v_c_host)); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12123, __pyx_L8_error)
+12124: str_to_utf8(b, <PyObject*>port_str, &c_port)
__pyx_t_10 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_port_str), (&__pyx_v_c_port)); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12124, __pyx_L8_error)
+12125: self._opts = line_sender_opts_new_service(c_protocol, c_host, c_port)
__pyx_v_self->_opts = line_sender_opts_new_service(__pyx_v_c_protocol, __pyx_v_c_host, __pyx_v_c_port);
12126:
+12127: self._set_sender_fields(
__pyx_t_10 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_self->__pyx_vtab)->_set_sender_fields(__pyx_v_self, __pyx_v_b, __pyx_v_protocol, __pyx_v_bind_interface, __pyx_v_username, __pyx_v_password, __pyx_v_token, __pyx_v_oidc_auth, __pyx_v_bearer_token_provider, __pyx_v_token_x, __pyx_v_token_y, __pyx_v_auth_timeout, __pyx_v_tls_verify, __pyx_v_tls_ca, __pyx_v_tls_roots, __pyx_v_tls_roots_password, __pyx_v_max_buf_size, __pyx_v_retry_timeout, __pyx_v_retry_max_backoff, __pyx_v_request_min_throughput, __pyx_v_request_timeout, __pyx_v_auto_flush, __pyx_v_auto_flush_rows, __pyx_v_auto_flush_bytes, __pyx_v_auto_flush_interval, __pyx_v_max_datagram_size, __pyx_v_multicast_ttl, __pyx_v_protocol_version, __pyx_v_qwp_ws_progress, __pyx_v_error_handler, __pyx_v_connection_listener, __pyx_v_connection_event_inbox_capacity, __pyx_v_init_buf_size, __pyx_v_max_name_len); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12127, __pyx_L8_error)
}
12128: b,
12129: protocol,
12130: bind_interface,
12131: username,
12132: password,
12133: token,
12134: oidc_auth,
12135: bearer_token_provider,
12136: token_x,
12137: token_y,
12138: auth_timeout,
12139: tls_verify,
12140: tls_ca,
12141: tls_roots,
12142: tls_roots_password,
12143: max_buf_size,
12144: retry_timeout,
12145: retry_max_backoff,
12146: request_min_throughput,
12147: request_timeout,
12148: auto_flush,
12149: auto_flush_rows,
12150: auto_flush_bytes,
12151: auto_flush_interval,
12152: max_datagram_size,
12153: multicast_ttl,
12154: protocol_version,
12155: qwp_ws_progress,
12156: error_handler,
12157: connection_listener,
12158: connection_event_inbox_capacity,
12159: init_buf_size,
12160: max_name_len)
12161: finally:
+12162: qdb_pystr_buf_free(b)
/*finally:*/ {
/*normal exit:*/{
qdb_pystr_buf_free(__pyx_v_b);
goto __pyx_L9;
}
__pyx_L8_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_19);
__pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
{
qdb_pystr_buf_free(__pyx_v_b);
}
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
__pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
goto __pyx_L1_error;
}
__pyx_L9:;
}
12163:
+12164: @staticmethod
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_9from_conf(CYTHON_UNUSED PyObject *__pyx_self, #if CYTHON_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_8from_conf, "\n Construct a sender from a :ref:`configuration string <sender_conf>`.\n\n The additional arguments are used to specify additional parameters\n which are not present in the configuration string.\n\n Note that any parameters already present in the configuration string\n cannot be overridden.\n\n ``oidc_auth`` attaches a native rotating OIDC token provider \342\200\224 see\n :class:`questdb.auth.OidcDeviceAuth` and the :ref:`oidc_auth` guide. It\n is a Python argument only, with no configuration-string equivalent, and\n is mutually exclusive with ``token``, ``username`` and ``password``.\n Use ``https::`` or ``wss::``: over plain ``http::`` or ``ws::`` to a\n non-loopback host the token is sent in cleartext.\n Call :meth:`~questdb.auth.OidcDeviceAuth.sign_in` before the first\n flush: connect and reconnect load or silently refresh a token but never\n start an interactive device flow. Supported on HTTP(S) and\n QWP/WebSocket; TCP and UDP are rejected.\n\n ``bearer_token_provider`` attaches a rotating Bearer-token provider\n instead: a :class:`questdb.auth.RefreshingTokenProvider` around a token\n source of your own, a callable returning a token, or an object with\n ``token()`` and an optional ``on_rejected()`` -- see\n :ref:`refreshing_token_provider`. It is mutually exclusive with\n ``oidc_auth``, ``token``, ``username`` and ``password``. It runs\n inside every ILP/HTTP flush, and inside a connect the call waits for\n such as :meth:`establish <questdb.Sender.establish>`, where neither\n it nor a Python signal handler may use this sender; see\n :ref:`token_provider_reentrancy`.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_9from_conf = {"from_conf", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_9from_conf, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_8from_conf}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_9from_conf(CYTHON_UNUSED PyObject *__pyx_self, #if CYTHON_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_oidc_auth = 0; PyObject *__pyx_v_bearer_token_provider = 0; PyObject *__pyx_v_token_x = 0; PyObject *__pyx_v_token_y = 0; PyObject *__pyx_v_auth_timeout = 0; PyObject *__pyx_v_tls_verify = 0; PyObject *__pyx_v_tls_ca = 0; PyObject *__pyx_v_tls_roots = 0; PyObject *__pyx_v_tls_roots_password = 0; PyObject *__pyx_v_max_buf_size = 0; PyObject *__pyx_v_retry_timeout = 0; PyObject *__pyx_v_retry_max_backoff = 0; PyObject *__pyx_v_request_min_throughput = 0; PyObject *__pyx_v_request_timeout = 0; PyObject *__pyx_v_auto_flush = 0; PyObject *__pyx_v_auto_flush_rows = 0; PyObject *__pyx_v_auto_flush_bytes = 0; PyObject *__pyx_v_auto_flush_interval = 0; PyObject *__pyx_v_max_datagram_size = 0; PyObject *__pyx_v_multicast_ttl = 0; PyObject *__pyx_v_qwp_ws_progress = 0; PyObject *__pyx_v_error_handler = 0; PyObject *__pyx_v_connection_listener = 0; PyObject *__pyx_v_connection_event_inbox_capacity = 0; PyObject *__pyx_v_protocol_version = 0; PyObject *__pyx_v_init_buf_size = 0; PyObject *__pyx_v_max_name_len = 0; #if !CYTHON_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_oidc_auth,&__pyx_mstate_global->__pyx_n_u_bearer_token_provider_2,&__pyx_mstate_global->__pyx_n_u_token_x,&__pyx_mstate_global->__pyx_n_u_token_y,&__pyx_mstate_global->__pyx_n_u_auth_timeout,&__pyx_mstate_global->__pyx_n_u_tls_verify,&__pyx_mstate_global->__pyx_n_u_tls_ca,&__pyx_mstate_global->__pyx_n_u_tls_roots,&__pyx_mstate_global->__pyx_n_u_tls_roots_password,&__pyx_mstate_global->__pyx_n_u_max_buf_size,&__pyx_mstate_global->__pyx_n_u_retry_timeout,&__pyx_mstate_global->__pyx_n_u_retry_max_backoff,&__pyx_mstate_global->__pyx_n_u_request_min_throughput,&__pyx_mstate_global->__pyx_n_u_request_timeout,&__pyx_mstate_global->__pyx_n_u_auto_flush,&__pyx_mstate_global->__pyx_n_u_auto_flush_rows,&__pyx_mstate_global->__pyx_n_u_auto_flush_bytes,&__pyx_mstate_global->__pyx_n_u_auto_flush_interval,&__pyx_mstate_global->__pyx_n_u_max_datagram_size,&__pyx_mstate_global->__pyx_n_u_multicast_ttl,&__pyx_mstate_global->__pyx_n_u_qwp_ws_progress,&__pyx_mstate_global->__pyx_n_u_error_handler,&__pyx_mstate_global->__pyx_n_u_connection_listener,&__pyx_mstate_global->__pyx_n_u_connection_event_inbox_capacity,&__pyx_mstate_global->__pyx_n_u_protocol_version,&__pyx_mstate_global->__pyx_n_u_init_buf_size,&__pyx_mstate_global->__pyx_n_u_max_name_len,0}; PyObject* values[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 12164, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 12164, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "from_conf", 0) < (0)) __PYX_ERR(0, 12164, __pyx_L3_error) /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_gb_7questdb_7_client_6Sender_9from_conf_2generator13(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ /* … */ static PyObject *__pyx_pf_7questdb_7_client_6Sender_8from_conf(PyObject *__pyx_v_conf_str, PyObject *__pyx_v_bind_interface, PyObject *__pyx_v_username, PyObject *__pyx_v_password, PyObject *__pyx_v_token, PyObject *__pyx_v_oidc_auth, PyObject *__pyx_v_bearer_token_provider, PyObject *__pyx_v_token_x, PyObject *__pyx_v_token_y, PyObject *__pyx_v_auth_timeout, PyObject *__pyx_v_tls_verify, PyObject *__pyx_v_tls_ca, PyObject *__pyx_v_tls_roots, PyObject *__pyx_v_tls_roots_password, PyObject *__pyx_v_max_buf_size, PyObject *__pyx_v_retry_timeout, PyObject *__pyx_v_retry_max_backoff, PyObject *__pyx_v_request_min_throughput, PyObject *__pyx_v_request_timeout, PyObject *__pyx_v_auto_flush, PyObject *__pyx_v_auto_flush_rows, PyObject *__pyx_v_auto_flush_bytes, PyObject *__pyx_v_auto_flush_interval, PyObject *__pyx_v_max_datagram_size, PyObject *__pyx_v_multicast_ttl, PyObject *__pyx_v_qwp_ws_progress, PyObject *__pyx_v_error_handler, PyObject *__pyx_v_connection_listener, PyObject *__pyx_v_connection_event_inbox_capacity, PyObject *__pyx_v_protocol_version, PyObject *__pyx_v_init_buf_size, PyObject *__pyx_v_max_name_len) { struct line_sender_error *__pyx_v_err; PyObject *__pyx_v_protocol = 0; struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender = 0; PyObject *__pyx_v_synthetic_conf_str = 0; struct line_sender_utf8 __pyx_v_c_synthetic_conf_str; PyObject *__pyx_v_params = 0; struct qdb_pystr_buf *__pyx_v_b; PyObject *__pyx_v_addr = NULL; PyObject *__pyx_v_override_key = NULL; PyObject *__pyx_v_override_value = NULL; PyObject *__pyx_v_python_handled_keys = NULL; PyObject *__pyx_v_synthetic_params = NULL; PyObject *__pyx_v_key = NULL; PyObject *__pyx_v_value = NULL; PyObject *__pyx_gb_7questdb_7_client_6Sender_9from_conf_2generator13 = 0; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_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_2generator13); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_PyDict_NewPresized(31); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 12164, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); /* … */ __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_9from_conf, __Pyx_CYFUNCTION_STATICMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_from_conf, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[224])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 12164, __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_18); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 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, 12164, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __pyx_t_18 = NULL; __Pyx_GetNameInClass(__pyx_t_25, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_from_conf); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 12164, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_18, __pyx_t_25}; __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_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 12164, __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, 12164, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
12165: def from_conf(
12166: str conf_str,
12167: *,
+12168: str bind_interface=None,
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_bind_interface, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12169: str username=None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_username, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12170: str password=None,
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_password, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12171: str token=None,
if (!values[4]) values[4] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[4]) values[4] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_token, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12172: object oidc_auth=None,
if (!values[5]) values[5] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[5]) values[5] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_oidc_auth, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12173: object bearer_token_provider=None,
if (!values[6]) values[6] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[6]) values[6] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_bearer_token_provider_2, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12174: str token_x=None,
if (!values[7]) values[7] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[7]) values[7] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_token_x, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12175: str token_y=None,
if (!values[8]) values[8] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[8]) values[8] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_token_y, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12176: object auth_timeout=None, # default: 15000 milliseconds
if (!values[9]) values[9] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[9]) values[9] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_auth_timeout, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12177: object tls_verify=None, # default: True
if (!values[10]) values[10] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[10]) values[10] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_tls_verify, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12178: object tls_ca=None, # TLS default: TlsCa.WebpkiAndOsRoots
if (!values[11]) values[11] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[11]) values[11] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_tls_ca, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12179: object tls_roots=None,
if (!values[12]) values[12] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[12]) values[12] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_tls_roots, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12180: str tls_roots_password=None,
if (!values[13]) values[13] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[13]) values[13] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_tls_roots_password, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12181: object max_buf_size=None, # 100 * 1024 * 1024 - 100MiB
if (!values[14]) values[14] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[14]) values[14] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_max_buf_size, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12182: object retry_timeout=None, # default: 10000 milliseconds
if (!values[15]) values[15] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[15]) values[15] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_retry_timeout, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12183: object retry_max_backoff=None, # default: 1000 milliseconds
if (!values[16]) values[16] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[16]) values[16] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_retry_max_backoff, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12184: object request_min_throughput=None, # default: 100 * 1024 - 100KiB/s
if (!values[17]) values[17] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[17]) values[17] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_request_min_throughput, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12185: object request_timeout=None,
if (!values[18]) values[18] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[18]) values[18] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_request_timeout, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12186: object auto_flush=None, # Default True
if (!values[19]) values[19] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[19]) values[19] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_auto_flush, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12187: object auto_flush_rows=None, # Default 75000 (HTTP) or 600 (TCP)
if (!values[20]) values[20] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[20]) values[20] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_auto_flush_rows, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12188: object auto_flush_bytes=None, # Default off (90% of the frame cap for ws and wss)
if (!values[21]) values[21] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[21]) values[21] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12189: object auto_flush_interval=None, # Default 1000 milliseconds
if (!values[22]) values[22] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[22]) values[22] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_auto_flush_interval, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12190: object max_datagram_size=None, # Default 1400 for QWP/UDP
if (!values[23]) values[23] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[23]) values[23] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_max_datagram_size, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12191: object multicast_ttl=None, # Default 1 for QWP/UDP
if (!values[24]) values[24] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[24]) values[24] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_multicast_ttl, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12192: object qwp_ws_progress=None, # Default background for QWP/WebSocket
if (!values[25]) values[25] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[25]) values[25] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_qwp_ws_progress, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12193: object error_handler=None,
if (!values[26]) values[26] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[26]) values[26] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_error_handler, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12194: object connection_listener=None,
if (!values[27]) values[27] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[28]) values[28] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); /* … */ if (!values[27]) values[27] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[28]) values[28] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_connection_listener, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_connection_event_inbox_capacity, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
12195: object connection_event_inbox_capacity=0,
+12196: object protocol_version=None, # Default auto
if (!values[29]) values[29] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[29]) values[29] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_protocol_version, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12197: object init_buf_size=None, # 64KiB
if (!values[30]) values[30] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[30]) values[30] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_init_buf_size, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12198: object max_name_len=None): # 127
if (!values[31]) values[31] = __Pyx_NewRef(((PyObject *)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("from_conf", 1, 1, 1, i); __PYX_ERR(0, 12164, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 12164, __pyx_L3_error) /* … */ if (!values[31]) values[31] = __Pyx_NewRef(((PyObject *)Py_None)); } __pyx_v_conf_str = ((PyObject*)values[0]); __pyx_v_bind_interface = ((PyObject*)values[1]); __pyx_v_username = ((PyObject*)values[2]); __pyx_v_password = ((PyObject*)values[3]); __pyx_v_token = ((PyObject*)values[4]); __pyx_v_oidc_auth = values[5]; __pyx_v_bearer_token_provider = values[6]; __pyx_v_token_x = ((PyObject*)values[7]); __pyx_v_token_y = ((PyObject*)values[8]); __pyx_v_auth_timeout = values[9]; __pyx_v_tls_verify = values[10]; __pyx_v_tls_ca = values[11]; __pyx_v_tls_roots = values[12]; __pyx_v_tls_roots_password = ((PyObject*)values[13]); __pyx_v_max_buf_size = values[14]; __pyx_v_retry_timeout = values[15]; __pyx_v_retry_max_backoff = values[16]; __pyx_v_request_min_throughput = values[17]; __pyx_v_request_timeout = values[18]; __pyx_v_auto_flush = values[19]; __pyx_v_auto_flush_rows = values[20]; __pyx_v_auto_flush_bytes = values[21]; __pyx_v_auto_flush_interval = values[22]; __pyx_v_max_datagram_size = values[23]; __pyx_v_multicast_ttl = values[24]; __pyx_v_qwp_ws_progress = values[25]; __pyx_v_error_handler = values[26]; __pyx_v_connection_listener = values[27]; __pyx_v_connection_event_inbox_capacity = values[28]; __pyx_v_protocol_version = values[29]; __pyx_v_init_buf_size = values[30]; __pyx_v_max_name_len = values[31]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("from_conf", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 12164, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Sender.from_conf", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_conf_str), (&PyUnicode_Type), 1, "conf_str", 1))) __PYX_ERR(0, 12166, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_bind_interface), (&PyUnicode_Type), 1, "bind_interface", 1))) __PYX_ERR(0, 12168, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_username), (&PyUnicode_Type), 1, "username", 1))) __PYX_ERR(0, 12169, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_password), (&PyUnicode_Type), 1, "password", 1))) __PYX_ERR(0, 12170, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 1, "token", 1))) __PYX_ERR(0, 12171, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token_x), (&PyUnicode_Type), 1, "token_x", 1))) __PYX_ERR(0, 12174, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token_y), (&PyUnicode_Type), 1, "token_y", 1))) __PYX_ERR(0, 12175, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tls_roots_password), (&PyUnicode_Type), 1, "tls_roots_password", 1))) __PYX_ERR(0, 12180, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_6Sender_8from_conf(__pyx_v_conf_str, __pyx_v_bind_interface, __pyx_v_username, __pyx_v_password, __pyx_v_token, __pyx_v_oidc_auth, __pyx_v_bearer_token_provider, __pyx_v_token_x, __pyx_v_token_y, __pyx_v_auth_timeout, __pyx_v_tls_verify, __pyx_v_tls_ca, __pyx_v_tls_roots, __pyx_v_tls_roots_password, __pyx_v_max_buf_size, __pyx_v_retry_timeout, __pyx_v_retry_max_backoff, __pyx_v_request_min_throughput, __pyx_v_request_timeout, __pyx_v_auto_flush, __pyx_v_auto_flush_rows, __pyx_v_auto_flush_bytes, __pyx_v_auto_flush_interval, __pyx_v_max_datagram_size, __pyx_v_multicast_ttl, __pyx_v_qwp_ws_progress, __pyx_v_error_handler, __pyx_v_connection_listener, __pyx_v_connection_event_inbox_capacity, __pyx_v_protocol_version, __pyx_v_init_buf_size, __pyx_v_max_name_len); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_max_name_len, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
12199: """
12200: Construct a sender from a :ref:`configuration string <sender_conf>`.
12201:
12202: The additional arguments are used to specify additional parameters
12203: which are not present in the configuration string.
12204:
12205: Note that any parameters already present in the configuration string
12206: cannot be overridden.
12207:
12208: ``oidc_auth`` attaches a native rotating OIDC token provider — see
12209: :class:`questdb.auth.OidcDeviceAuth` and the :ref:`oidc_auth` guide. It
12210: is a Python argument only, with no configuration-string equivalent, and
12211: is mutually exclusive with ``token``, ``username`` and ``password``.
12212: Use ``https::`` or ``wss::``: over plain ``http::`` or ``ws::`` to a
12213: non-loopback host the token is sent in cleartext.
12214: Call :meth:`~questdb.auth.OidcDeviceAuth.sign_in` before the first
12215: flush: connect and reconnect load or silently refresh a token but never
12216: start an interactive device flow. Supported on HTTP(S) and
12217: QWP/WebSocket; TCP and UDP are rejected.
12218:
12219: ``bearer_token_provider`` attaches a rotating Bearer-token provider
12220: instead: a :class:`questdb.auth.RefreshingTokenProvider` around a token
12221: source of your own, a callable returning a token, or an object with
12222: ``token()`` and an optional ``on_rejected()`` -- see
12223: :ref:`refreshing_token_provider`. It is mutually exclusive with
12224: ``oidc_auth``, ``token``, ``username`` and ``password``. It runs
12225: inside every ILP/HTTP flush, and inside a connect the call waits for
12226: such as :meth:`establish <questdb.Sender.establish>`, where neither
12227: it nor a Python signal handler may use this sender; see
12228: :ref:`token_provider_reentrancy`.
12229: """
12230:
+12231: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
12232: cdef object protocol
12233: cdef Sender sender
12234: cdef str synthetic_conf_str
12235: cdef line_sender_utf8 c_synthetic_conf_str
12236: cdef dict params
+12237: cdef qdb_pystr_buf* b = qdb_pystr_buf_new()
__pyx_v_b = qdb_pystr_buf_new();
+12238: try:
/*try:*/ {
+12239: protocol, params = parse_conf_str(b, conf_str)
__pyx_t_1 = __pyx_f_7questdb_7_client_parse_conf_str(__pyx_v_b, __pyx_v_conf_str); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12239, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 12239, __pyx_L4_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_3); } else { __pyx_t_2 = __Pyx_PyList_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12239, __pyx_L4_error) __Pyx_XGOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12239, __pyx_L4_error) __Pyx_XGOTREF(__pyx_t_3); } #else __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12239, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12239, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12239, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < (0)) __PYX_ERR(0, 12239, __pyx_L4_error) __pyx_t_5 = NULL; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L7_unpacking_done; __pyx_L6_unpacking_failed:; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 12239, __pyx_L4_error) __pyx_L7_unpacking_done:; } if (!(likely(PyDict_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_3))) __PYX_ERR(0, 12239, __pyx_L4_error) __pyx_v_protocol = __pyx_t_2; __pyx_t_2 = 0; __pyx_v_params = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0;
+12240: _tp_reject_conf_keys(params)
__pyx_t_6 = __pyx_f_7questdb_7_client__tp_reject_conf_keys(__pyx_v_params); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12240, __pyx_L4_error)
12241:
+12242: addr = params.get('addr')
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 12242, __pyx_L4_error)
}
__pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_addr, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12242, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_v_addr = __pyx_t_1;
__pyx_t_1 = 0;
+12243: if addr is None:
__pyx_t_7 = (__pyx_v_addr == Py_None);
if (unlikely(__pyx_t_7)) {
/* … */
}
+12244: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12244, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_2);
+12245: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12245, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12245, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_8, __pyx_mstate_global->__pyx_kp_u_Missing_addr_parameter_in_config}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12244, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 12244, __pyx_L4_error)
12246: 'Missing "addr" parameter in config string')
12247:
12248: # add fields to the dictionary, so long as they aren't already
12249: # present in the params dictionary
+12250: for override_key, override_value in {
__pyx_t_10 = 0;
/* … */
while (1) {
/* … */
__Pyx_XDECREF_SET(__pyx_v_override_key, __pyx_t_8);
__pyx_t_8 = 0;
__Pyx_XDECREF_SET(__pyx_v_override_value, __pyx_t_2);
__pyx_t_2 = 0;
+12251: 'bind_interface': bind_interface,
__pyx_t_2 = __Pyx_PyDict_NewPresized(26); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12251, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_bind_interface, __pyx_v_bind_interface) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error) /* … */ __pyx_t_8 = __Pyx_dict_iterator(__pyx_t_2, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_11), (&__pyx_t_12)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12251, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = __pyx_t_8; __pyx_t_8 = 0; /* … */ __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_11, &__pyx_t_10, &__pyx_t_8, &__pyx_t_2, NULL, __pyx_t_12); if (unlikely(__pyx_t_13 == 0)) break; if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 12251, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_GOTREF(__pyx_t_2);
+12252: 'username': username,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_username, __pyx_v_username) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12253: 'password': password,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_password, __pyx_v_password) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12254: 'token': token,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_token, __pyx_v_token) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12255: 'token_x': token_x,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_token_x, __pyx_v_token_x) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12256: 'token_y': token_y,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_token_y, __pyx_v_token_y) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12257: 'auth_timeout': auth_timeout,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_auth_timeout, __pyx_v_auth_timeout) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12258: 'tls_verify': tls_verify,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_tls_verify, __pyx_v_tls_verify) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12259: 'tls_ca': tls_ca,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_tls_ca, __pyx_v_tls_ca) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12260: 'tls_roots': tls_roots,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_tls_roots, __pyx_v_tls_roots) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12261: 'tls_roots_password': tls_roots_password,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_tls_roots_password, __pyx_v_tls_roots_password) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12262: 'max_buf_size': max_buf_size,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_max_buf_size, __pyx_v_max_buf_size) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12263: 'retry_timeout': retry_timeout,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_retry_timeout, __pyx_v_retry_timeout) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12264: 'retry_max_backoff_millis': retry_max_backoff,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_retry_max_backoff_millis, __pyx_v_retry_max_backoff) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12265: 'request_min_throughput': request_min_throughput,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_request_min_throughput, __pyx_v_request_min_throughput) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12266: 'request_timeout': request_timeout,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_request_timeout, __pyx_v_request_timeout) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12267: 'auto_flush': auto_flush,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_auto_flush, __pyx_v_auto_flush) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12268: 'auto_flush_rows': auto_flush_rows,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_auto_flush_rows, __pyx_v_auto_flush_rows) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12269: 'auto_flush_bytes': auto_flush_bytes,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes, __pyx_v_auto_flush_bytes) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12270: 'auto_flush_interval': auto_flush_interval,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_auto_flush_interval, __pyx_v_auto_flush_interval) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12271: 'max_datagram_size': max_datagram_size,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_max_datagram_size, __pyx_v_max_datagram_size) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12272: 'multicast_ttl': multicast_ttl,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_multicast_ttl, __pyx_v_multicast_ttl) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12273: 'qwp_ws_progress': qwp_ws_progress,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_qwp_ws_progress, __pyx_v_qwp_ws_progress) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12274: 'protocol_version': protocol_version,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_protocol_version, __pyx_v_protocol_version) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12275: 'init_buf_size': init_buf_size,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_init_buf_size, __pyx_v_init_buf_size) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12276: 'max_name_len': max_name_len,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_max_name_len, __pyx_v_max_name_len) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
12277: }.items():
+12278: if override_value is None:
__pyx_t_7 = (__pyx_v_override_value == Py_None);
if (__pyx_t_7) {
/* … */
}
+12279: continue
goto __pyx_L9_continue;
+12280: if override_key in params:
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not iterable");
__PYX_ERR(0, 12280, __pyx_L4_error)
}
__pyx_t_7 = (__Pyx_PyDict_ContainsTF(__pyx_v_override_key, __pyx_v_params, Py_EQ)); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 12280, __pyx_L4_error)
if (unlikely(__pyx_t_7)) {
/* … */
}
+12281: raise ValueError(
__pyx_t_8 = NULL;
+12282: f'"{override_key}" is already present in the conf_str '
__pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_override_key, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12282, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_14[0] = __pyx_mstate_global->__pyx_kp_u__26; __pyx_t_14[1] = __pyx_t_3; __pyx_t_14[2] = __pyx_mstate_global->__pyx_kp_u_is_already_present_in_the_conf; __pyx_t_15 = 63; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14[1]); #endif __pyx_t_13 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_13 |= __Pyx_PyUnicode_KIND_04(__pyx_t_14[1]); #endif __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_14, 3, __pyx_t_15, __pyx_t_13); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12282, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_9 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_4}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12281, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 12281, __pyx_L4_error)
12283: 'and cannot be overridden.')
+12284: params[override_key] = override_value
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
__PYX_ERR(0, 12284, __pyx_L4_error)
}
if (unlikely((PyDict_SetItem(__pyx_v_params, __pyx_v_override_key, __pyx_v_override_value) < 0))) __PYX_ERR(0, 12284, __pyx_L4_error)
__pyx_L9_continue:;
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
12285:
+12286: sender = Sender.__new__(Sender)
__pyx_t_1 = ((PyObject *)__pyx_tp_new_7questdb_7_client_Sender(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12286, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_sender = ((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_t_1); __pyx_t_1 = 0;
12287:
12288: python_handled_keys = {
+12289: 'addr',
__pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12289, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_addr) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_bind_interface) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_username) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_password) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_token) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_token_x) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_token_y) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auth_timeout) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_verify) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_ca) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_roots) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_roots_password) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_max_buf_size) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_retry_timeout) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_retry_max_backoff_millis) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_request_min_throughput) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_request_timeout) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_rows) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_interval) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_max_datagram_size) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_multicast_ttl) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_qwp_ws_progress) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_protocol_version) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_init_buf_size) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_max_name_len) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error) __pyx_v_python_handled_keys = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
12290: 'bind_interface',
12291: 'username',
12292: 'password',
12293: 'token',
12294: 'token_x',
12295: 'token_y',
12296: 'auth_timeout',
12297: 'tls_verify',
12298: 'tls_ca',
12299: 'tls_roots',
12300: 'tls_roots_password',
12301: 'max_buf_size',
12302: 'retry_timeout',
12303: 'retry_max_backoff_millis',
12304: 'request_min_throughput',
12305: 'request_timeout',
12306: 'auto_flush',
12307: 'auto_flush_rows',
12308: 'auto_flush_bytes',
12309: 'auto_flush_interval',
12310: 'max_datagram_size',
12311: 'multicast_ttl',
12312: 'qwp_ws_progress',
12313: 'protocol_version',
12314: 'init_buf_size',
12315: 'max_name_len',
12316: }
+12317: synthetic_params = {'addr': addr}
__pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12317, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_addr, __pyx_v_addr) < (0)) __PYX_ERR(0, 12317, __pyx_L4_error) __pyx_v_synthetic_params = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
+12318: if protocol in (Protocol.Ws, Protocol.Wss):
__Pyx_INCREF(__pyx_v_protocol); __pyx_t_1 = __pyx_v_protocol; __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_Protocol); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12318, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_Ws); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12318, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_16 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_1, __pyx_t_4, Py_EQ); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 12318, __pyx_L4_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!__pyx_t_16) { } else { __pyx_t_7 = __pyx_t_16; 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, 12318, __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, 12318, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_16 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_1, __pyx_t_2, Py_EQ); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 12318, __pyx_L4_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_7 = __pyx_t_16; __pyx_L14_bool_binop_done:; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_16 = __pyx_t_7; if (__pyx_t_16) { /* … */ }
+12319: for key, value in params.items():
__pyx_t_11 = 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, 12319, __pyx_L4_error)
}
__pyx_t_2 = __Pyx_dict_iterator(__pyx_v_params, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_10), (&__pyx_t_12)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12319, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_1);
__pyx_t_1 = __pyx_t_2;
__pyx_t_2 = 0;
while (1) {
__pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_10, &__pyx_t_11, &__pyx_t_2, &__pyx_t_4, NULL, __pyx_t_12);
if (unlikely(__pyx_t_13 == 0)) break;
if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 12319, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_GOTREF(__pyx_t_4);
__Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_2);
__pyx_t_2 = 0;
__Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_4);
__pyx_t_4 = 0;
+12320: if key not in python_handled_keys:
__pyx_t_16 = (__Pyx_PySet_ContainsTF(__pyx_v_key, __pyx_v_python_handled_keys, Py_NE)); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 12320, __pyx_L4_error) if (__pyx_t_16) { /* … */ } } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+12321: synthetic_params[key] = value
if (unlikely((PyDict_SetItem(__pyx_v_synthetic_params, __pyx_v_key, __pyx_v_value) < 0))) __PYX_ERR(0, 12321, __pyx_L4_error)
+12322: synthetic_conf_str = protocol.tag + '::' + ''.join(
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_protocol, __pyx_mstate_global->__pyx_n_u_tag); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12322, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyNumber_Add(__pyx_t_1, __pyx_mstate_global->__pyx_kp_u__37); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12322, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* … */ __pyx_t_2 = __Pyx_Generator_GetInlinedResult(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12322, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12322, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Add(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12322, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (!(likely(PyUnicode_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_2))) __PYX_ERR(0, 12322, __pyx_L4_error) __pyx_v_synthetic_conf_str = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0;
+12323: f'{key}={conf_str_value(value)};'
static PyObject *__pyx_pf_7questdb_7_client_6Sender_9from_conf_genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_17_genexpr *__pyx_cur_scope;
PyObject *__pyx_r = NULL;
__pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_17_genexpr *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_17_genexpr(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_17_genexpr, __pyx_mstate_global->__pyx_empty_tuple, NULL);
if (unlikely(!__pyx_cur_scope)) {
__pyx_cur_scope = ((struct __pyx_obj_7questdb_7_client___pyx_scope_struct_17_genexpr *)Py_None);
__Pyx_INCREF(Py_None);
__PYX_ERR(0, 12323, __pyx_L1_error)
} else {
__Pyx_GOTREF((PyObject *)__pyx_cur_scope);
}
__pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
__Pyx_INCREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
{
__pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7questdb_7_client_6Sender_9from_conf_2generator13, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[13]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_from_conf_locals_genexpr, __pyx_mstate_global->__pyx_n_u_questdb__client); if (unlikely(!gen)) __PYX_ERR(0, 12323, __pyx_L1_error)
__Pyx_DECREF(__pyx_cur_scope);
__Pyx_RefNannyFinishContext();
return (PyObject *) gen;
}
/* function exit code */
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client.Sender.from_conf.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__Pyx_DECREF((PyObject *)__pyx_cur_scope);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_gb_7questdb_7_client_6Sender_9from_conf_2generator13(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("genexpr", 0);
__pyx_L3_first_run:;
if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 12323, __pyx_L1_error)
__pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 12323, __pyx_L1_error)
__Pyx_GOTREF(__pyx_r);
/* … */
__pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_key, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12323, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_5 = __pyx_f_7questdb_7_client_conf_str_value(__pyx_cur_scope->__pyx_v_value); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12323, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12323, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__pyx_t_9[0] = __pyx_t_6;
__pyx_t_9[1] = __pyx_mstate_global->__pyx_kp_u__36;
__pyx_t_9[2] = __pyx_t_8;
__pyx_t_9[3] = __pyx_mstate_global->__pyx_kp_u__30;
__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, 12323, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_GIVEREF(__pyx_t_5);
if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_r, __pyx_t_5))) __PYX_ERR(0, 12323, __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, 12323, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_1);
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_17_genexpr {
PyObject_HEAD
PyObject *__pyx_genexpr_arg_0;
PyObject *__pyx_v_key;
PyObject *__pyx_v_value;
};
+12324: for key, value in synthetic_params.items())
__pyx_t_2 = 0;
if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 12324, __pyx_L1_error) }
__pyx_t_5 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_genexpr_arg_0, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12324, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_1);
__pyx_t_1 = __pyx_t_5;
__pyx_t_5 = 0;
while (1) {
__pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, &__pyx_t_5, &__pyx_t_6, NULL, __pyx_t_4);
if (unlikely(__pyx_t_7 == 0)) break;
if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 12324, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_GOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_key);
__Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_key, __pyx_t_5);
__Pyx_GIVEREF(__pyx_t_5);
__pyx_t_5 = 0;
__Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_value);
__Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_value, __pyx_t_6);
__Pyx_GIVEREF(__pyx_t_6);
__pyx_t_6 = 0;
+12325: str_to_utf8(b, <PyObject*>synthetic_conf_str, &c_synthetic_conf_str)
__pyx_t_6 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_synthetic_conf_str), (&__pyx_v_c_synthetic_conf_str)); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12325, __pyx_L4_error)
+12326: sender._opts = line_sender_opts_from_conf(
__pyx_v_sender->_opts = line_sender_opts_from_conf(__pyx_v_c_synthetic_conf_str, (&__pyx_v_err));
12327: c_synthetic_conf_str, &err)
+12328: if sender._opts == NULL:
__pyx_t_16 = (__pyx_v_sender->_opts == NULL);
if (unlikely(__pyx_t_16)) {
/* … */
}
+12329: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12329, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 12329, __pyx_L4_error)
12330:
+12331: sender._set_sender_fields(
__pyx_t_6 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_sender->__pyx_vtab)->_set_sender_fields(__pyx_v_sender, __pyx_v_b, __pyx_v_protocol, ((PyObject*)__pyx_t_2), ((PyObject*)__pyx_t_1), ((PyObject*)__pyx_t_4), ((PyObject*)__pyx_t_8), __pyx_v_oidc_auth, __pyx_v_bearer_token_provider, ((PyObject*)__pyx_t_3), ((PyObject*)__pyx_t_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_6 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12331, __pyx_L4_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_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;
12332: b,
12333: protocol,
+12334: 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, 12334, __pyx_L4_error)
}
__pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_bind_interface, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12334, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_2);
if (!(likely(PyUnicode_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_2))) __PYX_ERR(0, 12334, __pyx_L4_error)
+12335: params.get('username'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 12335, __pyx_L4_error)
}
__pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_username, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12335, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_1);
if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(0, 12335, __pyx_L4_error)
+12336: params.get('password'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 12336, __pyx_L4_error)
}
__pyx_t_4 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_password, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12336, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_4);
if (!(likely(PyUnicode_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_4))) __PYX_ERR(0, 12336, __pyx_L4_error)
+12337: params.get('token'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 12337, __pyx_L4_error)
}
__pyx_t_8 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_token, Py_None); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12337, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_8);
if (!(likely(PyUnicode_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_8))) __PYX_ERR(0, 12337, __pyx_L4_error)
12338: oidc_auth,
12339: bearer_token_provider,
+12340: params.get('token_x'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 12340, __pyx_L4_error)
}
__pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_token_x, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12340, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_3);
if (!(likely(PyUnicode_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_3))) __PYX_ERR(0, 12340, __pyx_L4_error)
+12341: params.get('token_y'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 12341, __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, 12341, __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, 12341, __pyx_L4_error)
+12342: 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, 12342, __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, 12342, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_18);
+12343: 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, 12343, __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, 12343, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_19);
+12344: 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, 12344, __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, 12344, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_20);
+12345: 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, 12345, __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, 12345, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_21);
+12346: 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, 12346, __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, 12346, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_22);
+12347: 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, 12347, __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, 12347, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_23);
+12348: 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, 12348, __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, 12348, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_24);
+12349: 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, 12349, __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, 12349, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_25);
+12350: 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, 12350, __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, 12350, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_26);
+12351: 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, 12351, __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, 12351, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_27);
+12352: 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, 12352, __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, 12352, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_28);
+12353: 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, 12353, __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, 12353, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_29);
+12354: 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, 12354, __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, 12354, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_30);
+12355: 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, 12355, __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, 12355, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_31);
+12356: 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, 12356, __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, 12356, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_32);
+12357: 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, 12357, __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, 12357, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_33);
+12358: 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, 12358, __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, 12358, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_34);
+12359: 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, 12359, __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, 12359, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_35);
12360: error_handler,
12361: connection_listener,
12362: connection_event_inbox_capacity,
+12363: params.get('init_buf_size'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 12363, __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, 12363, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_36);
+12364: 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, 12364, __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, 12364, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_37);
12365:
+12366: 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;
}
12367: finally:
+12368: 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_8); __pyx_t_8 = 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_12 = __pyx_lineno; __pyx_t_13 = __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_12; __pyx_clineno = __pyx_t_13; __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;
}
}
12369:
+12370: @staticmethod
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_11from_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_10from_env, "\n Construct a sender from the ``QDB_CLIENT_CONF`` environment variable.\n\n The environment variable must be set to a valid\n :ref:`configuration string <sender_conf>`.\n\n The additional arguments are used to specify additional parameters\n which are not present in the configuration string.\n\n Note that any parameters already present in the configuration string\n cannot be overridden.\n\n ``oidc_auth`` attaches a native rotating OIDC token provider \342\200\224 see\n :class:`questdb.auth.OidcDeviceAuth` and the :ref:`oidc_auth` guide.\n ``bearer_token_provider`` attaches a rotating Bearer-token provider\n instead: a :class:`questdb.auth.RefreshingTokenProvider` around a token\n source of your own, a callable returning a token, or an object with\n ``token()`` and an optional ``on_rejected()`` -- see\n :ref:`refreshing_token_provider`. It runs inside every ILP/HTTP\n flush, and inside a connect the call waits for such as\n :meth:`establish <questdb.Sender.establish>`, where neither it nor a\n Python signal handler may use this sender; see\n :ref:`token_provider_reentrancy`.\n Neither has a configuration-string equivalent, so a token provider\n must be supplied here rather than through ``QDB_CLIENT_CONF``. They\n are mutually exclusive with each other and with ``token``,\n ``username`` and ``password``.\n Use ``https::`` or ``wss::``: over plain ``http::`` or ``ws::`` to a\n non-loopback host the token is sent in cleartext.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_11from_env = {"from_env", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_11from_env, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_10from_env}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_11from_env(CYTHON_UNUSED PyObject *__pyx_self, #if CYTHON_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_oidc_auth = 0; PyObject *__pyx_v_bearer_token_provider = 0; PyObject *__pyx_v_token_x = 0; PyObject *__pyx_v_token_y = 0; PyObject *__pyx_v_auth_timeout = 0; PyObject *__pyx_v_tls_verify = 0; PyObject *__pyx_v_tls_ca = 0; PyObject *__pyx_v_tls_roots = 0; PyObject *__pyx_v_tls_roots_password = 0; PyObject *__pyx_v_max_buf_size = 0; PyObject *__pyx_v_retry_timeout = 0; PyObject *__pyx_v_retry_max_backoff = 0; PyObject *__pyx_v_request_min_throughput = 0; PyObject *__pyx_v_request_timeout = 0; PyObject *__pyx_v_auto_flush = 0; PyObject *__pyx_v_auto_flush_rows = 0; PyObject *__pyx_v_auto_flush_bytes = 0; PyObject *__pyx_v_auto_flush_interval = 0; PyObject *__pyx_v_max_datagram_size = 0; PyObject *__pyx_v_multicast_ttl = 0; PyObject *__pyx_v_qwp_ws_progress = 0; PyObject *__pyx_v_error_handler = 0; PyObject *__pyx_v_connection_listener = 0; PyObject *__pyx_v_connection_event_inbox_capacity = 0; PyObject *__pyx_v_protocol_version = 0; PyObject *__pyx_v_init_buf_size = 0; PyObject *__pyx_v_max_name_len = 0; #if !CYTHON_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_oidc_auth,&__pyx_mstate_global->__pyx_n_u_bearer_token_provider_2,&__pyx_mstate_global->__pyx_n_u_token_x,&__pyx_mstate_global->__pyx_n_u_token_y,&__pyx_mstate_global->__pyx_n_u_auth_timeout,&__pyx_mstate_global->__pyx_n_u_tls_verify,&__pyx_mstate_global->__pyx_n_u_tls_ca,&__pyx_mstate_global->__pyx_n_u_tls_roots,&__pyx_mstate_global->__pyx_n_u_tls_roots_password,&__pyx_mstate_global->__pyx_n_u_max_buf_size,&__pyx_mstate_global->__pyx_n_u_retry_timeout,&__pyx_mstate_global->__pyx_n_u_retry_max_backoff,&__pyx_mstate_global->__pyx_n_u_request_min_throughput,&__pyx_mstate_global->__pyx_n_u_request_timeout,&__pyx_mstate_global->__pyx_n_u_auto_flush,&__pyx_mstate_global->__pyx_n_u_auto_flush_rows,&__pyx_mstate_global->__pyx_n_u_auto_flush_bytes,&__pyx_mstate_global->__pyx_n_u_auto_flush_interval,&__pyx_mstate_global->__pyx_n_u_max_datagram_size,&__pyx_mstate_global->__pyx_n_u_multicast_ttl,&__pyx_mstate_global->__pyx_n_u_qwp_ws_progress,&__pyx_mstate_global->__pyx_n_u_error_handler,&__pyx_mstate_global->__pyx_n_u_connection_listener,&__pyx_mstate_global->__pyx_n_u_connection_event_inbox_capacity,&__pyx_mstate_global->__pyx_n_u_protocol_version,&__pyx_mstate_global->__pyx_n_u_init_buf_size,&__pyx_mstate_global->__pyx_n_u_max_name_len,0}; PyObject* values[31] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 12370, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 0: break; default: goto __pyx_L5_argtuple_error; } if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, 0, __pyx_kwds_len, "from_env", 0) < (0)) __PYX_ERR(0, 12370, __pyx_L3_error) /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_10from_env(PyObject *__pyx_v_bind_interface, PyObject *__pyx_v_username, PyObject *__pyx_v_password, PyObject *__pyx_v_token, PyObject *__pyx_v_oidc_auth, PyObject *__pyx_v_bearer_token_provider, PyObject *__pyx_v_token_x, PyObject *__pyx_v_token_y, PyObject *__pyx_v_auth_timeout, PyObject *__pyx_v_tls_verify, PyObject *__pyx_v_tls_ca, PyObject *__pyx_v_tls_roots, PyObject *__pyx_v_tls_roots_password, PyObject *__pyx_v_max_buf_size, PyObject *__pyx_v_retry_timeout, PyObject *__pyx_v_retry_max_backoff, PyObject *__pyx_v_request_min_throughput, PyObject *__pyx_v_request_timeout, PyObject *__pyx_v_auto_flush, PyObject *__pyx_v_auto_flush_rows, PyObject *__pyx_v_auto_flush_bytes, PyObject *__pyx_v_auto_flush_interval, PyObject *__pyx_v_max_datagram_size, PyObject *__pyx_v_multicast_ttl, PyObject *__pyx_v_qwp_ws_progress, PyObject *__pyx_v_error_handler, PyObject *__pyx_v_connection_listener, PyObject *__pyx_v_connection_event_inbox_capacity, PyObject *__pyx_v_protocol_version, PyObject *__pyx_v_init_buf_size, PyObject *__pyx_v_max_name_len) { PyObject *__pyx_v_conf_str = 0; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("questdb._client.Sender.from_env", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_conf_str); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_20 = __Pyx_PyDict_NewPresized(31); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 12370, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); /* … */ __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_11from_env, __Pyx_CYFUNCTION_STATICMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_from_env, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[225])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 12370, __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_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_25) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __pyx_t_20 = NULL; __Pyx_GetNameInClass(__pyx_t_18, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_from_env); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 12370, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_20, __pyx_t_18}; __pyx_t_25 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_staticmethod, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 12370, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); } if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_from_env, __pyx_t_25) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
12371: def from_env(
12372: *,
+12373: str bind_interface=None,
if (!values[0]) values[0] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[0]) values[0] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_bind_interface, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12374: str username=None,
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_username, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12375: str password=None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_password, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12376: str token=None,
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_token, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12377: object oidc_auth=None,
if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_oidc_auth, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12378: object bearer_token_provider=None,
if (!values[5]) values[5] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[5]) values[5] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_bearer_token_provider_2, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12379: str token_x=None,
if (!values[6]) values[6] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[6]) values[6] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_token_x, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12380: str token_y=None,
if (!values[7]) values[7] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[7]) values[7] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_token_y, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12381: object auth_timeout=None, # default: 15000 milliseconds
if (!values[8]) values[8] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[8]) values[8] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_auth_timeout, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12382: object tls_verify=None, # default: True
if (!values[9]) values[9] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[9]) values[9] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_tls_verify, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12383: object tls_ca=None, # TLS default: TlsCa.WebpkiAndOsRoots
if (!values[10]) values[10] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[10]) values[10] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_tls_ca, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12384: object tls_roots=None,
if (!values[11]) values[11] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[11]) values[11] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_tls_roots, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12385: str tls_roots_password=None,
if (!values[12]) values[12] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[12]) values[12] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_tls_roots_password, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12386: object max_buf_size=None, # 100 * 1024 * 1024 - 100MiB
if (!values[13]) values[13] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[13]) values[13] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_max_buf_size, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12387: object retry_timeout=None, # default: 10000 milliseconds
if (!values[14]) values[14] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[14]) values[14] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_retry_timeout, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12388: object retry_max_backoff=None, # default: 1000 milliseconds
if (!values[15]) values[15] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[15]) values[15] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_retry_max_backoff, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12389: object request_min_throughput=None, # default: 100 * 1024 - 100KiB/s
if (!values[16]) values[16] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[16]) values[16] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_request_min_throughput, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12390: object request_timeout=None,
if (!values[17]) values[17] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[17]) values[17] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_request_timeout, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12391: object auto_flush=None, # Default True
if (!values[18]) values[18] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[18]) values[18] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_auto_flush, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12392: object auto_flush_rows=None, # Default 75000 (HTTP) or 600 (TCP)
if (!values[19]) values[19] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[19]) values[19] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_auto_flush_rows, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12393: object auto_flush_bytes=None, # Default off (90% of the frame cap for ws and wss)
if (!values[20]) values[20] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[20]) values[20] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12394: object auto_flush_interval=None, # Default 1000 milliseconds
if (!values[21]) values[21] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[21]) values[21] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_auto_flush_interval, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12395: object max_datagram_size=None, # Default 1400 for QWP/UDP
if (!values[22]) values[22] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[22]) values[22] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_max_datagram_size, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12396: object multicast_ttl=None, # Default 1 for QWP/UDP
if (!values[23]) values[23] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[23]) values[23] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_multicast_ttl, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12397: object qwp_ws_progress=None, # Default background for QWP/WebSocket
if (!values[24]) values[24] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[24]) values[24] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_qwp_ws_progress, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12398: object error_handler=None,
if (!values[25]) values[25] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[25]) values[25] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_error_handler, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12399: object connection_listener=None,
if (!values[26]) values[26] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[27]) values[27] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); /* … */ if (!values[26]) values[26] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[27]) values[27] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_connection_listener, Py_None) < (0)) __PYX_ERR(0, 12370, __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, 12370, __pyx_L1_error)
12400: object connection_event_inbox_capacity=0,
+12401: object protocol_version=None, # Default auto
if (!values[28]) values[28] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[28]) values[28] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_protocol_version, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12402: object init_buf_size=None, # 64KiB
if (!values[29]) values[29] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[29]) values[29] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_init_buf_size, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12403: object max_name_len=None): # 127
if (!values[30]) values[30] = __Pyx_NewRef(((PyObject *)Py_None)); } else if (unlikely(__pyx_nargs != 0)) { goto __pyx_L5_argtuple_error; } else { /* … */ if (!values[30]) values[30] = __Pyx_NewRef(((PyObject *)Py_None)); } __pyx_v_bind_interface = ((PyObject*)values[0]); __pyx_v_username = ((PyObject*)values[1]); __pyx_v_password = ((PyObject*)values[2]); __pyx_v_token = ((PyObject*)values[3]); __pyx_v_oidc_auth = values[4]; __pyx_v_bearer_token_provider = values[5]; __pyx_v_token_x = ((PyObject*)values[6]); __pyx_v_token_y = ((PyObject*)values[7]); __pyx_v_auth_timeout = values[8]; __pyx_v_tls_verify = values[9]; __pyx_v_tls_ca = values[10]; __pyx_v_tls_roots = values[11]; __pyx_v_tls_roots_password = ((PyObject*)values[12]); __pyx_v_max_buf_size = values[13]; __pyx_v_retry_timeout = values[14]; __pyx_v_retry_max_backoff = values[15]; __pyx_v_request_min_throughput = values[16]; __pyx_v_request_timeout = values[17]; __pyx_v_auto_flush = values[18]; __pyx_v_auto_flush_rows = values[19]; __pyx_v_auto_flush_bytes = values[20]; __pyx_v_auto_flush_interval = values[21]; __pyx_v_max_datagram_size = values[22]; __pyx_v_multicast_ttl = values[23]; __pyx_v_qwp_ws_progress = values[24]; __pyx_v_error_handler = values[25]; __pyx_v_connection_listener = values[26]; __pyx_v_connection_event_inbox_capacity = values[27]; __pyx_v_protocol_version = values[28]; __pyx_v_init_buf_size = values[29]; __pyx_v_max_name_len = values[30]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("from_env", 1, 0, 0, __pyx_nargs); __PYX_ERR(0, 12370, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Sender.from_env", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_bind_interface), (&PyUnicode_Type), 1, "bind_interface", 1))) __PYX_ERR(0, 12373, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_username), (&PyUnicode_Type), 1, "username", 1))) __PYX_ERR(0, 12374, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_password), (&PyUnicode_Type), 1, "password", 1))) __PYX_ERR(0, 12375, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 1, "token", 1))) __PYX_ERR(0, 12376, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token_x), (&PyUnicode_Type), 1, "token_x", 1))) __PYX_ERR(0, 12379, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token_y), (&PyUnicode_Type), 1, "token_y", 1))) __PYX_ERR(0, 12380, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tls_roots_password), (&PyUnicode_Type), 1, "tls_roots_password", 1))) __PYX_ERR(0, 12385, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_6Sender_10from_env(__pyx_v_bind_interface, __pyx_v_username, __pyx_v_password, __pyx_v_token, __pyx_v_oidc_auth, __pyx_v_bearer_token_provider, __pyx_v_token_x, __pyx_v_token_y, __pyx_v_auth_timeout, __pyx_v_tls_verify, __pyx_v_tls_ca, __pyx_v_tls_roots, __pyx_v_tls_roots_password, __pyx_v_max_buf_size, __pyx_v_retry_timeout, __pyx_v_retry_max_backoff, __pyx_v_request_min_throughput, __pyx_v_request_timeout, __pyx_v_auto_flush, __pyx_v_auto_flush_rows, __pyx_v_auto_flush_bytes, __pyx_v_auto_flush_interval, __pyx_v_max_datagram_size, __pyx_v_multicast_ttl, __pyx_v_qwp_ws_progress, __pyx_v_error_handler, __pyx_v_connection_listener, __pyx_v_connection_event_inbox_capacity, __pyx_v_protocol_version, __pyx_v_init_buf_size, __pyx_v_max_name_len); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_max_name_len, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
12404: """
12405: Construct a sender from the ``QDB_CLIENT_CONF`` environment variable.
12406:
12407: The environment variable must be set to a valid
12408: :ref:`configuration string <sender_conf>`.
12409:
12410: The additional arguments are used to specify additional parameters
12411: which are not present in the configuration string.
12412:
12413: Note that any parameters already present in the configuration string
12414: cannot be overridden.
12415:
12416: ``oidc_auth`` attaches a native rotating OIDC token provider — see
12417: :class:`questdb.auth.OidcDeviceAuth` and the :ref:`oidc_auth` guide.
12418: ``bearer_token_provider`` attaches a rotating Bearer-token provider
12419: instead: a :class:`questdb.auth.RefreshingTokenProvider` around a token
12420: source of your own, a callable returning a token, or an object with
12421: ``token()`` and an optional ``on_rejected()`` -- see
12422: :ref:`refreshing_token_provider`. It runs inside every ILP/HTTP
12423: flush, and inside a connect the call waits for such as
12424: :meth:`establish <questdb.Sender.establish>`, where neither it nor a
12425: Python signal handler may use this sender; see
12426: :ref:`token_provider_reentrancy`.
12427: Neither has a configuration-string equivalent, so a token provider
12428: must be supplied here rather than through ``QDB_CLIENT_CONF``. They
12429: are mutually exclusive with each other and with ``token``,
12430: ``username`` and ``password``.
12431: Use ``https::`` or ``wss::``: over plain ``http::`` or ``ws::`` to a
12432: non-loopback host the token is sent in cleartext.
12433: """
+12434: cdef str conf_str = os.environ.get('QDB_CLIENT_CONF')
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_os); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12434, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_environ); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12434, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_2 = __pyx_t_4; __Pyx_INCREF(__pyx_t_2); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QDB_CLIENT_CONF}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12434, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(0, 12434, __pyx_L1_error) __pyx_v_conf_str = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
+12435: if conf_str is None:
__pyx_t_6 = (__pyx_v_conf_str == ((PyObject*)Py_None));
if (unlikely(__pyx_t_6)) {
/* … */
}
+12436: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12436, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
+12437: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12437, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12437, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_Environment_variable_QDB_CLIENT}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12436, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 12436, __pyx_L1_error)
12438: 'Environment variable QDB_CLIENT_CONF is not set.')
+12439: return Sender.from_conf(
__pyx_t_2 = ((PyObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender); __Pyx_INCREF(__pyx_t_2); /* … */ #endif __pyx_t_5 = 0; { PyObject *__pyx_callargs[33] = {__pyx_t_2, __pyx_v_conf_str, __pyx_v_bind_interface, __pyx_v_username, __pyx_v_password, __pyx_v_token, __pyx_v_oidc_auth, __pyx_v_bearer_token_provider, __pyx_v_token_x, __pyx_v_token_y, __pyx_v_auth_timeout, __pyx_v_tls_verify, __pyx_v_tls_ca, __pyx_v_tls_roots, __pyx_v_tls_roots_password, __pyx_v_max_buf_size, __pyx_v_retry_timeout, __pyx_v_retry_max_backoff, __pyx_v_request_min_throughput, __pyx_v_request_timeout, __pyx_v_auto_flush, __pyx_v_auto_flush_rows, __pyx_v_auto_flush_bytes, __pyx_v_auto_flush_interval, __pyx_v_max_datagram_size, __pyx_v_multicast_ttl, __pyx_v_qwp_ws_progress, __pyx_v_error_handler, __pyx_v_connection_listener, __pyx_v_connection_event_inbox_capacity, __pyx_v_protocol_version, __pyx_v_init_buf_size, __pyx_v_max_name_len}; #if CYTHON_VECTORCALL __pyx_t_7 = __pyx_mstate_global->__pyx_tuple[48]; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12439, __pyx_L1_error) __Pyx_INCREF(__pyx_t_7); #else { PyObject *__pyx_temp[31] = {__pyx_mstate_global->__pyx_n_u_bind_interface, __pyx_mstate_global->__pyx_n_u_username, __pyx_mstate_global->__pyx_n_u_password, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_oidc_auth, __pyx_mstate_global->__pyx_n_u_bearer_token_provider_2, __pyx_mstate_global->__pyx_n_u_token_x, __pyx_mstate_global->__pyx_n_u_token_y, __pyx_mstate_global->__pyx_n_u_auth_timeout, __pyx_mstate_global->__pyx_n_u_tls_verify, __pyx_mstate_global->__pyx_n_u_tls_ca, __pyx_mstate_global->__pyx_n_u_tls_roots, __pyx_mstate_global->__pyx_n_u_tls_roots_password, __pyx_mstate_global->__pyx_n_u_max_buf_size, __pyx_mstate_global->__pyx_n_u_retry_timeout, __pyx_mstate_global->__pyx_n_u_retry_max_backoff, __pyx_mstate_global->__pyx_n_u_request_min_throughput, __pyx_mstate_global->__pyx_n_u_request_timeout, __pyx_mstate_global->__pyx_n_u_auto_flush, __pyx_mstate_global->__pyx_n_u_auto_flush_rows, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes, __pyx_mstate_global->__pyx_n_u_auto_flush_interval, __pyx_mstate_global->__pyx_n_u_max_datagram_size, __pyx_mstate_global->__pyx_n_u_multicast_ttl, __pyx_mstate_global->__pyx_n_u_qwp_ws_progress, __pyx_mstate_global->__pyx_n_u_error_handler, __pyx_mstate_global->__pyx_n_u_connection_listener, __pyx_mstate_global->__pyx_n_u_connection_event_inbox_capacity, __pyx_mstate_global->__pyx_n_u_protocol_version, __pyx_mstate_global->__pyx_n_u_init_buf_size, __pyx_mstate_global->__pyx_n_u_max_name_len}; __pyx_t_7 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 31); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12439, __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; #if CYTHON_VECTORCALL #endif __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12439, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } { 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[31] = {__pyx_mstate_global->__pyx_n_u_bind_interface, __pyx_mstate_global->__pyx_n_u_username, __pyx_mstate_global->__pyx_n_u_password, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_oidc_auth, __pyx_mstate_global->__pyx_n_u_bearer_token_provider_2, __pyx_mstate_global->__pyx_n_u_token_x, __pyx_mstate_global->__pyx_n_u_token_y, __pyx_mstate_global->__pyx_n_u_auth_timeout, __pyx_mstate_global->__pyx_n_u_tls_verify, __pyx_mstate_global->__pyx_n_u_tls_ca, __pyx_mstate_global->__pyx_n_u_tls_roots, __pyx_mstate_global->__pyx_n_u_tls_roots_password, __pyx_mstate_global->__pyx_n_u_max_buf_size, __pyx_mstate_global->__pyx_n_u_retry_timeout, __pyx_mstate_global->__pyx_n_u_retry_max_backoff, __pyx_mstate_global->__pyx_n_u_request_min_throughput, __pyx_mstate_global->__pyx_n_u_request_timeout, __pyx_mstate_global->__pyx_n_u_auto_flush, __pyx_mstate_global->__pyx_n_u_auto_flush_rows, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes, __pyx_mstate_global->__pyx_n_u_auto_flush_interval, __pyx_mstate_global->__pyx_n_u_max_datagram_size, __pyx_mstate_global->__pyx_n_u_multicast_ttl, __pyx_mstate_global->__pyx_n_u_qwp_ws_progress, __pyx_mstate_global->__pyx_n_u_error_handler, __pyx_mstate_global->__pyx_n_u_connection_listener, __pyx_mstate_global->__pyx_n_u_connection_event_inbox_capacity, __pyx_mstate_global->__pyx_n_u_protocol_version, __pyx_mstate_global->__pyx_n_u_init_buf_size, __pyx_mstate_global->__pyx_n_u_max_name_len}; __pyx_mstate_global->__pyx_tuple[48] = __Pyx_PyTuple_FromArray(__pyx_temp, 31); if (unlikely(!__pyx_mstate_global->__pyx_tuple[48])) __PYX_ERR(0, 12439, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[48]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[48]);
12440: conf_str,
12441: bind_interface=bind_interface,
12442: username=username,
12443: password=password,
12444: token=token,
12445: oidc_auth=oidc_auth,
12446: bearer_token_provider=bearer_token_provider,
12447: token_x=token_x,
12448: token_y=token_y,
12449: auth_timeout=auth_timeout,
12450: tls_verify=tls_verify,
12451: tls_ca=tls_ca,
12452: tls_roots=tls_roots,
12453: tls_roots_password=tls_roots_password,
12454: max_buf_size=max_buf_size,
12455: retry_timeout=retry_timeout,
12456: retry_max_backoff=retry_max_backoff,
12457: request_min_throughput=request_min_throughput,
12458: request_timeout=request_timeout,
12459: auto_flush=auto_flush,
12460: auto_flush_rows=auto_flush_rows,
12461: auto_flush_bytes=auto_flush_bytes,
12462: auto_flush_interval=auto_flush_interval,
12463: max_datagram_size=max_datagram_size,
12464: multicast_ttl=multicast_ttl,
12465: qwp_ws_progress=qwp_ws_progress,
12466: error_handler=error_handler,
12467: connection_listener=connection_listener,
12468: connection_event_inbox_capacity=connection_event_inbox_capacity,
12469: protocol_version=protocol_version,
12470: init_buf_size=init_buf_size,
+12471: max_name_len=max_name_len)
#if CYTHON_VECTORCALL
12472:
12473:
+12474: cdef inline object _new_buffer_for_sender(self):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Sender__new_buffer_for_sender(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buf = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.Sender._new_buffer_for_sender", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_buf);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+12475: cdef Buffer buf = Buffer.__new__(Buffer)
__pyx_t_1 = ((PyObject *)__pyx_tp_new_7questdb_7_client_Buffer(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12475, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_buf = ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_1); __pyx_t_1 = 0;
+12476: buf._impl = line_sender_buffer_new_for_sender(self._impl)
__pyx_v_buf->_impl = line_sender_buffer_new_for_sender(__pyx_v_self->_impl);
+12477: buf._b = qdb_pystr_buf_new()
__pyx_v_buf->_b = qdb_pystr_buf_new();
+12478: reserve_buffer(buf._impl, self._init_buf_size)
__pyx_t_2 = __pyx_f_7questdb_7_client_reserve_buffer(__pyx_v_buf->_impl, __pyx_v_self->_init_buf_size); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12478, __pyx_L1_error)
+12479: buf._init_buf_size = self._init_buf_size
__pyx_t_3 = __pyx_v_self->_init_buf_size; __pyx_v_buf->_init_buf_size = __pyx_t_3;
+12480: buf._max_name_len = line_sender_get_max_name_len(self._impl)
__pyx_v_buf->_max_name_len = line_sender_get_max_name_len(__pyx_v_self->_impl);
+12481: buf._qwp = (
__pyx_v_buf->_qwp = __pyx_t_4;
+12482: _is_qwp_udp_protocol(self._c_protocol) or
__pyx_t_5 = __pyx_f_7questdb_7_client__is_qwp_udp_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12482, __pyx_L1_error) if (!__pyx_t_5) { } else { __pyx_t_4 = __pyx_t_5; goto __pyx_L3_bool_binop_done; }
+12483: _is_qwp_ws_protocol(self._c_protocol))
__pyx_t_5 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12483, __pyx_L1_error) __pyx_t_4 = __pyx_t_5; __pyx_L3_bool_binop_done:;
+12484: return buf
{
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;
12485:
+12486: def new_buffer(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_13new_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_12new_buffer, "\n Make a new configured buffer.\n\n The buffer is set up with the configured `init_buf_size` and\n `max_name_len`, and matches the sender\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_13new_buffer = {"new_buffer", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_13new_buffer, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_12new_buffer}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_13new_buffer(PyObject *__pyx_v_self, #if CYTHON_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_12new_buffer(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_12new_buffer(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("questdb._client.Sender.new_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_13new_buffer, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_new_buffer, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[226])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 12486, __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_Sender, __pyx_mstate_global->__pyx_n_u_new_buffer, __pyx_t_25) < (0)) __PYX_ERR(0, 12486, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
12487: """
12488: Make a new configured buffer.
12489:
12490: The buffer is set up with the configured `init_buf_size` and
12491: `max_name_len`, and matches the sender's protocol.
12492:
12493: Must be called after :func:`Sender.establish` and before
12494: :func:`Sender.close`; otherwise raises
12495: :class:`QuestDBError` (``InvalidApiCall``).
12496: """
+12497: self._check_not_in_own_callback('new_buffer')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_new_buffer, NULL); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12497, __pyx_L1_error)
+12498: if self._impl == NULL:
__pyx_t_2 = (__pyx_v_self->_impl == NULL);
if (__pyx_t_2) {
/* … */
}
+12499: if self._opts == NULL:
__pyx_t_2 = (__pyx_v_self->_opts == NULL);
if (unlikely(__pyx_t_2)) {
/* … */
}
+12500: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12500, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+12501: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12501, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12501, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_new_buffer_can_t_be_called_Sende}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12500, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 12500, __pyx_L1_error)
12502: 'new_buffer() can\'t be called: Sender is closed.')
+12503: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12503, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
+12504: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12504, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12504, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_new_buffer_can_t_be_called_befor}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12503, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 12503, __pyx_L1_error)
12505: 'new_buffer() can\'t be called before establish().')
+12506: return self._new_buffer_for_sender()
__pyx_t_3 = __pyx_f_7questdb_7_client_6Sender__new_buffer_for_sender(__pyx_v_self); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12506, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
12507:
+12508: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_13init_buf_size_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Sender_13init_buf_size_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_6Sender_13init_buf_size___get__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Sender_13init_buf_size___get__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.Sender.init_buf_size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
12509: def init_buf_size(self) -> int:
12510: """The initial capacity of the sender's internal buffer."""
+12511: return self._init_buf_size
__pyx_t_1 = __Pyx_PyLong_FromSize_t(__pyx_v_self->_init_buf_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12511, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
12512:
+12513: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_12max_name_len_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Sender_12max_name_len_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_6Sender_12max_name_len___get__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Sender_12max_name_len___get__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client.Sender.max_name_len.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
12514: def max_name_len(self) -> int:
12515: """Maximum length of a table or column name.
12516:
12517: Raises :class:`QuestDBError <questdb.QuestDBError>`
12518: (``InvalidApiCall``) when read from any thread while this sender is
12519: inside a native call such as :func:`Sender.flush`.
12520: """
+12521: self._check_not_in_own_callback('max_name_len', allow_idle_callback=True)
__pyx_t_2.__pyx_n = 1;
__pyx_t_2.allow_idle_callback = 1;
__pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_max_name_len, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12521, __pyx_L1_error)
+12522: if self._impl == NULL:
__pyx_t_3 = (__pyx_v_self->_impl == NULL);
if (unlikely(__pyx_t_3)) {
/* … */
}
+12523: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12523, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
+12524: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12524, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12524, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_8, __pyx_mstate_global->__pyx_kp_u_max_name_len_can_t_be_called_Sen}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12523, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 12523, __pyx_L1_error)
12525: 'max_name_len() can\'t be called: Sender is closed.')
+12526: return line_sender_get_max_name_len(self._impl)
__pyx_t_4 = __Pyx_PyLong_FromSize_t(line_sender_get_max_name_len(__pyx_v_self->_impl)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12526, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_4; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_4 = 0; goto __pyx_L0;
12527:
+12528: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_10auto_flush_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Sender_10auto_flush_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_6Sender_10auto_flush___get__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Sender_10auto_flush___get__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.Sender.auto_flush.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
12529: def auto_flush(self) -> bint:
12530: """
12531: Auto-flushing is enabled.
12532:
12533: Consult the `.auto_flush_rows`, `.auto_flush_bytes` and
12534: `.auto_flush_interval` properties for the current active thresholds.
12535:
12536: Over ``ws`` and ``wss`` the byte threshold is on by default, so
12537: auto-flush stays on with ``auto_flush_rows`` and
12538: ``auto_flush_interval`` both off. Pass ``auto_flush=off`` to batch
12539: by hand.
12540: """
+12541: return self._auto_flush_mode.enabled
__pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->_auto_flush_mode.enabled); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12541, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
12542:
+12543: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_15auto_flush_rows_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Sender_15auto_flush_rows_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_6Sender_15auto_flush_rows___get__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Sender_15auto_flush_rows___get__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Sender.auto_flush_rows.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
12544: def auto_flush_rows(self) -> Optional[int]:
12545: """
12546: Row count threshold for the auto-flush logic, or None if disabled.
12547: """
+12548: if not self._auto_flush_mode.enabled:
__pyx_t_1 = (!__pyx_v_self->_auto_flush_mode.enabled);
if (__pyx_t_1) {
/* … */
}
+12549: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+12550: if self._auto_flush_mode.row_count == -1:
__pyx_t_1 = (__pyx_v_self->_auto_flush_mode.row_count == -1L);
if (__pyx_t_1) {
/* … */
}
+12551: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+12552: 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, 12552, __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;
12553:
+12554: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_16auto_flush_bytes_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Sender_16auto_flush_bytes_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_6Sender_16auto_flush_bytes___get__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Sender_16auto_flush_bytes___get__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
size_t __pyx_v_hard_cap;
bool __pyx_v_server_cap_known;
struct line_sender_error *__pyx_v_err;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client.Sender.auto_flush_bytes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
12555: def auto_flush_bytes(self) -> Optional[int]:
12556: """
12557: Byte-count threshold for the auto-flush logic, or None if disabled or
12558: not yet known.
12559:
12560: Over ``ws`` and ``wss`` the threshold is at most 90% of the
12561: connection's frame cap, and by default it is 90% of that cap. The
12562: cap is known once :func:`Sender.establish` has connected, so before
12563: that the default reports ``None``. A server that does not advertise
12564: a cap counts as having QuestDB's default, 2 MiB less 14 bytes,
12565: unless the local limit is lower. An explicit threshold reads as
12566: configured before :func:`Sender.establish` and after
12567: :func:`Sender.close`; the cap lowers it only between the two.
12568:
12569: Raises :class:`QuestDBError <questdb.QuestDBError>`
12570: (``InvalidApiCall``) when read over ``ws`` or ``wss`` from this
12571: sender's own ``error_handler`` or ``connection_listener``, or from
12572: any thread while this sender is inside a native call such as
12573: :func:`Sender.flush`.
12574: """
+12575: cdef size_t hard_cap = 0
__pyx_v_hard_cap = 0;
+12576: cdef cbool server_cap_known = False
__pyx_v_server_cap_known = 0;
+12577: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+12578: if not self._auto_flush_mode.enabled:
__pyx_t_1 = (!__pyx_v_self->_auto_flush_mode.enabled);
if (__pyx_t_1) {
/* … */
}
+12579: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+12580: if self._auto_flush_mode.byte_count == -1:
__pyx_t_1 = (__pyx_v_self->_auto_flush_mode.byte_count == -1L);
if (__pyx_t_1) {
/* … */
}
+12581: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+12582: if not _is_qwp_ws_protocol(self._c_protocol):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12582, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+12583: return self._auto_flush_mode.byte_count
__pyx_t_3 = __Pyx_PyLong_From_int64_t(__pyx_v_self->_auto_flush_mode.byte_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12583, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
+12584: if self._impl == NULL:
__pyx_t_2 = (__pyx_v_self->_impl == NULL);
if (__pyx_t_2) {
/* … */
}
+12585: if self._auto_flush_bytes_dynamic:
if (__pyx_v_self->_auto_flush_bytes_dynamic) {
/* … */
}
+12586: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+12587: 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, 12587, __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;
+12588: self._check_not_in_own_callback('auto_flush_bytes')
__pyx_t_4 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes, NULL); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12588, __pyx_L1_error)
+12589: if not line_sender_qwpws_effective_frame_cap(
__pyx_t_2 = (!line_sender_qwpws_effective_frame_cap(__pyx_v_self->_impl, (&__pyx_v_hard_cap), (&__pyx_v_server_cap_known), (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
12590: self._impl, &hard_cap, &server_cap_known, &err):
+12591: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12591, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 12591, __pyx_L1_error)
+12592: return _qwp_row_byte_limit(
__pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_f_7questdb_7_client__qwp_row_byte_limit((&__pyx_v_self->_auto_flush_mode), __pyx_v_self->_auto_flush_bytes_dynamic, __pyx_f_7questdb_7_client__qwp_row_planning_cap(__pyx_v_hard_cap, __pyx_v_server_cap_known))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12592, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
12593: &self._auto_flush_mode,
12594: self._auto_flush_bytes_dynamic,
12595: _qwp_row_planning_cap(hard_cap, server_cap_known))
12596:
+12597: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_19auto_flush_interval_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Sender_19auto_flush_interval_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_6Sender_19auto_flush_interval___get__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Sender_19auto_flush_interval___get__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_AddTraceback("questdb._client.Sender.auto_flush_interval.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
12598: def auto_flush_interval(self) -> Optional[datetime.timedelta]:
12599: """
12600: Time interval threshold for the auto-flush logic, or None if disabled.
12601: """
+12602: if not self._auto_flush_mode.enabled:
__pyx_t_1 = (!__pyx_v_self->_auto_flush_mode.enabled);
if (__pyx_t_1) {
/* … */
}
+12603: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+12604: if self._auto_flush_mode.interval == -1:
__pyx_t_1 = (__pyx_v_self->_auto_flush_mode.interval == -1L);
if (__pyx_t_1) {
/* … */
}
+12605: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+12606: 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, 12606, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #if CYTHON_VECTORCALL #endif __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[32]; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12606, __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, 12606, __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; #if CYTHON_VECTORCALL #endif __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12606, __pyx_L1_error) __Pyx_GOTREF((PyObject *)__pyx_t_2); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = ((PyObject *)__pyx_t_2); } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
12607:
+12608: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_16protocol_version_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Sender_16protocol_version_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_6Sender_16protocol_version___get__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Sender_16protocol_version___get__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client.Sender.protocol_version.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
12609: def protocol_version(self) -> int:
12610: """
12611: The protocol version used by the sender.
12612:
12613: Protocol version 1 is retained for backwards compatibility with
12614: older QuestDB versions.
12615:
12616: Protocol version 2 introduces binary floating point support and
12617: the array datatype.
12618:
12619: Raises :class:`QuestDBError <questdb.QuestDBError>`
12620: (``InvalidApiCall``) when read from any thread while this sender is
12621: inside a native call such as :func:`Sender.flush`.
12622: """
+12623: self._check_not_in_own_callback('protocol_version', allow_idle_callback=True)
__pyx_t_2.__pyx_n = 1;
__pyx_t_2.allow_idle_callback = 1;
__pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_protocol_version, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12623, __pyx_L1_error)
+12624: if self._impl == NULL:
__pyx_t_3 = (__pyx_v_self->_impl == NULL);
if (unlikely(__pyx_t_3)) {
/* … */
}
+12625: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12625, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
+12626: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12626, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12626, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_8, __pyx_mstate_global->__pyx_kp_u_protocol_version_can_t_be_called}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12625, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 12625, __pyx_L1_error)
12627: 'protocol_version() can\'t be called: Sender is closed.')
+12628: if _is_qwp_udp_protocol(self._c_protocol):
__pyx_t_3 = __pyx_f_7questdb_7_client__is_qwp_udp_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_3 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12628, __pyx_L1_error) if (unlikely(__pyx_t_3)) { /* … */ }
+12629: raise QuestDBError(
__pyx_t_6 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12629, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
+12630: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12630, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12630, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_8))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_8); assert(__pyx_t_6); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_8, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_protocol_version_is_not_applicab}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12629, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 12629, __pyx_L1_error)
12631: 'protocol_version is not applicable for QWP/UDP senders.')
+12632: return <int>line_sender_get_protocol_version(self._impl)
__pyx_t_4 = __Pyx_PyLong_From_int(((int)line_sender_get_protocol_version(__pyx_v_self->_impl))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12632, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_4; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_4 = 0; goto __pyx_L0;
12633:
+12634: def establish(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_15establish(PyObject *__pyx_v_self, #if CYTHON_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_14establish, "\n Prepare the sender for use.\n\n If using ILP/HTTP this will initialize the HTTP connection pool.\n\n If using ILP/TCP this will cause connection to the server and \n block until the connection is established.\n\n If the TCP connection is set up with authentication and/or TLS, this\n method will return only *after* the handshake(s) is/are complete.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_15establish = {"establish", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_15establish, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_14establish}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_15establish(PyObject *__pyx_v_self, #if CYTHON_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_14establish(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_14establish(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) { struct line_sender_error *__pyx_v_err; PyThreadState *__pyx_v_gs; struct line_sender *__pyx_v_failed_impl; int __pyx_v_outer_in_flight; int __pyx_v_warn; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("questdb._client.Sender.establish", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_15establish, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_establish, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[227])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 12634, __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_Sender, __pyx_mstate_global->__pyx_n_u_establish, __pyx_t_25) < (0)) __PYX_ERR(0, 12634, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
12635: """
12636: Prepare the sender for use.
12637:
12638: If using ILP/HTTP this will initialize the HTTP connection pool.
12639:
12640: If using ILP/TCP this will cause connection to the server and
12641: block until the connection is established.
12642:
12643: If the TCP connection is set up with authentication and/or TLS, this
12644: method will return only *after* the handshake(s) is/are complete.
12645: """
+12646: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+12647: cdef PyThreadState * gs = NULL
__pyx_v_gs = NULL;
+12648: cdef line_sender* failed_impl = NULL
__pyx_v_failed_impl = NULL;
+12649: self._check_not_in_own_callback('establish')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_establish, NULL); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12649, __pyx_L1_error)
+12650: if self._opts == NULL:
__pyx_t_2 = (__pyx_v_self->_opts == NULL);
if (unlikely(__pyx_t_2)) {
/* … */
}
+12651: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12651, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+12652: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12652, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12652, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_establish_can_t_be_called_after}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12651, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 12651, __pyx_L1_error)
12653: 'establish() can\'t be called after close().')
12654:
12655: # We disable the GIL when calling `line_sender_build` since for HTTP
12656: # it can make HTTP requests to auto-detect the protocol version.
12657: # Native borrows the options until it returns, and build can pull an
12658: # OIDC token and enter a Python diagnostic callback meanwhile.
+12659: cdef bint outer_in_flight = self._enter_native()
__pyx_v_outer_in_flight = __pyx_f_7questdb_7_client_6Sender__enter_native(__pyx_v_self);
+12660: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+12661: self._impl = line_sender_build(self._opts, &err)
__pyx_v_self->_impl = line_sender_build(__pyx_v_self->_opts, (&__pyx_v_err));
+12662: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+12663: self._exit_native(outer_in_flight)
__pyx_f_7questdb_7_client_6Sender__exit_native(__pyx_v_self, __pyx_v_outer_in_flight);
12664:
+12665: if self._impl == NULL:
__pyx_t_2 = (__pyx_v_self->_impl == NULL);
if (unlikely(__pyx_t_2)) {
/* … */
}
+12666: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12666, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 12666, __pyx_L1_error)
12667:
+12668: if self._buffer is None:
__pyx_t_2 = (((PyObject *)__pyx_v_self->_buffer) == Py_None);
if (__pyx_t_2) {
/* … */
}
+12669: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
goto __pyx_L11_try_end;
__pyx_L6_error:;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
__pyx_L8_except_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
goto __pyx_L1_error;
__pyx_L11_try_end:;
}
+12670: self._buffer = self._new_buffer_for_sender()
__pyx_t_3 = __pyx_f_7questdb_7_client_6Sender__new_buffer_for_sender(__pyx_v_self); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12670, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_3); if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer))))) __PYX_ERR(0, 12670, __pyx_L6_error) __Pyx_GIVEREF(__pyx_t_3); __Pyx_GOTREF((PyObject *)__pyx_v_self->_buffer); __Pyx_DECREF_SET(__pyx_v_self->_buffer, ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_3)); __pyx_t_3 = 0;
+12671: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client.Sender.establish", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_5, &__pyx_t_7) < 0) __PYX_ERR(0, 12671, __pyx_L8_except_error)
__Pyx_XGOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_5);
__Pyx_XGOTREF(__pyx_t_7);
+12672: failed_impl = self._impl
__pyx_t_12 = __pyx_v_self->_impl;
__pyx_v_failed_impl = __pyx_t_12;
+12673: self._impl = NULL
__pyx_v_self->_impl = NULL;
+12674: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+12675: line_sender_close(failed_impl)
line_sender_close(__pyx_v_failed_impl);
+12676: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+12677: raise
__Pyx_GIVEREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_5); __Pyx_XGIVEREF(__pyx_t_7); __Pyx_ErrRestoreWithState(__pyx_t_3, __pyx_t_5, __pyx_t_7); __pyx_t_3 = 0; __pyx_t_5 = 0; __pyx_t_7 = 0; __PYX_ERR(0, 12677, __pyx_L8_except_error) }
12678:
+12679: line_sender_opts_free(self._opts)
line_sender_opts_free(__pyx_v_self->_opts);
+12680: self._opts = NULL
__pyx_v_self->_opts = NULL;
12681:
+12682: if self._dispatch_context is not None:
__pyx_t_2 = (__pyx_v_self->_dispatch_context != Py_None);
if (__pyx_t_2) {
/* … */
}
+12683: self._cb_refs_key = _retain_callback_refs(
__pyx_t_8 = __pyx_f_7questdb_7_client__retain_callback_refs(((PyObject *)__pyx_v_self), __pyx_t_7); if (unlikely(__pyx_t_8 == ((size_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 12683, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_self->_cb_refs_key = __pyx_t_8;
+12684: self, self._dispatch_context)
__pyx_t_7 = __pyx_v_self->_dispatch_context;
__Pyx_INCREF(__pyx_t_7);
12685:
12686: # Request callbacks when rows are complete.
+12687: self._buffer._row_complete_sender = PyWeakref_NewRef(self, None)
__pyx_t_7 = PyWeakref_NewRef(((PyObject *)__pyx_v_self), Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12687, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_GIVEREF(__pyx_t_7); __Pyx_GOTREF(__pyx_v_self->_buffer->_row_complete_sender); __Pyx_DECREF_SET(__pyx_v_self->_buffer->_row_complete_sender, __pyx_t_7); __pyx_t_7 = 0;
+12688: self._last_flush_ms[0] = line_sender_now_micros() // 1000
(__pyx_v_self->_last_flush_ms[0]) = __Pyx_div_int64_t(line_sender_now_micros(), 0x3E8, 1);
12689:
12690: # Track and warn about overly quick reconnections to the server.
+12691: cdef bint warn = False
__pyx_v_warn = 0;
+12692: if WARN_HIGH_RECONNECTS:
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_WARN_HIGH_RECONNECTS); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12692, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 12692, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (__pyx_t_2) { /* … */ }
+12693: self._slot_id = <int32_t> qdb_active_senders_track_established(&warn)
__pyx_v_self->_slot_id = ((int32_t)qdb_active_senders_track_established((&__pyx_v_warn)));
+12694: if warn:
if (__pyx_v_warn) {
/* … */
}
+12695: warnings.warn(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_warnings); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12695, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_warn); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12695, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
#endif
__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[4] = {__pyx_t_5, __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_3 = __pyx_mstate_global->__pyx_tuple[28];
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12695, __pyx_L1_error)
__Pyx_INCREF(__pyx_t_3);
#else
{
PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_stacklevel};
__pyx_t_3 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+3, 1);
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12695, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
#endif
__pyx_t_7 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3);
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12695, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
}
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
12696: "questdb.Sender: "
12697: f"Detected a burst of reconnections. "
12698: "This may indicate an inefficient coding pattern where the sender is "
12699: "frequently created and destroyed. "
12700: "Consider reusing sender instance whenever possible."
12701: "See: https://py-questdb-client.readthedocs.io/en/latest/sender.html#reuse-sender-objects",
+12702: UserWarning,
#if CYTHON_VECTORCALL
12703: stacklevel=1
12704: )
+12705: _oidc_raise_unscheduled_main()
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12705, __pyx_L1_error)
12706:
+12707: def __enter__(self) -> Sender:
/* Python wrapper */ static struct __pyx_obj_7questdb_7_client_Sender *__pyx_pw_7questdb_7_client_6Sender_17__enter__(PyObject *__pyx_v_self, #if CYTHON_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_16__enter__, "Call :func:`Sender.establish` at the start of a ``with`` block."); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_17__enter__ = {"__enter__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_17__enter__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_16__enter__}; static struct __pyx_obj_7questdb_7_client_Sender *__pyx_pw_7questdb_7_client_6Sender_17__enter__(PyObject *__pyx_v_self, #if CYTHON_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_16__enter__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static struct __pyx_obj_7questdb_7_client_Sender *__pyx_pf_7questdb_7_client_6Sender_16__enter__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) { struct __pyx_obj_7questdb_7_client_Sender *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("questdb._client.Sender.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF((PyObject *)__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_25 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 12707, __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_Sender) < (0)) __PYX_ERR(0, 12707, __pyx_L1_error) __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_17__enter__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender___enter, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[228])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 12707, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_18, __pyx_t_25); __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_enter, __pyx_t_18) < (0)) __PYX_ERR(0, 12707, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
12708: """Call :func:`Sender.establish` at the start of a ``with`` block."""
+12709: self.establish()
__pyx_t_2 = ((PyObject *)__pyx_v_self); __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_establish, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12709, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+12710: return self
{
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;
12711:
+12712: def __bytes__(self) -> bytes:
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_19__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_18__bytes__, "\n Inspect the contents of the internal buffer.\n\n The ``bytes`` value returned represents the unsent data.\n\n For QWP/UDP senders this always returns ``b\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_19__bytes__ = {"__bytes__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_19__bytes__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_18__bytes__}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_19__bytes__(PyObject *__pyx_v_self, #if CYTHON_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_18__bytes__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_18__bytes__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client.Sender.__bytes__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 12712, __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_bytes) < (0)) __PYX_ERR(0, 12712, __pyx_L1_error) __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_19__bytes__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender___bytes, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[229])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 12712, __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_18); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_bytes_2, __pyx_t_25) < (0)) __PYX_ERR(0, 12712, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
12713: """
12714: Inspect the contents of the internal buffer.
12715:
12716: The ``bytes`` value returned represents the unsent data.
12717:
12718: For QWP/UDP senders this always returns ``b''`` because encoding
12719: is deferred to flush. Use :func:`Sender.__len__` instead for a
12720: size estimate.
12721:
12722: Read from inside a part-written row this returns the buffer as
12723: it stands, with the last line unterminated; see
12724: :func:`Buffer.__bytes__` for why that is allowed where every
12725: call that acts on the buffer is refused.
12726:
12727: Also see :func:`Sender.__len__`.
12728: """
+12729: if self._buffer is None:
__pyx_t_1 = (((PyObject *)__pyx_v_self->_buffer) == Py_None);
if (__pyx_t_1) {
/* … */
}
+12730: return b''
{
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;
12731: else:
+12732: 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, 12732, __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;
}
12733:
+12734: def __len__(self) -> int:
/* Python wrapper */ static Py_ssize_t __pyx_pw_7questdb_7_client_6Sender_21__len__(PyObject *__pyx_v_self); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_20__len__, "\n Number of bytes of unsent data in the internal buffer.\n\n Equivalent (but cheaper) to ``len(bytes(sender))`` over ILP.\n\n For QWP/UDP senders this returns an estimated size hint, not the\n exact serialized byte count. For QWP/WebSocket senders it is an\n estimate that is never below the size of the frame a flush\n encodes, unless store-and-forward has fallen back to sending full\n symbol dictionaries.\n "); #if CYTHON_UPDATE_DESCRIPTOR_DOC struct wrapperbase __pyx_wrapperbase_7questdb_7_client_6Sender_20__len__; #endif static Py_ssize_t __pyx_pw_7questdb_7_client_6Sender_21__len__(PyObject *__pyx_v_self) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; Py_ssize_t __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_7questdb_7_client_6Sender_20__len__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static Py_ssize_t __pyx_pf_7questdb_7_client_6Sender_20__len__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) { Py_ssize_t __pyx_r; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("questdb._client.Sender.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; }
12735: """
12736: Number of bytes of unsent data in the internal buffer.
12737:
12738: Equivalent (but cheaper) to ``len(bytes(sender))`` over ILP.
12739:
12740: For QWP/UDP senders this returns an estimated size hint, not the
12741: exact serialized byte count. For QWP/WebSocket senders it is an
12742: estimate that is never below the size of the frame a flush
12743: encodes, unless store-and-forward has fallen back to sending full
12744: symbol dictionaries.
12745: """
+12746: if self._buffer is None:
__pyx_t_1 = (((PyObject *)__pyx_v_self->_buffer) == Py_None);
if (__pyx_t_1) {
/* … */
}
+12747: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
12748: else:
+12749: return len(self._buffer)
/*else*/ {
__pyx_t_2 = ((PyObject *)__pyx_v_self->_buffer);
__Pyx_INCREF(__pyx_t_2);
__pyx_t_3 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(0, 12749, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
{
__pyx_r = __pyx_t_3;
}
goto __pyx_L0;
}
12750:
+12751: def transaction(self, table_name: str):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_23transaction(PyObject *__pyx_v_self, #if CYTHON_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_22transaction, "\n Start a :ref:`sender_transaction` block.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_23transaction = {"transaction", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_23transaction, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_22transaction}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_23transaction(PyObject *__pyx_v_self, #if CYTHON_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, 12751, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 12751, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "transaction", 0) < (0)) __PYX_ERR(0, 12751, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("transaction", 1, 1, 1, i); __PYX_ERR(0, 12751, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 12751, __pyx_L3_error) } __pyx_v_table_name = ((PyObject*)values[0]); } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("transaction", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 12751, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Sender.transaction", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 0, "table_name", 2))) __PYX_ERR(0, 12751, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_6Sender_22transaction(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_table_name); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_22transaction(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, PyObject *__pyx_v_table_name) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("questdb._client.Sender.transaction", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_25 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 12751, __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, 12751, __pyx_L1_error) __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_23transaction, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_transaction, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[230])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 12751, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_18, __pyx_t_25); __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_transaction, __pyx_t_18) < (0)) __PYX_ERR(0, 12751, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
12752: """
12753: Start a :ref:`sender_transaction` block.
12754: """
+12755: self._check_not_in_own_callback('transaction')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_transaction, NULL); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12755, __pyx_L1_error)
12756: # The guard that protects a row in progress sits on
12757: # `SenderTransaction.__enter__` and `rollback()`, where the
12758: # transaction acts on the buffer: a transaction made earlier, or
12759: # constructed directly, reaches those without passing through
12760: # here. Refusing here as well names the call the caller made.
+12761: if self._buffer is not None:
__pyx_t_2 = (((PyObject *)__pyx_v_self->_buffer) != Py_None);
if (__pyx_t_2) {
/* … */
}
+12762: self._buffer._check_not_in_row('transaction')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self->_buffer, __pyx_mstate_global->__pyx_n_u_transaction, NULL); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12762, __pyx_L1_error)
+12763: return SenderTransaction(self, table_name)
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[3] = {__pyx_t_4, ((PyObject *)__pyx_v_self), __pyx_v_table_name};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_SenderTransaction, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12763, __pyx_L1_error)
__Pyx_GOTREF((PyObject *)__pyx_t_3);
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = ((PyObject *)__pyx_t_3);
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_3 = 0;
goto __pyx_L0;
12764:
+12765: def row(self,
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_25row(PyObject *__pyx_v_self, #if CYTHON_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_24row, "\n Write a row to the internal buffer.\n\n This may be sent automatically depending on the ``auto_flush`` setting\n in the constructor.\n\n See :func:`Buffer.row <questdb.ingress.Buffer.row>` for supported\n column types, protocol restrictions, server requirements, and\n ``NULL``-sentinel behavior.\n\n Raises :class:`QuestDBError <questdb.QuestDBError>`\n (``InvalidApiCall``) if called while another ``row()`` on this\n sender is still in progress, or a ``dataframe()`` over ``tcp``,\n ``http`` or ``udp``: from a column value whose conversion runs\n Python code, or from a logging handler that writes the ``questdb``\n logger\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``, it also raises ``InvalidApiCall``, without\n adding the row, when called from this sender\047s own ``error_handler``\n or ``connection_listener``. That includes a logging handler that\n writes the ``questdb`` logger\047s records through this sender while no\n ``error_handler`` is set, since server rejections are then logged\n from inside that callback.\n\n Over ``ws`` and ``wss``, auto-flush also publishes a buffer whose size\n estimate reaches the connection\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 value""s a second\n time.\n\n Over ``ws`` and ``wss``, whatever this method raises, the row was not\n added. :class:`QuestDBError <questdb.QuestDBError>`\n (``BatchTooLarge``) means either it does not fit in a frame on its\n own, or the rows buffered before it do not fit even without it,\n which can happen after the frame cap shrinks, for example on\n reconnect; those rows are then discarded, and the error says how\n many. Any other error raised by a publish also clears the rows\n buffered before it, as :func:`Sender.flush` does.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_25row = {"row", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_25row, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_24row}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_25row(PyObject *__pyx_v_self, #if CYTHON_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, 12765, __pyx_L3_error) if (likely(__pyx_kwds_len > 0)) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 12765, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "row", 0) < (0)) __PYX_ERR(0, 12765, __pyx_L3_error) /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_24row(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, PyObject *__pyx_v_table_name, PyObject *__pyx_v_symbols, PyObject *__pyx_v_columns, PyObject *__pyx_v_at) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("questdb._client.Sender.row", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 12765, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); /* … */ __pyx_t_25 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 12765, __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, 12765, __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, 12765, __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, 12765, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_TimestampNanos_datetime_da) < (0)) __PYX_ERR(0, 12765, __pyx_L1_error) __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_25row, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_row, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[231])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 12765, __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_18); __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_20, __pyx_t_25); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_row_2, __pyx_t_20) < (0)) __PYX_ERR(0, 12765, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
12766: table_name: str,
12767: *,
+12768: symbols: Optional[Dict[str, Optional[str]]]=None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_symbols, Py_None) < (0)) __PYX_ERR(0, 12765, __pyx_L1_error)
12769: columns: Optional[Dict[
12770: str,
12771: Union[None, bool, int, float, str, TimestampMicros,
12772: TimestampNanos, datetime.datetime, numpy.ndarray,
12773: Decimal, uuid.UUID, ipaddress.IPv4Address, bytes,
12774: bytearray, memoryview, Char, DateMillis, Long256,
+12775: Geohash]]]=None,
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("row", 1, 1, 1, i); __PYX_ERR(0, 12765, __pyx_L3_error) } } for (Py_ssize_t i = 1; i < 2; i++) { if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("row", *(__pyx_pyargnames[i - 0])); __PYX_ERR(0, 12765, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { __Pyx_RaiseKeywordRequired("row", __pyx_mstate_global->__pyx_n_u_at); __PYX_ERR(0, 12765, __pyx_L3_error) } __pyx_v_table_name = ((PyObject*)values[0]); __pyx_v_at = values[1]; __pyx_v_symbols = ((PyObject*)values[2]); __pyx_v_columns = ((PyObject*)values[3]); } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("row", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 12765, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Sender.row", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 0, "table_name", 2))) __PYX_ERR(0, 12766, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_symbols), (&PyDict_Type), 1, "symbols", 2))) __PYX_ERR(0, 12768, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_columns), (&PyDict_Type), 1, "columns", 2))) __PYX_ERR(0, 12769, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_6Sender_24row(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_table_name, __pyx_v_symbols, __pyx_v_columns, __pyx_v_at); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_columns, Py_None) < (0)) __PYX_ERR(0, 12765, __pyx_L1_error)
12776: at: Union[TimestampNanos, datetime.datetime, ServerTimestampType]):
12777: """
12778: Write a row to the internal buffer.
12779:
12780: This may be sent automatically depending on the ``auto_flush`` setting
12781: in the constructor.
12782:
12783: See :func:`Buffer.row <questdb.ingress.Buffer.row>` for supported
12784: column types, protocol restrictions, server requirements, and
12785: ``NULL``-sentinel behavior.
12786:
12787: Raises :class:`QuestDBError <questdb.QuestDBError>`
12788: (``InvalidApiCall``) if called while another ``row()`` on this
12789: sender is still in progress, or a ``dataframe()`` over ``tcp``,
12790: ``http`` or ``udp``: from a column value whose conversion runs
12791: Python code, or from a logging handler that writes the ``questdb``
12792: logger's records through this sender. Such a ``dataframe()``
12793: writes the frame into this sender's buffer, and a row written while
12794: it runs could not be flushed until it returned. Over ``ws`` and
12795: ``wss`` the frame goes out on a connection of its own, so a row
12796: written from inside it is accepted and flushed as usual.
12797:
12798: Over ``ws`` and ``wss``, it also raises ``InvalidApiCall``, without
12799: adding the row, when called from this sender's own ``error_handler``
12800: or ``connection_listener``. That includes a logging handler that
12801: writes the ``questdb`` logger's records through this sender while no
12802: ``error_handler`` is set, since server rejections are then logged
12803: from inside that callback.
12804:
12805: Over ``ws`` and ``wss``, auto-flush also publishes a buffer whose size
12806: estimate reaches the connection's frame cap, even with
12807: ``auto_flush_bytes=off``. Every published frame fits the frame cap:
12808: when the whole buffer does not, or its size estimate is past the
12809: cap, the rows buffered before this one go out as a frame of their
12810: own and this row starts the next batch, so one call publishes at
12811: most two frames. Re-adding the row converts its values a second
12812: time.
12813:
12814: Over ``ws`` and ``wss``, whatever this method raises, the row was not
12815: added. :class:`QuestDBError <questdb.QuestDBError>`
12816: (``BatchTooLarge``) means either it does not fit in a frame on its
12817: own, or the rows buffered before it do not fit even without it,
12818: which can happen after the frame cap shrinks, for example on
12819: reconnect; those rows are then discarded, and the error says how
12820: many. Any other error raised by a publish also clears the rows
12821: buffered before it, as :func:`Sender.flush` does.
12822: """
+12823: if self._in_txn:
if (unlikely(__pyx_v_self->_in_txn)) {
/* … */
}
+12824: raise QuestDBError(
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12824, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
+12825: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12825, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12825, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Cannot_append_rows_explicitly_in}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12824, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 12824, __pyx_L1_error)
12826: 'Cannot append rows explicitly inside a transaction')
+12827: if at is None:
__pyx_t_7 = (__pyx_v_at == Py_None);
if (unlikely(__pyx_t_7)) {
/* … */
}
+12828: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12828, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+12829: QuestDBErrorCode.InvalidTimestamp,
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12829, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12829, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_4, __pyx_mstate_global->__pyx_kp_u_at_must_be_of_type_TimestampNan}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12828, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 12828, __pyx_L1_error)
12830: "`at` must be of type TimestampNanos, datetime, or ServerTimestamp"
12831: )
+12832: if self._buffer is None:
__pyx_t_7 = (((PyObject *)__pyx_v_self->_buffer) == Py_None);
if (unlikely(__pyx_t_7)) {
/* … */
}
+12833: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12833, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+12834: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12834, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12834, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_2, __pyx_mstate_global->__pyx_kp_u_row_can_t_be_called_Sender_is_cl}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12833, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 12833, __pyx_L1_error)
12835: "row() can\'t be called: Sender is closed."
12836: )
12837: # Refused before the row is added. Over ws/wss, auto-flush also
12838: # reads the frame cap from the native sender on every row. Asked
12839: # only when the answer can be a refusal: this runs once per row.
+12840: if self._native_in_flight or _DISPATCHES_IN_PROGRESS != 0:
if (!__pyx_v_self->_native_in_flight) {
} else {
__pyx_t_7 = __pyx_v_self->_native_in_flight;
goto __pyx_L7_bool_binop_done;
}
__pyx_t_8 = (__pyx_v_7questdb_7_client__DISPATCHES_IN_PROGRESS != 0);
__pyx_t_7 = __pyx_t_8;
__pyx_L7_bool_binop_done:;
if (__pyx_t_7) {
/* … */
}
+12841: self._check_not_in_own_callback('row')
__pyx_t_9 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_row_2, NULL); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12841, __pyx_L1_error)
12842: # A row-serializing `dataframe()` holds this buffer from the
12843: # moment it starts and runs caller Python before its first row:
12844: # the `questdb` logger, an object column's sniff. A row written
12845: # there has an auto-flush that cannot run until that call
12846: # returns, so the row is refused before anything is written.
+12847: self._buffer._check_not_in_row(
__pyx_t_10.__pyx_n = 1;
__pyx_t_10.hint = __pyx_mstate_global->__pyx_kp_u_A_logging_handler_that_writes_th;
__pyx_t_9 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self->_buffer, __pyx_mstate_global->__pyx_n_u_row_2, &__pyx_t_10); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12847, __pyx_L1_error)
12848: 'row',
12849: "A logging handler that writes the `questdb` logger's records "
12850: "through this same sender arrives here too; give it a Sender "
12851: "of its own.")
+12852: if _is_qwp_ws_protocol(self._c_protocol):
__pyx_t_7 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_7 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12852, __pyx_L1_error) if (__pyx_t_7) { /* … */ goto __pyx_L9; }
+12853: _qwp_row_append(
__pyx_t_9 = __pyx_f_7questdb_7_client__qwp_row_append(__pyx_v_self, ((struct __pyx_obj_7questdb_7_client_PooledSender *)Py_None), ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_1), __pyx_v_table_name, ((PyObject*)__pyx_v_symbols), __pyx_v_columns, __pyx_v_at); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12853, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+12854: self, None, self._buffer, table_name, symbols, columns, at)
__pyx_t_1 = ((PyObject *)__pyx_v_self->_buffer);
__Pyx_INCREF(__pyx_t_1);
12855: else:
+12856: self._buffer.row(
/*else*/ {
__pyx_t_4 = ((PyObject *)__pyx_v_self->_buffer);
__Pyx_INCREF(__pyx_t_4);
/* … */
#endif
__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[49];
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12856, __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, 12856, __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;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12856, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
}
__pyx_L9:;
/* … */
{
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[49] = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_mstate_global->__pyx_tuple[49])) __PYX_ERR(0, 12856, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[49]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[49]);
+12857: table_name, symbols=symbols, columns=columns, at=at)
#if CYTHON_VECTORCALL
+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 dataframe(
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_27dataframe(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_26dataframe, "\n Write a Pandas DataFrame to QuestDB.\n\n Over ILP/HTTP and ILP/TCP the frame is serialized into the internal\n row buffer; over QWP/UDP into fire-and-forget datagrams, with the\n same delivery caveats as ``row()``. Over QWP/WebSocket the frame is\n bulk-loaded through a poolless direct columnar connection opened from\n this sender\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_27dataframe = {"dataframe", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_27dataframe, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_26dataframe}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_27dataframe(PyObject *__pyx_v_self, #if CYTHON_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, 12860, __pyx_L3_error) if (likely(__pyx_kwds_len > 0)) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 12860, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "dataframe", 0) < (0)) __PYX_ERR(0, 12860, __pyx_L3_error) /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_26dataframe(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, PyObject *__pyx_v_df, PyObject *__pyx_v_table_name, PyObject *__pyx_v_table_name_col, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at, PyObject *__pyx_v_max_rows_per_batch, PyObject *__pyx_v_schema_overrides) { struct __pyx_t_7questdb_7_client_auto_flush_t __pyx_v_af; struct __pyx_t_7questdb_7_client_direct_conn_source_t __pyx_v_src; struct qdb_pystr_buf *__pyx_v_ws_b; struct __pyx_t_7questdb_7_client_dataframe_plan_t __pyx_v_ws_plan; struct line_sender_opts *__pyx_v_ws_opts; CYTHON_UNUSED PyObject *__pyx_v_ws_dispatch_context = 0; CYTHON_UNUSED PyObject *__pyx_v_ws_bearer_holder = 0; PyThreadState *__pyx_v_gs; int __pyx_v_outer_in_flight; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("questdb._client.Sender.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_ws_dispatch_context); __Pyx_XDECREF(__pyx_v_ws_bearer_holder); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_20 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 12860, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); /* … */ __pyx_t_25 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 12860, __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, 12860, __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, 12860, __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, 12860, __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, 12860, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_max_rows_per_batch, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_schema_overrides_2, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_object) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error) __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_27dataframe, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_dataframe, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[232])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 12860, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_18, __pyx_t_20); __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_18, __pyx_t_25); __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_dataframe, __pyx_t_18) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
12861: self,
12862: df, # : pd.DataFrame
12863: *,
+12864: table_name: Optional[str] = None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_table_name, Py_None) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error)
+12865: table_name_col: Union[None, int, str] = None,
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_n_u_auto)); if (!values[5]) values[5] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k__40); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_table_name_col, Py_None) < (0)) __PYX_ERR(0, 12860, __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, 12860, __pyx_L1_error)
12866: symbols: Union[str, bool, List[int], List[str]] = 'auto',
12867: at: Union[ServerTimestampType, int, str, TimestampNanos, datetime.datetime],
+12868: max_rows_per_batch: int = DEFAULT_MAX_CHUNK_ROWS,
__Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_DEFAULT_MAX_CHUNK_ROWS); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 12868, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); if (__Pyx_PyInt_FromNumber(&__pyx_t_20, NULL, 1) < (0)) __PYX_ERR(0, 12868, __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_25, __pyx_mstate_global->__pyx_n_u_DEFAULT_MAX_CHUNK_ROWS); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 12868, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); if (__Pyx_PyInt_FromNumber(&__pyx_t_25, NULL, 1) < (0)) __PYX_ERR(0, 12868, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_max_rows_per_batch, __pyx_t_25) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
+12869: schema_overrides: Optional[Dict[str, object]] = None):
if (!values[6]) values[6] = __Pyx_NewRef(((PyObject*)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, i); __PYX_ERR(0, 12860, __pyx_L3_error) } } for (Py_ssize_t i = 1; i < 2; i++) { if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("dataframe", *(__pyx_pyargnames[i - 0])); __PYX_ERR(0, 12860, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { __Pyx_RaiseKeywordRequired("dataframe", __pyx_mstate_global->__pyx_n_u_at); __PYX_ERR(0, 12860, __pyx_L3_error) } __pyx_v_df = values[0]; __pyx_v_at = values[1]; __pyx_v_table_name = ((PyObject*)values[2]); __pyx_v_table_name_col = values[3]; __pyx_v_symbols = values[4]; if (__Pyx_PyInt_FromNumber(&values[5], "max_rows_per_batch", 0) < (0)) __PYX_ERR(0, 12868, __pyx_L3_error) __pyx_v_max_rows_per_batch = ((PyObject*)values[5]); __pyx_v_schema_overrides = ((PyObject*)values[6]); } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 12860, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Sender.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 1, "table_name", 2))) __PYX_ERR(0, 12864, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_max_rows_per_batch), (&PyLong_Type), 0, "max_rows_per_batch", 2))) __PYX_ERR(0, 12868, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema_overrides), (&PyDict_Type), 1, "schema_overrides", 2))) __PYX_ERR(0, 12869, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_6Sender_26dataframe(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, __pyx_v_max_rows_per_batch, __pyx_v_schema_overrides); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_schema_overrides_2, Py_None) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error)
12870: """
12871: Write a Pandas DataFrame to QuestDB.
12872:
12873: Over ILP/HTTP and ILP/TCP the frame is serialized into the internal
12874: row buffer; over QWP/UDP into fire-and-forget datagrams, with the
12875: same delivery caveats as ``row()``. Over QWP/WebSocket the frame is
12876: bulk-loaded through a poolless direct columnar connection opened from
12877: this sender's configuration for the call (the same direct path as
12878: :meth:`QuestDB.dataframe`, carrying the sender's auth/TLS regardless
12879: of how it was constructed); ``max_rows_per_batch`` applies only on
12880: that path, and passing ``schema_overrides`` on any other protocol
12881: raises. The direct load has no
12882: ordering relationship with rows buffered via :meth:`row` and does not
12883: flush them.
12884:
12885: ``table_name_col`` follows the same split. The row-serializing
12886: protocols accept it, because they can change table between rows.
12887: QWP/WebSocket writes one table per call and rejects it with
12888: :class:`UnsupportedDataFrameShapeError
12889: <questdb.UnsupportedDataFrameShapeError>`; split the frame and make
12890: one call per table, or send those rows with :meth:`row`.
12891:
12892: Example:
12893:
12894: .. code-block:: python
12895:
12896: import pandas as pd
12897: import questdb as qi
12898:
12899: df = pd.DataFrame({
12900: 'car': pd.Categorical(['Nic 42', 'Eddi', 'Nic 42', 'Eddi']),
12901: 'position': [1, 2, 1, 2],
12902: 'speed': [89.3, 98.2, 3, 4],
12903: 'lat_gforce': [0.1, -0.2, -0.6, 0.4],
12904: 'accelleration': [0.1, -0.2, 0.6, 4.4],
12905: 'tyre_pressure': [2.6, 2.5, 2.6, 2.5],
12906: 'ts': [
12907: pd.Timestamp('2022-08-09 13:56:00'),
12908: pd.Timestamp('2022-08-09 13:56:01'),
12909: pd.Timestamp('2022-08-09 13:56:02'),
12910: pd.Timestamp('2022-08-09 13:56:03')]})
12911:
12912: with qi.Sender.from_env() as sender:
12913: sender.dataframe(df, table_name='race_metrics', at='ts')
12914:
12915: Over QWP/WebSocket, supported column types and arguments mirror
12916: :meth:`QuestDB.dataframe <questdb.QuestDB.dataframe>`, including
12917: UUID, IPV4, BINARY, GEOHASH, LONG256, CHAR, DATE,
12918: ``schema_overrides`` and round-trip claims in
12919: ``df.attrs['questdb']``. Over ILP and QWP/UDP, see
12920: :func:`Buffer.dataframe <questdb.ingress.Buffer.dataframe>` for the
12921: row-serializing mappings; ``max_rows_per_batch`` and
12922: ``schema_overrides`` do not apply on those protocols.
12923:
12924: Additionally, this method also supports auto-flushing the buffer
12925: as specified in the ``Sender``'s ``auto_flush`` constructor argument.
12926: Auto-flushing is implemented incrementally, meanting that when
12927: calling ``sender.dataframe(df)`` with a large ``df``, the sender may
12928: have sent some of the rows to the server already whist the rest of the
12929: rows are going to be sent at the next auto-flush or next explicit call
12930: to :func:`Sender.flush`.
12931:
12932: In case of data errors with auto-flushing enabled, some of the rows
12933: may have been transmitted to the server already.
12934: """
+12935: cdef auto_flush_t af = auto_flush_blank()
__pyx_v_af = __pyx_f_7questdb_7_client_auto_flush_blank();
12936: cdef direct_conn_source_t src
+12937: cdef qdb_pystr_buf* ws_b = NULL
__pyx_v_ws_b = NULL;
12938: cdef dataframe_plan_t ws_plan
+12939: cdef line_sender_opts* ws_opts = NULL
__pyx_v_ws_opts = NULL;
+12940: cdef object ws_dispatch_context = None
__Pyx_INCREF(Py_None);
__pyx_v_ws_dispatch_context = Py_None;
+12941: cdef object ws_bearer_holder = None
__Pyx_INCREF(Py_None);
__pyx_v_ws_bearer_holder = Py_None;
+12942: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+12943: self._check_not_in_own_callback('dataframe')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_dataframe, NULL); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12943, __pyx_L1_error)
12944: # The QWP/WebSocket branch below goes straight to its own
12945: # connection and never reaches `_dataframe`, where the same
12946: # check stands for every other route. Without it here, a frame
12947: # re-entered from a half-written row publishes ahead of the row
12948: # it interrupted and the order of the two silently inverts.
+12949: if self._buffer is not None:
__pyx_t_2 = (((PyObject *)__pyx_v_self->_buffer) != Py_None);
if (__pyx_t_2) {
/* … */
}
+12950: self._buffer._check_not_in_row('dataframe')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self->_buffer, __pyx_mstate_global->__pyx_n_u_dataframe, NULL); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12950, __pyx_L1_error)
+12951: if _is_qwp_ws_protocol(self._c_protocol):
__pyx_t_2 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12951, __pyx_L1_error) if (__pyx_t_2) { /* … */ }
+12952: if self._qwp_ws_opts == NULL:
__pyx_t_2 = (__pyx_v_self->_qwp_ws_opts == NULL);
if (unlikely(__pyx_t_2)) {
/* … */
}
+12953: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12953, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+12954: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12954, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12954, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_dataframe_can_t_be_called_Sender}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12953, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 12953, __pyx_L1_error)
12955: "dataframe() can't be called: Sender is closed.")
12956: # The cloned opts below contain a borrowed pointer to this
12957: # context, and the native token provider, which reaches its Python
12958: # target through the sender's bearer-token holder. Caller Python
12959: # run while planning may close the Sender, which releases both, so
12960: # keep them rooted in this frame until the direct connection and
12961: # its dispatchers have been torn down.
+12962: ws_dispatch_context = self._dispatch_context
__pyx_t_3 = __pyx_v_self->_dispatch_context;
__Pyx_INCREF(__pyx_t_3);
__Pyx_DECREF_SET(__pyx_v_ws_dispatch_context, __pyx_t_3);
__pyx_t_3 = 0;
+12963: ws_bearer_holder = _sender_bearer_holder(self)
__pyx_t_3 = __pyx_f_7questdb_7_client__sender_bearer_holder(__pyx_v_self); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12963, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF_SET(__pyx_v_ws_bearer_holder, __pyx_t_3); __pyx_t_3 = 0;
+12964: src.db = NULL
__pyx_v_src.db = NULL;
12965: # The call owns its options for its whole length. The plan
12966: # build below runs caller Python -- reading `attrs`,
12967: # sniffing object cells, pulling an Arrow stream -- and any
12968: # of that can call `close()`, which frees the sender's own
12969: # options struct while `_direct_conn_open` has still to
12970: # read it. Owning a clone is what makes that harmless,
12971: # rather than a guard that has to name every route a close
12972: # can arrive through, and it leaves the row buffer's own
12973: # bookkeeping to mean only what it says.
+12974: ws_opts = line_sender_opts_clone(self._qwp_ws_opts)
__pyx_v_ws_opts = line_sender_opts_clone(__pyx_v_self->_qwp_ws_opts);
+12975: if ws_opts == NULL:
__pyx_t_2 = (__pyx_v_ws_opts == NULL);
if (unlikely(__pyx_t_2)) {
/* … */
}
+12976: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 12976, __pyx_L1_error)
+12977: src.opts = ws_opts
__pyx_v_src.opts = __pyx_v_ws_opts;
+12978: ws_b = qdb_pystr_buf_new()
__pyx_v_ws_b = qdb_pystr_buf_new();
+12979: ws_plan = dataframe_plan_blank()
__pyx_v_ws_plan = __pyx_f_7questdb_7_client_dataframe_plan_blank();
+12980: try:
/*try:*/ {
+12981: _direct_dataframe_run(
__pyx_t_1 = __pyx_f_7questdb_7_client__direct_dataframe_run((&__pyx_v_src), 0.0, __pyx_v_ws_b, (&__pyx_v_ws_plan), __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, __pyx_t_8, __pyx_v_schema_overrides, __pyx_t_3); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12981, __pyx_L8_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
12982: &src,
12983: 0.0,
12984: ws_b,
12985: &ws_plan,
12986: df,
12987: table_name,
12988: table_name_col,
12989: symbols,
12990: at,
+12991: max_rows_per_batch,
__pyx_t_8 = __Pyx_PyLong_As_size_t(__pyx_v_max_rows_per_batch); if (unlikely((__pyx_t_8 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 12991, __pyx_L8_error)
12992: schema_overrides,
+12993: self._oidc_auth)
__pyx_t_3 = __pyx_v_self->_oidc_auth;
__Pyx_INCREF(__pyx_t_3);
+12994: return self
{
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;
}
12995: finally:
+12996: qdb_pystr_buf_free(ws_b)
/*finally:*/ {
__pyx_L8_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
if ( unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__pyx_t_9 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_11 = __pyx_filename;
{
qdb_pystr_buf_free(__pyx_v_ws_b);
/* … */
qdb_pystr_buf_free(__pyx_v_ws_b);
+12997: if ws_opts != NULL:
__pyx_t_2 = (__pyx_v_ws_opts != NULL);
if (__pyx_t_2) {
/* … */
}
/* … */
__pyx_t_2 = (__pyx_v_ws_opts != NULL);
if (__pyx_t_2) {
/* … */
}
12998: # The clone shares the sender's callback dispatcher
12999: # threads. After a `close()` during this call it is
13000: # their last owner, and freeing it joins them; a
13001: # callback still running needs the GIL to finish, so
13002: # the free runs without it, as in `Sender._close()`.
+13003: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
/* … */
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+13004: line_sender_opts_free(ws_opts)
line_sender_opts_free(__pyx_v_ws_opts);
/* … */
line_sender_opts_free(__pyx_v_ws_opts);
+13005: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
/* … */
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+13006: _oidc_raise_unscheduled_main()
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13006, __pyx_L11_error) } __Pyx_XGIVEREF(__pyx_t_15); __Pyx_XGIVEREF(__pyx_t_16); __Pyx_XGIVEREF(__pyx_t_17); __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17); __Pyx_XGIVEREF(__pyx_t_12); __Pyx_XGIVEREF(__pyx_t_13); __Pyx_XGIVEREF(__pyx_t_14); __Pyx_ErrRestore(__pyx_t_12, __pyx_t_13, __pyx_t_14); __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_11; goto __pyx_L1_error; __pyx_L11_error:; __Pyx_XGIVEREF(__pyx_t_15); __Pyx_XGIVEREF(__pyx_t_16); __Pyx_XGIVEREF(__pyx_t_17); __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17); __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; goto __pyx_L1_error; } __pyx_L7_return: { __pyx_t_17 = __pyx_r; __pyx_r = 0; /* … */ __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13006, __pyx_L1_error) __pyx_r = __pyx_t_17; __pyx_t_17 = 0; goto __pyx_L0; } }
+13007: if schema_overrides is not None:
__pyx_t_2 = (__pyx_v_schema_overrides != ((PyObject*)Py_None));
if (unlikely(__pyx_t_2)) {
/* … */
}
+13008: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13008, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
+13009: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13009, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13009, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_schema_overrides_is_applied_when}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13008, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 13008, __pyx_L1_error)
13010: 'schema_overrides is applied when a frame is written a '
13011: 'column at a time, which is Sender.dataframe() over '
13012: 'ws:: / wss:: and QuestDB.dataframe(). This sender '
13013: 'writes a row at a time. Drop the argument, or connect '
13014: 'over ws:: / wss::.')
+13015: if self._in_txn:
if (unlikely(__pyx_v_self->_in_txn)) {
/* … */
}
+13016: raise QuestDBError(
__pyx_t_7 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13016, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
+13017: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13017, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13017, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_4, __pyx_mstate_global->__pyx_kp_u_Cannot_append_rows_explicitly_in}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13016, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 13016, __pyx_L1_error)
13018: 'Cannot append rows explicitly inside a transaction')
+13019: if at is None:
__pyx_t_2 = (__pyx_v_at == Py_None);
if (unlikely(__pyx_t_2)) {
/* … */
}
+13020: raise QuestDBError(
__pyx_t_6 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13020, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+13021: QuestDBErrorCode.InvalidTimestamp,
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13021, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13021, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_6); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_5, __pyx_mstate_global->__pyx_kp_u_at_must_be_of_type_TimestampNan}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13020, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 13020, __pyx_L1_error)
13022: "`at` must be of type TimestampNanos, datetime, or ServerTimestamp"
13023: )
+13024: if self._auto_flush_mode.enabled:
if (__pyx_v_self->_auto_flush_mode.enabled) {
/* … */
}
13025: # The field, not its contents: see `auto_flush_t`. `self` is
13026: # this call's receiver and outlives the run, so the address
13027: # stays good even when a mid-frame `close()` empties it.
+13028: af.sender_slot = &self._impl
__pyx_v_af.sender_slot = (&__pyx_v_self->_impl);
+13029: af.mode = self._auto_flush_mode
__pyx_t_18 = __pyx_v_self->_auto_flush_mode;
__pyx_v_af.mode = __pyx_t_18;
+13030: af.last_flush_ms = self._last_flush_ms
__pyx_t_19 = __pyx_v_self->_last_flush_ms;
__pyx_v_af.last_flush_ms = __pyx_t_19;
13031:
+13032: if self._buffer is None:
__pyx_t_2 = (((PyObject *)__pyx_v_self->_buffer) == Py_None);
if (unlikely(__pyx_t_2)) {
/* … */
}
+13033: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13033, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+13034: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13034, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13034, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_dataframe_can_t_be_called_Sender}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13033, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 13033, __pyx_L1_error)
13035: "dataframe() can\'t be called: Sender is closed."
13036: )
+13037: cdef bint outer_in_flight = self._enter_native()
__pyx_v_outer_in_flight = __pyx_f_7questdb_7_client_6Sender__enter_native(__pyx_v_self);
+13038: self._buffer._begin_frame_borrow()
__pyx_f_7questdb_7_client_6Buffer__begin_frame_borrow(__pyx_v_self->_buffer);
+13039: try:
/*try:*/ {
+13040: _dataframe(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_3), __pyx_v_af, __pyx_v_self->_buffer->_impl, __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13040, __pyx_L20_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; }
+13041: self._buffer,
__pyx_t_3 = ((PyObject *)__pyx_v_self->_buffer);
__Pyx_INCREF(__pyx_t_3);
13042: af,
13043: self._buffer._impl,
13044: df,
13045: table_name,
13046: table_name_col,
13047: symbols,
13048: at)
13049: finally:
+13050: self._buffer._end_frame_borrow()
/*finally:*/ {
/*normal exit:*/{
__pyx_f_7questdb_7_client_6Buffer__end_frame_borrow(__pyx_v_self->_buffer);
/* … */
__pyx_f_7questdb_7_client_6Buffer__end_frame_borrow(__pyx_v_self->_buffer);
+13051: self._exit_native(outer_in_flight)
__pyx_f_7questdb_7_client_6Sender__exit_native(__pyx_v_self, __pyx_v_outer_in_flight);
/* … */
__pyx_f_7questdb_7_client_6Sender__exit_native(__pyx_v_self, __pyx_v_outer_in_flight);
+13052: _oidc_raise_unscheduled_main()
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13052, __pyx_L1_error) goto __pyx_L21; } __pyx_L20_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_ExceptionSwap(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12); if ( unlikely(__Pyx_GetException(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15) < 0)) __Pyx_ErrFetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15); __Pyx_XGOTREF(__pyx_t_17); __Pyx_XGOTREF(__pyx_t_16); __Pyx_XGOTREF(__pyx_t_15); __Pyx_XGOTREF(__pyx_t_14); __Pyx_XGOTREF(__pyx_t_13); __Pyx_XGOTREF(__pyx_t_12); __pyx_t_10 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_11 = __pyx_filename; { /* … */ __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13052, __pyx_L23_error) } __Pyx_XGIVEREF(__pyx_t_14); __Pyx_XGIVEREF(__pyx_t_13); __Pyx_XGIVEREF(__pyx_t_12); __Pyx_ExceptionReset(__pyx_t_14, __pyx_t_13, __pyx_t_12); __Pyx_XGIVEREF(__pyx_t_17); __Pyx_XGIVEREF(__pyx_t_16); __Pyx_XGIVEREF(__pyx_t_15); __Pyx_ErrRestore(__pyx_t_17, __pyx_t_16, __pyx_t_15); __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_11; goto __pyx_L1_error; __pyx_L23_error:; __Pyx_XGIVEREF(__pyx_t_14); __Pyx_XGIVEREF(__pyx_t_13); __Pyx_XGIVEREF(__pyx_t_12); __Pyx_ExceptionReset(__pyx_t_14, __pyx_t_13, __pyx_t_12); __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0; goto __pyx_L1_error; } __pyx_L21:; }
+13053: return self
{
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;
13054:
+13055: cpdef flush(
static PyObject *__pyx_pw_7questdb_7_client_6Sender_29flush(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 CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
#endif
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_flush); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13055, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7questdb_7_client_6Sender_29flush)) {
__pyx_t_3 = NULL;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_4 = __pyx_t_1;
__pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_v_clear); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13055, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_transactional); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13055, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[4] = {__pyx_t_3, ((PyObject *)__pyx_v_buffer), __pyx_t_5, __pyx_t_6};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (4-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13055, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
{
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_XDECREF((PyObject *)__pyx_v_active_buf);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_29flush(PyObject *__pyx_v_self,
#if CYTHON_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, "\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_29flush = {"flush", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_29flush, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_28flush};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_29flush(PyObject *__pyx_v_self,
#if CYTHON_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, 13055, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 13055, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 13055, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13055, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "flush", 0) < (0)) __PYX_ERR(0, 13055, __pyx_L3_error)
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = NULL;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
goto __pyx_L7_cleaned_up;
__pyx_L0:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__pyx_L7_cleaned_up:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Sender_28flush(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer, int __pyx_v_clear, int __pyx_v_transactional) {
PyObject *__pyx_r = NULL;
__pyx_t_2.__pyx_n = 3;
__pyx_t_2.buffer = __pyx_v_buffer;
__pyx_t_2.clear = __pyx_v_clear;
__pyx_t_2.transactional = __pyx_v_transactional;
__pyx_t_1 = __pyx_vtabptr_7questdb_7_client_Sender->flush(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13055, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
{
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_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_29flush, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_flush, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[233])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 13055, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
#endif
__Pyx_CyFunction_SetDefaultsTuple(__pyx_t_18, __pyx_mstate_global->__pyx_tuple[95]);
if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_flush, __pyx_t_18) < (0)) __PYX_ERR(0, 13055, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
/* … */
{
PyObject* __pyx_temp[3] = {Py_None, Py_True, Py_False};
__pyx_mstate_global->__pyx_tuple[95] = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_mstate_global->__pyx_tuple[95])) __PYX_ERR(0, 13055, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[95]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[95]);
/* … */
struct __pyx_opt_args_7questdb_7_client_6Sender_flush {
int __pyx_n;
struct __pyx_obj_7questdb_7_client_Buffer *buffer;
int clear;
int transactional;
};
13056: self,
+13057: Buffer buffer=None,
struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None);
/* … */
if (!values[0]) values[0] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None));
} else {
switch (__pyx_nargs) {
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 13055, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 13055, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13055, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
if (!values[0]) values[0] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None));
}
__pyx_v_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)values[0]);
if (values[1]) {
__pyx_v_clear = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_clear == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13058, __pyx_L3_error)
} else {
+13058: bint clear=True,
int __pyx_v_clear = ((int)1);
/* … */
__pyx_v_clear = ((int)1);
}
if (values[2]) {
__pyx_v_transactional = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_transactional == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13059, __pyx_L3_error)
} else {
+13059: bint transactional=False):
int __pyx_v_transactional = ((int)0);
struct line_sender_buffer *__pyx_v_c_buf;
struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_active_buf = 0;
int __pyx_v_exclusive;
PyObject *__pyx_r = NULL;
if (__pyx_optional_args) {
if (__pyx_optional_args->__pyx_n > 0) {
__pyx_v_buffer = __pyx_optional_args->buffer;
if (__pyx_optional_args->__pyx_n > 1) {
__pyx_v_clear = __pyx_optional_args->clear;
if (__pyx_optional_args->__pyx_n > 2) {
__pyx_v_transactional = __pyx_optional_args->transactional;
}
}
}
}
/* … */
__pyx_v_transactional = ((int)0);
}
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("flush", 0, 0, 3, __pyx_nargs); __PYX_ERR(0, 13055, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.Sender.flush", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_buffer), __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, 1, "buffer", 0))) __PYX_ERR(0, 13057, __pyx_L1_error)
__pyx_r = __pyx_pf_7questdb_7_client_6Sender_28flush(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_buffer, __pyx_v_clear, __pyx_v_transactional);
13060: """
13061: If called with no arguments, immediately flushes the internal buffer.
13062:
13063: Alternatively you can flush a buffer that was constructed explicitly
13064: by passing ``buffer``.
13065:
13066: The buffer will be cleared by default, unless ``clear`` is set to
13067: ``False``.
13068:
13069: This method does nothing if the provided or internal buffer is empty.
13070:
13071: :param buffer: The buffer to flush. If ``None``, the internal buffer
13072: is flushed.
13073:
13074: With QWP/WebSocket, this publishes the buffer into the local sender
13075: queue and returns before the server necessarily ACKs the frame. Later
13076: terminal diagnostics fail subsequent sender calls and are available as
13077: :attr:`QuestDBError.sender_error`. Server diagnostics are also
13078: available through :func:`Sender.poll_error`.
13079:
13080: :param clear: If ``True``, the flushed buffer is cleared (default).
13081: If ``False``, the flushed buffer is left in the internal buffer.
13082: Note that ``clear=False`` is only supported if ``buffer`` is also
13083: specified.
13084:
13085: :param transactional: If ``True`` ensures that the flushed buffer
13086: contains row for a single table, ensuring all data can be written
13087: transactionally. This feature requires ILP/HTTP and is not available
13088: when connecting over TCP. *Default: False.*
13089:
13090: If the flush fails, the internal buffer is cleared, rows and all; a
13091: buffer passed as ``buffer`` is left as it is. Over QWP/WebSocket a
13092: buffer is published as one frame, and one whose encoded frame
13093: exceeds the connection's frame cap raises
13094: :class:`QuestDBError <questdb.QuestDBError>` (``BatchTooLarge``)
13095: without publishing anything.
13096:
13097: The Python GIL is released during the network IO operation.
13098: """
+13099: cdef line_sender_buffer* c_buf = NULL
__pyx_v_c_buf = NULL;
13100: cdef Buffer active_buf
13101: # Only a clearing flush modifies the buffer; a kept flush borrows it
13102: # read-only (`const line_sender_buffer*`), so concurrent reads and
13103: # other kept flushes of the same buffer stay allowed.
+13104: cdef bint exclusive = clear
__pyx_v_exclusive = __pyx_v_clear;
13105:
+13106: self._check_not_in_own_callback('flush')
__pyx_t_8 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush, NULL); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13106, __pyx_L1_error)
13107:
+13108: if self._in_txn:
if (unlikely(__pyx_v_self->_in_txn)) {
/* … */
}
+13109: raise QuestDBError(
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13109, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+13110: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13110, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13110, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Cannot_flush_explicitly_inside_a}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 13109, __pyx_L1_error)
13111: 'Cannot flush explicitly inside a transaction')
13112:
+13113: if buffer is None and not clear:
__pyx_t_10 = (((PyObject *)__pyx_v_buffer) == Py_None);
if (__pyx_t_10) {
} else {
__pyx_t_9 = __pyx_t_10;
goto __pyx_L5_bool_binop_done;
}
__pyx_t_10 = (!__pyx_v_clear);
__pyx_t_9 = __pyx_t_10;
__pyx_L5_bool_binop_done:;
if (unlikely(__pyx_t_9)) {
/* … */
}
+13114: raise ValueError('The internal buffer must always be cleared.')
__pyx_t_4 = NULL;
__pyx_t_7 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_The_internal_buffer_must_always};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13114, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 13114, __pyx_L1_error)
13115:
+13116: if self._impl == NULL:
__pyx_t_9 = (__pyx_v_self->_impl == NULL);
if (unlikely(__pyx_t_9)) {
/* … */
}
+13117: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13117, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+13118: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13118, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13118, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_flush_can_t_be_called_Sender_is}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13117, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 13117, __pyx_L1_error)
13119: 'flush() can\'t be called: Sender is closed.')
+13120: if buffer is not None:
__pyx_t_9 = (((PyObject *)__pyx_v_buffer) != Py_None);
if (__pyx_t_9) {
/* … */
goto __pyx_L8;
}
+13121: if exclusive:
if (__pyx_v_exclusive) {
/* … */
goto __pyx_L9;
}
+13122: buffer._check_impl()
__pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_impl(__pyx_v_buffer); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13122, __pyx_L1_error)
13123: else:
+13124: buffer._check_readable()
/*else*/ {
__pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_readable(__pyx_v_buffer); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13124, __pyx_L1_error)
}
__pyx_L9:;
+13125: self._check_buffer_protocol(buffer)
__pyx_t_8 = __pyx_f_7questdb_7_client_6Sender__check_buffer_protocol(__pyx_v_self, __pyx_v_buffer); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13125, __pyx_L1_error)
+13126: c_buf = buffer._impl
__pyx_t_11 = __pyx_v_buffer->_impl;
__pyx_v_c_buf = __pyx_t_11;
13127: else:
+13128: c_buf = self._buffer._impl
/*else*/ {
__pyx_t_11 = __pyx_v_self->_buffer->_impl;
__pyx_v_c_buf = __pyx_t_11;
}
__pyx_L8:;
13129: # Refused before the flush is attempted, and before the GIL is
13130: # released: a flush of a half-written row cannot succeed, and
13131: # the failure path clears the internal buffer, which would take
13132: # every finished row already in it with the part-written one.
+13133: (buffer if buffer is not None else self._buffer)._check_not_in_row(
__pyx_t_9 = (((PyObject *)__pyx_v_buffer) != Py_None);
if (__pyx_t_9) {
__Pyx_INCREF((PyObject *)__pyx_v_buffer);
__pyx_t_1 = ((PyObject *)__pyx_v_buffer);
} else {
__Pyx_INCREF((PyObject *)__pyx_v_self->_buffer);
__pyx_t_1 = ((PyObject *)__pyx_v_self->_buffer);
}
__pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_1), __pyx_mstate_global->__pyx_n_u_flush, NULL); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13133, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
13134: 'flush')
+13135: if line_sender_buffer_size(c_buf) == 0 and not _is_qwp_ws_protocol(self._c_protocol):
__pyx_t_10 = (line_sender_buffer_size(__pyx_v_c_buf) == 0);
if (__pyx_t_10) {
} else {
__pyx_t_9 = __pyx_t_10;
goto __pyx_L11_bool_binop_done;
}
__pyx_t_10 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_10 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13135, __pyx_L1_error)
__pyx_t_12 = (!__pyx_t_10);
__pyx_t_9 = __pyx_t_12;
__pyx_L11_bool_binop_done:;
if (__pyx_t_9) {
/* … */
}
+13136: return
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+13137: active_buf = buffer if buffer is not None else self._buffer
__pyx_t_9 = (((PyObject *)__pyx_v_buffer) != Py_None);
if (__pyx_t_9) {
__Pyx_INCREF((PyObject *)__pyx_v_buffer);
__pyx_t_1 = ((PyObject *)__pyx_v_buffer);
} else {
__Pyx_INCREF((PyObject *)__pyx_v_self->_buffer);
__pyx_t_1 = ((PyObject *)__pyx_v_self->_buffer);
}
__pyx_v_active_buf = ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_1);
__pyx_t_1 = 0;
+13138: self._flush_c_buf(active_buf, clear, transactional, False)
__pyx_t_8 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_self->__pyx_vtab)->_flush_c_buf(__pyx_v_self, __pyx_v_active_buf, __pyx_v_clear, __pyx_v_transactional, 0); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13138, __pyx_L1_error)
13139:
+13140: cdef void_int _flush_c_buf(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Sender__flush_c_buf(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_active_buf, int __pyx_v_clear, int __pyx_v_transactional, int __pyx_v_keep_on_batch_too_large) {
struct line_sender *__pyx_v_sender;
struct line_sender_buffer *__pyx_v_c_buf;
struct line_sender_error *__pyx_v_err;
PyThreadState *__pyx_v_gs;
int __pyx_v_ok;
PyObject *__pyx_v_exc = 0;
int __pyx_v_exclusive;
int __pyx_v_outer_in_flight;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_AddTraceback("questdb._client.Sender._flush_c_buf", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
13141: self,
13142: Buffer active_buf,
13143: bint clear,
13144: bint transactional,
13145: bint keep_on_batch_too_large) except -1:
13146: """
13147: Flush `active_buf`, which the caller has checked against this
13148: sender, with the GIL released.
13149:
13150: A failed flush of the internal buffer clears it. With
13151: `keep_on_batch_too_large`, a `BatchTooLarge` refusal leaves it
13152: intact instead: that refusal publishes nothing and leaves the sender
13153: usable, so the caller can rewind the row it just added and publish
13154: the rest.
13155: """
+13156: cdef line_sender* sender = self._impl
__pyx_t_1 = __pyx_v_self->_impl; __pyx_v_sender = __pyx_t_1;
+13157: cdef line_sender_buffer* c_buf = active_buf._impl
__pyx_t_2 = __pyx_v_active_buf->_impl; __pyx_v_c_buf = __pyx_t_2;
+13158: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+13159: cdef PyThreadState* gs = NULL # GIL state. NULL means we have the GIL.
__pyx_v_gs = NULL;
+13160: cdef bint ok = False
__pyx_v_ok = 0;
13161: cdef object exc
13162: # Only a clearing flush modifies the buffer; a kept flush borrows it
13163: # read-only, as `flush()` checked it.
+13164: cdef bint exclusive = clear
__pyx_v_exclusive = __pyx_v_clear;
13165:
13166: # Every publish of this sender's rows comes through here, including
13167: # auto-flush from `row()`, so the re-entry guard lives here too.
+13168: self._check_not_in_own_callback('flush')
__pyx_t_3 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush, NULL); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13168, __pyx_L1_error)
+13169: if sender == NULL:
__pyx_t_4 = (__pyx_v_sender == NULL);
if (unlikely(__pyx_t_4)) {
/* … */
}
+13170: raise QuestDBError(
__pyx_t_6 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13170, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
+13171: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13171, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 13171, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_6); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_9, __pyx_mstate_global->__pyx_kp_u_flush_can_t_be_called_Sender_is}; __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13170, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __PYX_ERR(0, 13170, __pyx_L1_error)
13172: 'flush() can\'t be called: Sender is closed.')
13173: # Every flush passes here, so a dictionary that another read of
13174: # `__dict__` recreated slows `row()` only until the next one.
+13175: _sender_drop_unused_dict(self)
__pyx_f_7questdb_7_client__sender_drop_unused_dict(__pyx_v_self);
13176:
13177: # Publish the guard before releasing the GIL: while native holds
13178: # `&mut Sender` and a borrowed pointer to `c_buf`, another thread must
13179: # not free the sender or mutate its buffer. OIDC diagnostics can also
13180: # re-enter Python on this thread meanwhile, and a logging or signal
13181: # handler there must not do either.
+13182: cdef bint outer_in_flight = self._enter_native()
__pyx_v_outer_in_flight = __pyx_f_7questdb_7_client_6Sender__enter_native(__pyx_v_self);
+13183: active_buf._begin_native_borrow(exclusive)
__pyx_f_7questdb_7_client_6Buffer__begin_native_borrow(__pyx_v_active_buf, __pyx_v_exclusive);
13184: # We might be blocking on IO, so temporarily release the GIL.
+13185: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+13186: if transactional:
if (__pyx_v_transactional) {
/* … */
goto __pyx_L4;
}
+13187: ok = line_sender_flush_and_keep_with_flags(
__pyx_v_ok = line_sender_flush_and_keep_with_flags(__pyx_v_sender, __pyx_v_c_buf, __pyx_v_transactional, (&__pyx_v_err));
13188: sender,
13189: c_buf,
13190: transactional,
13191: &err)
+13192: if ok and clear:
if (__pyx_v_ok) {
} else {
__pyx_t_4 = __pyx_v_ok;
goto __pyx_L6_bool_binop_done;
}
__pyx_t_4 = __pyx_v_clear;
__pyx_L6_bool_binop_done:;
if (__pyx_t_4) {
/* … */
}
+13193: line_sender_buffer_clear(c_buf)
line_sender_buffer_clear(__pyx_v_c_buf);
+13194: elif clear:
if (__pyx_v_clear) {
/* … */
goto __pyx_L4;
}
+13195: ok = line_sender_flush(sender, c_buf, &err)
__pyx_v_ok = line_sender_flush(__pyx_v_sender, __pyx_v_c_buf, (&__pyx_v_err));
13196: else:
+13197: ok = line_sender_flush_and_keep(sender, c_buf, &err)
/*else*/ {
__pyx_v_ok = line_sender_flush_and_keep(__pyx_v_sender, __pyx_v_c_buf, (&__pyx_v_err));
}
__pyx_L4:;
+13198: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+13199: active_buf._end_native_borrow(exclusive)
__pyx_f_7questdb_7_client_6Buffer__end_native_borrow(__pyx_v_active_buf, __pyx_v_exclusive);
+13200: self._exit_native(outer_in_flight)
__pyx_f_7questdb_7_client_6Sender__exit_native(__pyx_v_self, __pyx_v_outer_in_flight);
+13201: if ok and c_buf == self._buffer._impl:
if (__pyx_v_ok) {
} else {
__pyx_t_4 = __pyx_v_ok;
goto __pyx_L9_bool_binop_done;
}
__pyx_t_11 = (__pyx_v_c_buf == __pyx_v_self->_buffer->_impl);
__pyx_t_4 = __pyx_t_11;
__pyx_L9_bool_binop_done:;
if (__pyx_t_4) {
/* … */
}
+13202: self._last_flush_ms[0] = line_sender_now_micros() // 1000
(__pyx_v_self->_last_flush_ms[0]) = __Pyx_div_int64_t(line_sender_now_micros(), 0x3E8, 1);
+13203: if not ok:
__pyx_t_4 = (!__pyx_v_ok);
if (__pyx_t_4) {
/* … */
}
13204: # Cleared before the error is converted, deciding from the native
13205: # code: converting it runs Python -- an `OidcError` constructor,
13206: # the re-raise of a parked signal -- where a pending signal
13207: # handler's exception would otherwise skip the clear.
+13208: if c_buf == self._buffer._impl and not (
__pyx_t_11 = (__pyx_v_c_buf == __pyx_v_self->_buffer->_impl);
if (__pyx_t_11) {
} else {
__pyx_t_4 = __pyx_t_11;
goto __pyx_L13_bool_binop_done;
}
/* … */
__pyx_t_12 = (!__pyx_t_11);
__pyx_t_4 = __pyx_t_12;
__pyx_L13_bool_binop_done:;
if (__pyx_t_4) {
/* … */
}
+13209: keep_on_batch_too_large and err != NULL and
if (__pyx_v_keep_on_batch_too_large) {
} else {
__pyx_t_11 = __pyx_v_keep_on_batch_too_large;
goto __pyx_L15_bool_binop_done;
}
__pyx_t_12 = (__pyx_v_err != NULL);
if (__pyx_t_12) {
} else {
__pyx_t_11 = __pyx_t_12;
goto __pyx_L15_bool_binop_done;
}
13210: line_sender_error_get_code(err)
+13211: == line_sender_error_batch_too_large):
__pyx_t_12 = (line_sender_error_get_code(__pyx_v_err) == line_sender_error_batch_too_large);
__pyx_t_11 = __pyx_t_12;
__pyx_L15_bool_binop_done:;
13212: # Prevent a follow-up call to `.close(flush=True)` (as is
13213: # usually called from `__exit__`) to raise after the sender
13214: # entered an error state following a failed call to `.flush()`.
13215: #
13216: # Cleared for every failure but a `BatchTooLarge` refusal
13217: # under `keep_on_batch_too_large`, which `row()` settles
13218: # before it returns: it takes its newest row back out and
13219: # publishes or discards the rest (see `_qwp_row_append`).
13220: # The internal buffer is shared state that
13221: # `may_flush_on_row_complete`, `SenderTransaction.__enter__`
13222: # / `.commit()` and `close(flush=True)` all read as
13223: # "unflushed rows, publish at the next opportunity", so rows
13224: # left here do not wait for the caller: an auto-flush
13225: # discards them, a transaction publishes them without its
13226: # own transactional framing, and `__exit__` re-raises. A
13227: # caller who wants to republish a failed batch after
13228: # recovering owns the buffer instead --
13229: # `buf = sender.new_buffer()` then `sender.flush(buf,
13230: # clear=False)`, which keeps `buf` intact on ANY error and is
13231: # invisible to all of the above.
13232: # Note: For the internal buffer `clear` is always `True`.
+13233: line_sender_buffer_clear(c_buf)
line_sender_buffer_clear(__pyx_v_c_buf);
+13234: if _is_tcp_protocol(self._c_protocol):
__pyx_t_4 = __pyx_f_7questdb_7_client__is_tcp_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_4 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13234, __pyx_L1_error) if (__pyx_t_4) { /* … */ goto __pyx_L18; }
13235: # Provide further context pointing to the logs.
+13236: exc = c_err_to_py_fmt(err, _FLUSH_FMT)
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_FLUSH_FMT); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13236, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (!(likely(PyUnicode_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_5))) __PYX_ERR(0, 13236, __pyx_L1_error) __pyx_t_7 = __pyx_f_7questdb_7_client_c_err_to_py_fmt(__pyx_v_err, ((PyObject*)__pyx_t_5)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13236, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_exc = __pyx_t_7; __pyx_t_7 = 0;
13237: else:
+13238: exc = c_err_to_py(err)
/*else*/ {
__pyx_t_7 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13238, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_v_exc = __pyx_t_7;
__pyx_t_7 = 0;
}
__pyx_L18:;
+13239: raise exc
__Pyx_Raise(__pyx_v_exc, 0, 0, 0); __PYX_ERR(0, 13239, __pyx_L1_error)
13240: # Native errors above are consumed before the fallback raises. On
13241: # success all sender/buffer borrows have already been released.
+13242: _oidc_raise_unscheduled_main()
__pyx_t_3 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13242, __pyx_L1_error)
13243:
+13244: cdef inline bint _enter_native(self) noexcept:
static CYTHON_INLINE int __pyx_f_7questdb_7_client_6Sender__enter_native(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
int __pyx_v_outer;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
13245: """Mark a native call borrowing this sender as in progress. Returns
13246: the previous state, for the matching `_exit_native`."""
+13247: cdef bint outer = self._native_in_flight
__pyx_t_1 = __pyx_v_self->_native_in_flight; __pyx_v_outer = __pyx_t_1;
+13248: self._native_in_flight = True
__pyx_v_self->_native_in_flight = 1;
+13249: return outer
{
__pyx_r = __pyx_v_outer;
}
goto __pyx_L0;
13250:
+13251: cdef inline void _exit_native(self, bint outer) noexcept:
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Sender__exit_native(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, int __pyx_v_outer) {
/* … */
/* function exit code */
}
13252: # Restored, not cleared: a call made from Python that a `dataframe()`
13253: # runs -- a flush of another buffer -- must leave the frame's guard
13254: # up for the rest of the frame.
+13255: self._native_in_flight = outer
__pyx_v_self->_native_in_flight = __pyx_v_outer;
13256:
+13257: cdef inline void_int _check_not_in_own_callback(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, PyObject *__pyx_v_method, struct __pyx_opt_args_7questdb_7_client_6Sender__check_not_in_own_callback *__pyx_optional_args) {
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_AddTraceback("questdb._client.Sender._check_not_in_own_callback", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
struct __pyx_opt_args_7questdb_7_client_6Sender__check_not_in_own_callback {
int __pyx_n;
int allow_idle_callback;
};
+13258: self, str method, bint allow_idle_callback=False) except -1:
int __pyx_v_allow_idle_callback = ((int)0);
__pyx_t_7questdb_7_client_void_int __pyx_r;
if (__pyx_optional_args) {
if (__pyx_optional_args->__pyx_n > 0) {
__pyx_v_allow_idle_callback = __pyx_optional_args->allow_idle_callback;
}
}
13259: # A frame serialized into this sender's buffer holds the sender for
13260: # the whole call; Python the frame itself runs on this thread is let
13261: # through to the buffer's own row rules (see
13262: # `Buffer._reentered_from_frame`).
+13263: if self._native_in_flight and not (
if (__pyx_v_self->_native_in_flight) {
} else {
__pyx_t_1 = __pyx_v_self->_native_in_flight;
goto __pyx_L4_bool_binop_done;
}
/* … */
__pyx_t_3 = (!__pyx_t_2);
__pyx_t_1 = __pyx_t_3;
__pyx_L4_bool_binop_done:;
if (unlikely(__pyx_t_1)) {
/* … */
}
+13264: self._buffer is not None
__pyx_t_3 = (((PyObject *)__pyx_v_self->_buffer) != Py_None);
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L6_bool_binop_done;
}
+13265: and self._buffer._reentered_from_frame()):
__pyx_t_3 = ((struct __pyx_vtabstruct_7questdb_7_client_Buffer *)__pyx_v_self->_buffer->__pyx_vtab)->_reentered_from_frame(__pyx_v_self->_buffer); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 13265, __pyx_L1_error)
__pyx_t_2 = __pyx_t_3;
__pyx_L6_bool_binop_done:;
+13266: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13266, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
+13267: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13267, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13267, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+13268: f'{method}() cannot be called while this sender is in a native '
__pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13268, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_9 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_cannot_be_called_while_this_sen); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 13268, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_8, __pyx_t_9}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13266, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 13266, __pyx_L1_error)
13269: 'operation, including from code that runs inside it: a token '
13270: 'provider, an OIDC callback or a signal handler.')
13271: # Read-only getters are safe in an idle listener, but a native call
13272: # may hold a mutable borrow even while the listener is dispatched.
+13273: if allow_idle_callback or (
if (!__pyx_v_allow_idle_callback) {
} else {
__pyx_t_1 = __pyx_v_allow_idle_callback;
goto __pyx_L9_bool_binop_done;
}
/* … */
if (__pyx_t_1) {
/* … */
}
+13274: self._error_handler is None and self._connection_listener is None):
__pyx_t_3 = (__pyx_v_self->_error_handler == Py_None);
if (__pyx_t_3) {
} else {
__pyx_t_1 = __pyx_t_3;
goto __pyx_L9_bool_binop_done;
}
__pyx_t_3 = (__pyx_v_self->_connection_listener == Py_None);
__pyx_t_1 = __pyx_t_3;
__pyx_L9_bool_binop_done:;
+13275: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
13276: # Native QWP/WebSocket callback dispatch keeps this sender borrowed.
13277: # Reentering the exact owner from either of its callbacks would alias
13278: # or free the live sender and abort the process. A callback function
13279: # shared with another sender does not carry this owner's token.
+13280: if _dispatching_for(self._thread_owner_token):
__pyx_t_4 = __pyx_v_self->_thread_owner_token; __Pyx_INCREF(__pyx_t_4); __pyx_t_1 = __pyx_f_7questdb_7_client__dispatching_for(__pyx_t_4); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(__pyx_t_1)) { /* … */ }
+13281: raise QuestDBError(
__pyx_t_6 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 13281, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
+13282: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13282, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13282, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+13283: f'{method}() cannot be called from within this sender\'s own '
__pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13283, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_8, __pyx_mstate_global->__pyx_kp_u_cannot_be_called_from_within_th); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13283, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_6); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_5, __pyx_t_7}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13281, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 13281, __pyx_L1_error)
13284: 'error_handler or connection_listener callback.')
13285:
+13286: cdef inline void_int _check_qwp_ws(self, str method) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, PyObject *__pyx_v_method) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.Sender._check_qwp_ws", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+13287: if self._impl == NULL:
__pyx_t_1 = (__pyx_v_self->_impl == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+13288: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13288, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+13289: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13289, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13289, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+13290: f'{method}() can\'t be called: Sender is closed.')
__pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13290, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_Sender_is_close); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13290, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_7}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13288, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 13288, __pyx_L1_error)
+13291: if not _is_qwp_ws_protocol(self._c_protocol):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13291, __pyx_L1_error) __pyx_t_9 = (!__pyx_t_1); if (unlikely(__pyx_t_9)) { /* … */ }
+13292: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13292, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
+13293: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13293, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13293, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+13294: f'{method}() is only supported for QWP/WebSocket senders.')
__pyx_t_6 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_is_only_supported_for_QWP_WebSo); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_3, __pyx_t_5}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13292, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 13292, __pyx_L1_error)
+13295: self._check_not_in_own_callback(method)
__pyx_t_10 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_v_method, NULL); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13295, __pyx_L1_error)
13296:
+13297: cdef inline void_int _check_buffer_protocol(self, Buffer buffer) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Sender__check_buffer_protocol(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer) {
int __pyx_v_need_qwp;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.Sender._check_buffer_protocol", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
13298: cdef bint need_qwp = (
+13299: _is_qwp_udp_protocol(self._c_protocol) or
__pyx_t_2 = __pyx_f_7questdb_7_client__is_qwp_udp_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13299, __pyx_L1_error) if (!__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L3_bool_binop_done; }
+13300: _is_qwp_ws_protocol(self._c_protocol))
__pyx_t_2 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13300, __pyx_L1_error) __pyx_t_1 = __pyx_t_2; __pyx_L3_bool_binop_done:; __pyx_v_need_qwp = __pyx_t_1;
+13301: if need_qwp and not buffer._qwp:
if (__pyx_v_need_qwp) {
} else {
__pyx_t_1 = __pyx_v_need_qwp;
goto __pyx_L6_bool_binop_done;
}
__pyx_t_2 = (!__pyx_v_buffer->_qwp);
__pyx_t_1 = __pyx_t_2;
__pyx_L6_bool_binop_done:;
if (unlikely(__pyx_t_1)) {
/* … */
}
+13302: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13302, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+13303: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13303, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13303, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_QWP_sender_requires_a_QWP_buffer}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13302, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 13302, __pyx_L1_error)
13304: 'QWP sender requires a QWP buffer. Use Sender.new_buffer() '
13305: 'to build a matching buffer.')
+13306: if buffer._qwp and not need_qwp:
if (__pyx_v_buffer->_qwp) {
} else {
__pyx_t_1 = __pyx_v_buffer->_qwp;
goto __pyx_L9_bool_binop_done;
}
__pyx_t_2 = (!__pyx_v_need_qwp);
__pyx_t_1 = __pyx_t_2;
__pyx_L9_bool_binop_done:;
if (unlikely(__pyx_t_1)) {
/* … */
}
+13307: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13307, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
+13308: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13308, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13308, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_ILP_sender_requires_an_ILP_buffe}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13307, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 13307, __pyx_L1_error)
13309: 'ILP sender requires an ILP buffer. Use Sender.new_buffer() '
13310: 'to build a matching buffer.')
13311:
+13312: def flush_and_get_fsn(self, Buffer buffer=None):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_31flush_and_get_fsn(PyObject *__pyx_v_self, #if CYTHON_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_30flush_and_get_fsn, "\n Publish a QWP/WebSocket buffer locally, clear it on success, and return\n the assigned frame sequence number.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_31flush_and_get_fsn = {"flush_and_get_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_31flush_and_get_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_30flush_and_get_fsn}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_31flush_and_get_fsn(PyObject *__pyx_v_self, #if CYTHON_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, 13312, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13312, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "flush_and_get_fsn", 0) < (0)) __PYX_ERR(0, 13312, __pyx_L3_error) if (!values[0]) values[0] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None)); } else { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13312, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } if (!values[0]) values[0] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None)); } __pyx_v_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)values[0]); } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("flush_and_get_fsn", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 13312, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Sender.flush_and_get_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_buffer), __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, 1, "buffer", 0))) __PYX_ERR(0, 13312, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_6Sender_30flush_and_get_fsn(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_buffer); /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_30flush_and_get_fsn(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer) { struct line_sender *__pyx_v_sender; struct line_sender_error *__pyx_v_err; struct line_sender_buffer *__pyx_v_c_buf; struct line_sender_qwpws_fsn __pyx_v_fsn; PyThreadState *__pyx_v_gs; int __pyx_v_ok; int __pyx_v_outer_in_flight; PyObject *__pyx_r = NULL; __Pyx_INCREF((PyObject *)__pyx_v_buffer); /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("questdb._client.Sender.flush_and_get_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_buffer); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_31flush_and_get_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_flush_and_get_fsn, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[234])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 13312, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_18, __pyx_mstate_global->__pyx_tuple[63]); if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_flush_and_get_fsn, __pyx_t_18) < (0)) __PYX_ERR(0, 13312, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
13313: """
13314: Publish a QWP/WebSocket buffer locally, clear it on success, and return
13315: the assigned frame sequence number.
13316: """
+13317: cdef line_sender* sender = self._impl
__pyx_t_1 = __pyx_v_self->_impl; __pyx_v_sender = __pyx_t_1;
+13318: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+13319: cdef line_sender_buffer* c_buf = NULL
__pyx_v_c_buf = NULL;
13320: cdef line_sender_qwpws_fsn fsn
+13321: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+13322: cdef bint ok = False
__pyx_v_ok = 0;
13323:
+13324: if self._in_txn:
if (unlikely(__pyx_v_self->_in_txn)) {
/* … */
}
+13325: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13325, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+13326: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13326, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13326, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Cannot_flush_explicitly_inside_a}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13325, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 13325, __pyx_L1_error)
13327: 'Cannot flush explicitly inside a transaction')
+13328: self._check_qwp_ws('flush_and_get_fsn')
__pyx_t_8 = __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush_and_get_fsn); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13328, __pyx_L1_error)
+13329: if buffer is not None:
__pyx_t_9 = (((PyObject *)__pyx_v_buffer) != Py_None);
if (__pyx_t_9) {
/* … */
goto __pyx_L4;
}
+13330: buffer._check_impl()
__pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_impl(__pyx_v_buffer); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13330, __pyx_L1_error)
+13331: self._check_buffer_protocol(buffer)
__pyx_t_8 = __pyx_f_7questdb_7_client_6Sender__check_buffer_protocol(__pyx_v_self, __pyx_v_buffer); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13331, __pyx_L1_error)
+13332: c_buf = buffer._impl
__pyx_t_10 = __pyx_v_buffer->_impl;
__pyx_v_c_buf = __pyx_t_10;
13333: else:
+13334: buffer = self._buffer
/*else*/ {
__pyx_t_2 = ((PyObject *)__pyx_v_self->_buffer);
__Pyx_INCREF(__pyx_t_2);
__Pyx_DECREF_SET(__pyx_v_buffer, ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_2));
__pyx_t_2 = 0;
+13335: c_buf = self._buffer._impl
__pyx_t_10 = __pyx_v_self->_buffer->_impl;
__pyx_v_c_buf = __pyx_t_10;
}
__pyx_L4:;
+13336: (buffer if buffer is not None else self._buffer)._check_not_in_row(
__pyx_t_9 = (((PyObject *)__pyx_v_buffer) != Py_None);
if (__pyx_t_9) {
__Pyx_INCREF((PyObject *)__pyx_v_buffer);
__pyx_t_2 = ((PyObject *)__pyx_v_buffer);
} else {
__Pyx_INCREF((PyObject *)__pyx_v_self->_buffer);
__pyx_t_2 = ((PyObject *)__pyx_v_self->_buffer);
}
__pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_2), __pyx_mstate_global->__pyx_n_u_flush_and_get_fsn, NULL); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13336, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
13337: 'flush_and_get_fsn')
13338:
+13339: cdef bint outer_in_flight = self._enter_native()
__pyx_v_outer_in_flight = __pyx_f_7questdb_7_client_6Sender__enter_native(__pyx_v_self);
+13340: buffer._begin_native_borrow(True)
__pyx_f_7questdb_7_client_6Buffer__begin_native_borrow(__pyx_v_buffer, 1);
+13341: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+13342: ok = line_sender_qwpws_flush_and_get_fsn(sender, c_buf, &fsn, &err)
__pyx_v_ok = line_sender_qwpws_flush_and_get_fsn(__pyx_v_sender, __pyx_v_c_buf, (&__pyx_v_fsn), (&__pyx_v_err));
+13343: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+13344: buffer._end_native_borrow(True)
__pyx_f_7questdb_7_client_6Buffer__end_native_borrow(__pyx_v_buffer, 1);
+13345: self._exit_native(outer_in_flight)
__pyx_f_7questdb_7_client_6Sender__exit_native(__pyx_v_self, __pyx_v_outer_in_flight);
+13346: if not ok:
__pyx_t_9 = (!__pyx_v_ok);
if (__pyx_t_9) {
/* … */
}
+13347: if c_buf == self._buffer._impl:
__pyx_t_9 = (__pyx_v_c_buf == __pyx_v_self->_buffer->_impl);
if (__pyx_t_9) {
/* … */
}
+13348: line_sender_buffer_clear(c_buf)
line_sender_buffer_clear(__pyx_v_c_buf);
+13349: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13349, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 13349, __pyx_L1_error)
+13350: if c_buf == self._buffer._impl:
__pyx_t_9 = (__pyx_v_c_buf == __pyx_v_self->_buffer->_impl);
if (__pyx_t_9) {
/* … */
}
+13351: self._last_flush_ms[0] = line_sender_now_micros() // 1000
(__pyx_v_self->_last_flush_ms[0]) = __Pyx_div_int64_t(line_sender_now_micros(), 0x3E8, 1);
+13352: _oidc_raise_unscheduled_main()
__pyx_t_8 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13352, __pyx_L1_error)
+13353: if fsn.has_value:
__pyx_t_9 = (__pyx_v_fsn.has_value != 0);
if (__pyx_t_9) {
/* … */
}
+13354: return fsn.value
__pyx_t_2 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13354, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+13355: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
13356:
+13357: def flush_and_keep_and_get_fsn(self, Buffer buffer=None):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_33flush_and_keep_and_get_fsn(PyObject *__pyx_v_self, #if CYTHON_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_32flush_and_keep_and_get_fsn, "\n Publish a QWP/WebSocket buffer locally without clearing it and return\n the assigned frame sequence number.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_33flush_and_keep_and_get_fsn = {"flush_and_keep_and_get_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_33flush_and_keep_and_get_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_32flush_and_keep_and_get_fsn}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_33flush_and_keep_and_get_fsn(PyObject *__pyx_v_self, #if CYTHON_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, 13357, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13357, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "flush_and_keep_and_get_fsn", 0) < (0)) __PYX_ERR(0, 13357, __pyx_L3_error) if (!values[0]) values[0] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None)); } else { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13357, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } if (!values[0]) values[0] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None)); } __pyx_v_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)values[0]); } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("flush_and_keep_and_get_fsn", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 13357, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Sender.flush_and_keep_and_get_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_buffer), __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, 1, "buffer", 0))) __PYX_ERR(0, 13357, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_6Sender_32flush_and_keep_and_get_fsn(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_buffer); /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_32flush_and_keep_and_get_fsn(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer) { struct line_sender *__pyx_v_sender; struct line_sender_error *__pyx_v_err; struct line_sender_buffer *__pyx_v_c_buf; struct line_sender_qwpws_fsn __pyx_v_fsn; PyThreadState *__pyx_v_gs; int __pyx_v_ok; int __pyx_v_outer_in_flight; PyObject *__pyx_r = NULL; __Pyx_INCREF((PyObject *)__pyx_v_buffer); /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("questdb._client.Sender.flush_and_keep_and_get_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_buffer); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_33flush_and_keep_and_get_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_flush_and_keep_and_get_fs, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[235])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 13357, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_18, __pyx_mstate_global->__pyx_tuple[63]); 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_18) < (0)) __PYX_ERR(0, 13357, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
13358: """
13359: Publish a QWP/WebSocket buffer locally without clearing it and return
13360: the assigned frame sequence number.
13361: """
+13362: cdef line_sender* sender = self._impl
__pyx_t_1 = __pyx_v_self->_impl; __pyx_v_sender = __pyx_t_1;
+13363: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+13364: cdef line_sender_buffer* c_buf = NULL
__pyx_v_c_buf = NULL;
13365: cdef line_sender_qwpws_fsn fsn
+13366: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+13367: cdef bint ok = False
__pyx_v_ok = 0;
13368:
+13369: if self._in_txn:
if (unlikely(__pyx_v_self->_in_txn)) {
/* … */
}
+13370: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13370, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+13371: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13371, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13371, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Cannot_flush_explicitly_inside_a}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13370, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 13370, __pyx_L1_error)
13372: 'Cannot flush explicitly inside a transaction')
+13373: self._check_qwp_ws('flush_and_keep_and_get_fsn')
__pyx_t_8 = __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush_and_keep_and_get_fsn); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13373, __pyx_L1_error)
+13374: if buffer is not None:
__pyx_t_9 = (((PyObject *)__pyx_v_buffer) != Py_None);
if (__pyx_t_9) {
/* … */
goto __pyx_L4;
}
13375: # Native borrows the buffer read-only (`const`), as
13376: # `flush(buffer, clear=False)` does.
+13377: buffer._check_readable()
__pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_readable(__pyx_v_buffer); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13377, __pyx_L1_error)
+13378: self._check_buffer_protocol(buffer)
__pyx_t_8 = __pyx_f_7questdb_7_client_6Sender__check_buffer_protocol(__pyx_v_self, __pyx_v_buffer); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13378, __pyx_L1_error)
+13379: c_buf = buffer._impl
__pyx_t_10 = __pyx_v_buffer->_impl;
__pyx_v_c_buf = __pyx_t_10;
13380: else:
+13381: buffer = self._buffer
/*else*/ {
__pyx_t_2 = ((PyObject *)__pyx_v_self->_buffer);
__Pyx_INCREF(__pyx_t_2);
__Pyx_DECREF_SET(__pyx_v_buffer, ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_2));
__pyx_t_2 = 0;
+13382: c_buf = self._buffer._impl
__pyx_t_10 = __pyx_v_self->_buffer->_impl;
__pyx_v_c_buf = __pyx_t_10;
}
__pyx_L4:;
+13383: (buffer if buffer is not None else self._buffer)._check_not_in_row(
__pyx_t_9 = (((PyObject *)__pyx_v_buffer) != Py_None);
if (__pyx_t_9) {
__Pyx_INCREF((PyObject *)__pyx_v_buffer);
__pyx_t_2 = ((PyObject *)__pyx_v_buffer);
} else {
__Pyx_INCREF((PyObject *)__pyx_v_self->_buffer);
__pyx_t_2 = ((PyObject *)__pyx_v_self->_buffer);
}
__pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_2), __pyx_mstate_global->__pyx_n_u_flush_and_keep_and_get_fsn, NULL); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13383, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
13384: 'flush_and_keep_and_get_fsn')
13385:
+13386: cdef bint outer_in_flight = self._enter_native()
__pyx_v_outer_in_flight = __pyx_f_7questdb_7_client_6Sender__enter_native(__pyx_v_self);
+13387: buffer._begin_native_borrow(False)
__pyx_f_7questdb_7_client_6Buffer__begin_native_borrow(__pyx_v_buffer, 0);
+13388: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+13389: ok = line_sender_qwpws_flush_and_keep_and_get_fsn(
__pyx_v_ok = line_sender_qwpws_flush_and_keep_and_get_fsn(__pyx_v_sender, __pyx_v_c_buf, (&__pyx_v_fsn), (&__pyx_v_err));
13390: sender, c_buf, &fsn, &err)
+13391: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+13392: buffer._end_native_borrow(False)
__pyx_f_7questdb_7_client_6Buffer__end_native_borrow(__pyx_v_buffer, 0);
+13393: self._exit_native(outer_in_flight)
__pyx_f_7questdb_7_client_6Sender__exit_native(__pyx_v_self, __pyx_v_outer_in_flight);
+13394: if not ok:
__pyx_t_9 = (!__pyx_v_ok);
if (__pyx_t_9) {
/* … */
}
+13395: if c_buf == self._buffer._impl:
__pyx_t_9 = (__pyx_v_c_buf == __pyx_v_self->_buffer->_impl);
if (__pyx_t_9) {
/* … */
}
+13396: line_sender_buffer_clear(c_buf)
line_sender_buffer_clear(__pyx_v_c_buf);
+13397: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13397, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 13397, __pyx_L1_error)
+13398: if c_buf == self._buffer._impl:
__pyx_t_9 = (__pyx_v_c_buf == __pyx_v_self->_buffer->_impl);
if (__pyx_t_9) {
/* … */
}
+13399: self._last_flush_ms[0] = line_sender_now_micros() // 1000
(__pyx_v_self->_last_flush_ms[0]) = __Pyx_div_int64_t(line_sender_now_micros(), 0x3E8, 1);
+13400: _oidc_raise_unscheduled_main()
__pyx_t_8 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13400, __pyx_L1_error)
+13401: if fsn.has_value:
__pyx_t_9 = (__pyx_v_fsn.has_value != 0);
if (__pyx_t_9) {
/* … */
}
+13402: return fsn.value
__pyx_t_2 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13402, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+13403: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
13404:
+13405: def published_fsn(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_35published_fsn(PyObject *__pyx_v_self, #if CYTHON_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_34published_fsn, "\n Highest QWP/WebSocket frame sequence number published locally.\n\n Raises :class:`QuestDBError <questdb.QuestDBError>`\n (``InvalidApiCall``) when called from this sender\047s own\n ``error_handler`` or ``connection_listener``, or from any thread\n while this sender is inside a native call such as\n :func:`Sender.flush`.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_35published_fsn = {"published_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_35published_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_34published_fsn}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_35published_fsn(PyObject *__pyx_v_self, #if CYTHON_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_34published_fsn(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_34published_fsn(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) { struct line_sender_qwpws_fsn __pyx_v_fsn; struct line_sender_error *__pyx_v_err; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client.Sender.published_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_35published_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_published_fsn, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[236])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 13405, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_published_fsn, __pyx_t_18) < (0)) __PYX_ERR(0, 13405, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
13406: """
13407: Highest QWP/WebSocket frame sequence number published locally.
13408:
13409: Raises :class:`QuestDBError <questdb.QuestDBError>`
13410: (``InvalidApiCall``) when called from this sender's own
13411: ``error_handler`` or ``connection_listener``, or from any thread
13412: while this sender is inside a native call such as
13413: :func:`Sender.flush`.
13414: """
13415: cdef line_sender_qwpws_fsn fsn
+13416: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
13417:
+13418: self._check_qwp_ws('published_fsn')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_published_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13418, __pyx_L1_error)
+13419: if not line_sender_qwpws_published_fsn(self._impl, &fsn, &err):
__pyx_t_2 = (!line_sender_qwpws_published_fsn(__pyx_v_self->_impl, (&__pyx_v_fsn), (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
+13420: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13420, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 13420, __pyx_L1_error)
+13421: if fsn.has_value:
__pyx_t_2 = (__pyx_v_fsn.has_value != 0);
if (__pyx_t_2) {
/* … */
}
+13422: return fsn.value
__pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13422, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
+13423: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
13424:
+13425: def acked_fsn(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_37acked_fsn(PyObject *__pyx_v_self, #if CYTHON_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_36acked_fsn, "\n Highest QWP/WebSocket frame sequence number completed by ACK or\n drop-and-continue rejection.\n\n Raises :class:`QuestDBError <questdb.QuestDBError>`\n (``InvalidApiCall``) when called from this sender\047s own\n ``error_handler`` or ``connection_listener``, or from any thread\n while this sender is inside a native call such as\n :func:`Sender.flush`.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_37acked_fsn = {"acked_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_37acked_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_36acked_fsn}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_37acked_fsn(PyObject *__pyx_v_self, #if CYTHON_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_36acked_fsn(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_36acked_fsn(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) { struct line_sender_qwpws_fsn __pyx_v_fsn; struct line_sender_error *__pyx_v_err; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client.Sender.acked_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_37acked_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_acked_fsn, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[237])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 13425, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_acked_fsn, __pyx_t_18) < (0)) __PYX_ERR(0, 13425, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
13426: """
13427: Highest QWP/WebSocket frame sequence number completed by ACK or
13428: drop-and-continue rejection.
13429:
13430: Raises :class:`QuestDBError <questdb.QuestDBError>`
13431: (``InvalidApiCall``) when called from this sender's own
13432: ``error_handler`` or ``connection_listener``, or from any thread
13433: while this sender is inside a native call such as
13434: :func:`Sender.flush`.
13435: """
13436: cdef line_sender_qwpws_fsn fsn
+13437: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
13438:
+13439: self._check_qwp_ws('acked_fsn')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_acked_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13439, __pyx_L1_error)
+13440: if not line_sender_qwpws_acked_fsn(self._impl, &fsn, &err):
__pyx_t_2 = (!line_sender_qwpws_acked_fsn(__pyx_v_self->_impl, (&__pyx_v_fsn), (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
+13441: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13441, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 13441, __pyx_L1_error)
+13442: if fsn.has_value:
__pyx_t_2 = (__pyx_v_fsn.has_value != 0);
if (__pyx_t_2) {
/* … */
}
+13443: return fsn.value
__pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13443, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
+13444: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
13445:
+13446: def await_acked_fsn(self, fsn, timeout_millis=0):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_39await_acked_fsn(PyObject *__pyx_v_self, #if CYTHON_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_38await_acked_fsn, "\n Wait until the QWP/WebSocket completion watermark reaches ``fsn``.\n\n Returns ``True`` once every frame published so far (which includes\n ``fsn``) has been acknowledged, or ``False`` if the no-progress\n timeout elapsed before the acknowledgement watermark reached ``fsn``.\n\n ``timeout_millis`` is a no-progress timeout; ``0`` waits indefinitely,\n including while an attached OIDC provider has no usable token and the\n background reconnect keeps retrying.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_39await_acked_fsn = {"await_acked_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_39await_acked_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_38await_acked_fsn}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_39await_acked_fsn(PyObject *__pyx_v_self, #if CYTHON_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, 13446, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 13446, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13446, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "await_acked_fsn", 0) < (0)) __PYX_ERR(0, 13446, __pyx_L3_error) if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("await_acked_fsn", 0, 1, 2, i); __PYX_ERR(0, 13446, __pyx_L3_error) } } } else { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 13446, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13446, __pyx_L3_error) break; default: goto __pyx_L5_argtuple_error; } if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); } __pyx_v_fsn = values[0]; __pyx_v_timeout_millis = values[1]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("await_acked_fsn", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 13446, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Sender.await_acked_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_6Sender_38await_acked_fsn(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_fsn, __pyx_v_timeout_millis); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_38await_acked_fsn(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, PyObject *__pyx_v_fsn, PyObject *__pyx_v_timeout_millis) { struct line_sender_error *__pyx_v_err; PyThreadState *__pyx_v_gs; uint64_t __pyx_v_c_fsn; uint64_t __pyx_v_c_timeout_millis; struct line_sender_qwpws_fsn __pyx_v_acked; int __pyx_v_ok; int __pyx_v_outer_in_flight; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_10); __Pyx_AddTraceback("questdb._client.Sender.await_acked_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_39await_acked_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_await_acked_fsn, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[238])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 13446, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_18, __pyx_mstate_global->__pyx_tuple[16]); if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_await_acked_fsn, __pyx_t_18) < (0)) __PYX_ERR(0, 13446, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
13447: """
13448: Wait until the QWP/WebSocket completion watermark reaches ``fsn``.
13449:
13450: Returns ``True`` once every frame published so far (which includes
13451: ``fsn``) has been acknowledged, or ``False`` if the no-progress
13452: timeout elapsed before the acknowledgement watermark reached ``fsn``.
13453:
13454: ``timeout_millis`` is a no-progress timeout; ``0`` waits indefinitely,
13455: including while an attached OIDC provider has no usable token and the
13456: background reconnect keeps retrying.
13457: """
+13458: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+13459: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
13460: cdef uint64_t c_fsn
13461: cdef uint64_t c_timeout_millis
13462: cdef line_sender_qwpws_fsn acked
+13463: cdef bint ok = False
__pyx_v_ok = 0;
13464:
+13465: self._check_qwp_ws('await_acked_fsn')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_await_acked_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13465, __pyx_L1_error)
+13466: if not isinstance(fsn, int) or isinstance(fsn, bool):
__pyx_t_3 = PyLong_Check(__pyx_v_fsn); __pyx_t_4 = (!__pyx_t_3); if (!__pyx_t_4) { } else { __pyx_t_2 = __pyx_t_4; goto __pyx_L4_bool_binop_done; } __pyx_t_4 = __Pyx_TypeCheck(__pyx_v_fsn, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); __pyx_t_2 = __pyx_t_4; __pyx_L4_bool_binop_done:; if (unlikely(__pyx_t_2)) { /* … */ }
+13467: raise TypeError('"fsn" must be a non-negative int.')
__pyx_t_6 = NULL;
__pyx_t_7 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_fsn_must_be_a_non_negative_int};
__pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13467, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
__Pyx_Raise(__pyx_t_5, 0, 0, 0);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__PYX_ERR(0, 13467, __pyx_L1_error)
+13468: if fsn < 0:
__pyx_t_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, 13468, __pyx_L1_error) if (unlikely(__pyx_t_2)) { /* … */ }
+13469: raise ValueError('"fsn" must be a non-negative int.')
__pyx_t_6 = NULL;
__pyx_t_7 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_fsn_must_be_a_non_negative_int};
__pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13469, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
__Pyx_Raise(__pyx_t_5, 0, 0, 0);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__PYX_ERR(0, 13469, __pyx_L1_error)
+13470: if not isinstance(timeout_millis, int) or isinstance(timeout_millis, bool):
__pyx_t_4 = PyLong_Check(__pyx_v_timeout_millis); __pyx_t_3 = (!__pyx_t_4); if (!__pyx_t_3) { } else { __pyx_t_2 = __pyx_t_3; goto __pyx_L8_bool_binop_done; } __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_timeout_millis, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); __pyx_t_2 = __pyx_t_3; __pyx_L8_bool_binop_done:; if (unlikely(__pyx_t_2)) { /* … */ }
+13471: raise TypeError('"timeout_millis" must be a non-negative int.')
__pyx_t_6 = NULL;
__pyx_t_7 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_timeout_millis_must_be_a_non_ne};
__pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13471, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
__Pyx_Raise(__pyx_t_5, 0, 0, 0);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__PYX_ERR(0, 13471, __pyx_L1_error)
+13472: if timeout_millis < 0:
__pyx_t_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, 13472, __pyx_L1_error) if (unlikely(__pyx_t_2)) { /* … */ }
+13473: raise ValueError('"timeout_millis" must be a non-negative int.')
__pyx_t_6 = NULL;
__pyx_t_7 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_timeout_millis_must_be_a_non_ne};
__pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13473, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
__Pyx_Raise(__pyx_t_5, 0, 0, 0);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__PYX_ERR(0, 13473, __pyx_L1_error)
+13474: c_fsn = fsn
__pyx_t_8 = __Pyx_PyLong_As_uint64_t(__pyx_v_fsn); if (unlikely((__pyx_t_8 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 13474, __pyx_L1_error) __pyx_v_c_fsn = __pyx_t_8;
+13475: c_timeout_millis = timeout_millis
__pyx_t_8 = __Pyx_PyLong_As_uint64_t(__pyx_v_timeout_millis); if (unlikely((__pyx_t_8 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 13475, __pyx_L1_error) __pyx_v_c_timeout_millis = __pyx_t_8;
13476:
13477: # Fast path: the completion watermark may already cover ``fsn``.
+13478: if not line_sender_qwpws_acked_fsn(self._impl, &acked, &err):
__pyx_t_2 = (!line_sender_qwpws_acked_fsn(__pyx_v_self->_impl, (&__pyx_v_acked), (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
+13479: raise c_err_to_py(err)
__pyx_t_5 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13479, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __PYX_ERR(0, 13479, __pyx_L1_error)
+13480: if acked.has_value and acked.value >= c_fsn:
__pyx_t_3 = (__pyx_v_acked.has_value != 0);
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L13_bool_binop_done;
}
__pyx_t_3 = (__pyx_v_acked.value >= __pyx_v_c_fsn);
__pyx_t_2 = __pyx_t_3;
__pyx_L13_bool_binop_done:;
if (__pyx_t_2) {
/* … */
}
+13481: return True
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(Py_True);
__pyx_r = Py_True;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
13482:
13483: # `line_sender_qwpws_wait` drains every frame published so far (a
13484: # superset of ``fsn``) up to the "ok" ack level. The no-progress
13485: # deadline (`timeout_millis`; 0 == wait indefinitely) surfaces as a
13486: # `line_sender_error_failover_retry`, which we translate back into the
13487: # historical ``reached == False`` return rather than raising.
+13488: cdef bint outer_in_flight = self._enter_native()
__pyx_v_outer_in_flight = __pyx_f_7questdb_7_client_6Sender__enter_native(__pyx_v_self);
+13489: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+13490: ok = line_sender_qwpws_wait(
__pyx_v_ok = line_sender_qwpws_wait(__pyx_v_self->_impl, qwpws_ack_level_ok, __pyx_v_c_timeout_millis, (&__pyx_v_err));
13491: self._impl,
13492: qwpws_ack_level.qwpws_ack_level_ok,
13493: c_timeout_millis,
13494: &err)
+13495: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+13496: self._exit_native(outer_in_flight)
__pyx_f_7questdb_7_client_6Sender__exit_native(__pyx_v_self, __pyx_v_outer_in_flight);
+13497: if not ok:
__pyx_t_2 = (!__pyx_v_ok);
if (__pyx_t_2) {
/* … */
}
+13498: if line_sender_error_get_code(err) != \
__pyx_t_2 = (line_sender_error_get_code(__pyx_v_err) != line_sender_error_failover_retry);
if (unlikely(__pyx_t_2)) {
/* … */
}
13499: line_sender_error_failover_retry:
+13500: raise c_err_to_py(err)
__pyx_t_5 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13500, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __PYX_ERR(0, 13500, __pyx_L1_error)
+13501: line_sender_error_free(err)
line_sender_error_free(__pyx_v_err);
+13502: err = NULL
__pyx_v_err = NULL;
13503:
13504: # Re-read the watermark: the wait either drained ``fsn`` or expired
13505: # with no progress; the current ack level is the answer.
+13506: if not line_sender_qwpws_acked_fsn(self._impl, &acked, &err):
__pyx_t_2 = (!line_sender_qwpws_acked_fsn(__pyx_v_self->_impl, (&__pyx_v_acked), (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
+13507: raise c_err_to_py(err)
__pyx_t_5 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13507, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __PYX_ERR(0, 13507, __pyx_L1_error)
+13508: _oidc_raise_unscheduled_main()
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13508, __pyx_L1_error)
+13509: return bool(acked.has_value and acked.value >= c_fsn)
__pyx_t_6 = NULL;
if (__pyx_v_acked.has_value) {
} else {
__pyx_t_10 = __Pyx_PyLong_From_bool(__pyx_v_acked.has_value); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 13509, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_9 = __pyx_t_10;
__pyx_t_10 = 0;
goto __pyx_L18_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_acked.value >= __pyx_v_c_fsn);
__pyx_t_10 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 13509, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_9 = __pyx_t_10;
__pyx_t_10 = 0;
__pyx_L18_bool_binop_done:;
__pyx_t_7 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_9};
__pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13509, __pyx_L1_error)
__Pyx_GOTREF((PyObject *)__pyx_t_5);
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = ((PyObject *)__pyx_t_5);
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_5 = 0;
goto __pyx_L0;
13510:
+13511: def drive_once(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_41drive_once(PyObject *__pyx_v_self, #if CYTHON_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_40drive_once, "\n Drive one QWP/WebSocket progress step for manual progress senders.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_41drive_once = {"drive_once", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_41drive_once, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_40drive_once}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_41drive_once(PyObject *__pyx_v_self, #if CYTHON_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_40drive_once(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_40drive_once(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) { struct line_sender_error *__pyx_v_err; PyThreadState *__pyx_v_gs; bool __pyx_v_progressed; int __pyx_v_ok; int __pyx_v_outer_in_flight; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("questdb._client.Sender.drive_once", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_41drive_once, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_drive_once, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[239])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 13511, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_drive_once, __pyx_t_18) < (0)) __PYX_ERR(0, 13511, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
13512: """
13513: Drive one QWP/WebSocket progress step for manual progress senders.
13514: """
+13515: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+13516: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+13517: cdef cbool progressed = False
__pyx_v_progressed = 0;
+13518: cdef bint ok = False
__pyx_v_ok = 0;
13519:
+13520: self._check_qwp_ws('drive_once')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_drive_once); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13520, __pyx_L1_error)
+13521: cdef bint outer_in_flight = self._enter_native()
__pyx_v_outer_in_flight = __pyx_f_7questdb_7_client_6Sender__enter_native(__pyx_v_self);
+13522: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+13523: ok = line_sender_qwpws_drive_once(self._impl, &progressed, &err)
__pyx_v_ok = line_sender_qwpws_drive_once(__pyx_v_self->_impl, (&__pyx_v_progressed), (&__pyx_v_err));
+13524: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+13525: self._exit_native(outer_in_flight)
__pyx_f_7questdb_7_client_6Sender__exit_native(__pyx_v_self, __pyx_v_outer_in_flight);
+13526: if not ok:
__pyx_t_2 = (!__pyx_v_ok);
if (unlikely(__pyx_t_2)) {
/* … */
}
+13527: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13527, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 13527, __pyx_L1_error)
+13528: _oidc_raise_unscheduled_main()
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13528, __pyx_L1_error)
+13529: return bool(progressed)
__pyx_t_4 = NULL; __pyx_t_5 = __Pyx_PyLong_From_bool(__pyx_v_progressed); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13529, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_5}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13529, __pyx_L1_error) __Pyx_GOTREF((PyObject *)__pyx_t_3); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = ((PyObject *)__pyx_t_3); } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
13530:
+13531: def poll_error(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_43poll_error(PyObject *__pyx_v_self, #if CYTHON_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_42poll_error, "\n Poll the next structured QWP/WebSocket diagnostic.\n\n Raises :class:`QuestDBError <questdb.QuestDBError>`\n (``InvalidApiCall``) when called from this sender\047s own\n ``error_handler`` or ``connection_listener``, or from any thread\n while this sender is inside a native call such as\n :func:`Sender.flush`.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_43poll_error = {"poll_error", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_43poll_error, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_42poll_error}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_43poll_error(PyObject *__pyx_v_self, #if CYTHON_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_42poll_error(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_42poll_error(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) { struct line_sender_error *__pyx_v_err; struct line_sender_qwpws_error *__pyx_v_qwp_err; struct line_sender_qwpws_error_view __pyx_v_view; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("questdb._client.Sender.poll_error", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_43poll_error, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_poll_error, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[240])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 13531, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_poll_error, __pyx_t_18) < (0)) __PYX_ERR(0, 13531, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
13532: """
13533: Poll the next structured QWP/WebSocket diagnostic.
13534:
13535: Raises :class:`QuestDBError <questdb.QuestDBError>`
13536: (``InvalidApiCall``) when called from this sender's own
13537: ``error_handler`` or ``connection_listener``, or from any thread
13538: while this sender is inside a native call such as
13539: :func:`Sender.flush`.
13540: """
+13541: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+13542: cdef line_sender_qwpws_error* qwp_err = NULL
__pyx_v_qwp_err = NULL;
13543: cdef line_sender_qwpws_error_view view
13544:
+13545: self._check_qwp_ws('poll_error')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_poll_error); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13545, __pyx_L1_error)
+13546: if not line_sender_qwpws_poll_error(self._impl, &qwp_err, &err):
__pyx_t_2 = (!line_sender_qwpws_poll_error(__pyx_v_self->_impl, (&__pyx_v_qwp_err), (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
+13547: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13547, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 13547, __pyx_L1_error)
+13548: if qwp_err == NULL:
__pyx_t_2 = (__pyx_v_qwp_err == NULL);
if (__pyx_t_2) {
/* … */
}
+13549: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+13550: try:
/*try:*/ {
+13551: view = line_sender_qwpws_error_get_view(qwp_err)
__pyx_v_view = line_sender_qwpws_error_get_view(__pyx_v_qwp_err);
+13552: return _sender_error_from_raw(c_sender_error_view_to_raw(view))
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_sender_error_from_raw); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13552, __pyx_L6_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_6 = __pyx_f_7questdb_7_client_c_sender_error_view_to_raw(__pyx_v_view); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13552, __pyx_L6_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_5))) {
__pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
assert(__pyx_t_4);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
__Pyx_INCREF(__pyx_t_4);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_6};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13552, __pyx_L6_error)
__Pyx_GOTREF(__pyx_t_3);
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_3;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_3 = 0;
goto __pyx_L5_return;
}
13553: finally:
+13554: line_sender_qwpws_error_free(qwp_err)
/*finally:*/ {
__pyx_L6_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_ExceptionSwap(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
if ( unlikely(__Pyx_GetException(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13) < 0)) __Pyx_ErrFetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__pyx_t_8 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_10 = __pyx_filename;
{
line_sender_qwpws_error_free(__pyx_v_qwp_err);
}
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_ExceptionReset(__pyx_t_14, __pyx_t_15, __pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ErrRestore(__pyx_t_11, __pyx_t_12, __pyx_t_13);
__pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
__pyx_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_10;
goto __pyx_L1_error;
}
__pyx_L5_return: {
__pyx_t_16 = __pyx_r;
__pyx_r = 0;
line_sender_qwpws_error_free(__pyx_v_qwp_err);
__pyx_r = __pyx_t_16;
__pyx_t_16 = 0;
goto __pyx_L0;
}
}
13555:
+13556: def error_events_dropped(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_45error_events_dropped(PyObject *__pyx_v_self, #if CYTHON_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_44error_events_dropped, "\n Number of QWP/WebSocket diagnostics dropped from the bounded ring.\n\n Raises :class:`QuestDBError <questdb.QuestDBError>`\n (``InvalidApiCall``) when called from this sender\047s own\n ``error_handler`` or ``connection_listener``, or from any thread\n while this sender is inside a native call such as\n :func:`Sender.flush`.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_45error_events_dropped = {"error_events_dropped", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_45error_events_dropped, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_44error_events_dropped}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_45error_events_dropped(PyObject *__pyx_v_self, #if CYTHON_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_44error_events_dropped(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_44error_events_dropped(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) { struct line_sender_error *__pyx_v_err; uint64_t __pyx_v_dropped; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client.Sender.error_events_dropped", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_45error_events_dropped, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_error_events_dropped, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[241])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 13556, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_error_events_dropped, __pyx_t_18) < (0)) __PYX_ERR(0, 13556, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
13557: """
13558: Number of QWP/WebSocket diagnostics dropped from the bounded ring.
13559:
13560: Raises :class:`QuestDBError <questdb.QuestDBError>`
13561: (``InvalidApiCall``) when called from this sender's own
13562: ``error_handler`` or ``connection_listener``, or from any thread
13563: while this sender is inside a native call such as
13564: :func:`Sender.flush`.
13565: """
+13566: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+13567: cdef uint64_t dropped = 0
__pyx_v_dropped = 0;
13568:
+13569: self._check_qwp_ws('error_events_dropped')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_error_events_dropped); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13569, __pyx_L1_error)
+13570: if not line_sender_qwpws_errors_dropped(self._impl, &dropped, &err):
__pyx_t_2 = (!line_sender_qwpws_errors_dropped(__pyx_v_self->_impl, (&__pyx_v_dropped), (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
+13571: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13571, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 13571, __pyx_L1_error)
+13572: return dropped
__pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_dropped); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13572, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
13573:
+13574: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_25connection_events_dropped_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Sender_25connection_events_dropped_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_6Sender_25connection_events_dropped___get__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Sender_25connection_events_dropped___get__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Sender.connection_events_dropped.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
13575: def connection_events_dropped(self) -> int:
13576: """
13577: Total connection events discarded by the listener inbox's
13578: drop-oldest policy. ``0`` when no listener is registered.
13579:
13580: Raises :class:`QuestDBError <questdb.QuestDBError>`
13581: (``InvalidApiCall``) when read from any thread while this sender is
13582: inside a native call such as :func:`Sender.flush`.
13583: """
+13584: self._check_not_in_own_callback(
__pyx_t_2.__pyx_n = 1;
__pyx_t_2.allow_idle_callback = 1;
__pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_connection_events_dropped, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13584, __pyx_L1_error)
13585: 'connection_events_dropped', allow_idle_callback=True)
+13586: if self._impl == NULL:
__pyx_t_3 = (__pyx_v_self->_impl == NULL);
if (__pyx_t_3) {
/* … */
}
+13587: return 0
{
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;
+13588: return line_sender_connection_events_dropped(self._impl)
__pyx_t_4 = __Pyx_PyLong_From_uint64_t(line_sender_connection_events_dropped(__pyx_v_self->_impl)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13588, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_4; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_4 = 0; goto __pyx_L0;
13589:
+13590: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_27connection_events_delivered_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Sender_27connection_events_delivered_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_6Sender_27connection_events_delivered___get__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Sender_27connection_events_delivered___get__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Sender.connection_events_delivered.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
13591: def connection_events_delivered(self) -> int:
13592: """
13593: Total connection events delivered to the listener. ``0`` when no
13594: listener is registered.
13595:
13596: Raises :class:`QuestDBError <questdb.QuestDBError>`
13597: (``InvalidApiCall``) when read from any thread while this sender is
13598: inside a native call such as :func:`Sender.flush`.
13599: """
+13600: self._check_not_in_own_callback(
__pyx_t_2.__pyx_n = 1;
__pyx_t_2.allow_idle_callback = 1;
__pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_connection_events_delivered, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13600, __pyx_L1_error)
13601: 'connection_events_delivered', allow_idle_callback=True)
+13602: if self._impl == NULL:
__pyx_t_3 = (__pyx_v_self->_impl == NULL);
if (__pyx_t_3) {
/* … */
}
+13603: return 0
{
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;
+13604: return line_sender_connection_events_delivered(self._impl)
__pyx_t_4 = __Pyx_PyLong_From_uint64_t(line_sender_connection_events_delivered(__pyx_v_self->_impl)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13604, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_4; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_4 = 0; goto __pyx_L0;
13605:
+13606: def close_drain(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_47close_drain(PyObject *__pyx_v_self, #if CYTHON_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_46close_drain, "\n Stop accepting new QWP/WebSocket publications and wait for already\n published frames to resolve.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_47close_drain = {"close_drain", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_47close_drain, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_46close_drain}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_47close_drain(PyObject *__pyx_v_self, #if CYTHON_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_46close_drain(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_46close_drain(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) { struct line_sender_error *__pyx_v_err; PyThreadState *__pyx_v_gs; int __pyx_v_ok; int __pyx_v_outer_in_flight; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client.Sender.close_drain", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_47close_drain, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_close_drain, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[242])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 13606, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_close_drain, __pyx_t_18) < (0)) __PYX_ERR(0, 13606, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
13607: """
13608: Stop accepting new QWP/WebSocket publications and wait for already
13609: published frames to resolve.
13610: """
+13611: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+13612: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+13613: cdef bint ok = False
__pyx_v_ok = 0;
13614:
+13615: self._check_qwp_ws('close_drain')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_close_drain); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13615, __pyx_L1_error)
13616: # Draining stops the sender accepting anything further, so a
13617: # row still being written can never be finished or sent, and
13618: # the complete rows buffered before it go with it -- after
13619: # which `close(flush=True)` reports success having sent
13620: # nothing. Refused while a row is part-way through, like every
13621: # other call that ends the buffer.
+13622: if self._buffer is not None:
__pyx_t_2 = (((PyObject *)__pyx_v_self->_buffer) != Py_None);
if (__pyx_t_2) {
/* … */
}
+13623: self._buffer._check_not_in_row('close_drain')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self->_buffer, __pyx_mstate_global->__pyx_n_u_close_drain, NULL); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13623, __pyx_L1_error)
+13624: cdef bint outer_in_flight = self._enter_native()
__pyx_v_outer_in_flight = __pyx_f_7questdb_7_client_6Sender__enter_native(__pyx_v_self);
+13625: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+13626: ok = line_sender_qwpws_close_drain(self._impl, &err)
__pyx_v_ok = line_sender_qwpws_close_drain(__pyx_v_self->_impl, (&__pyx_v_err));
+13627: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+13628: self._exit_native(outer_in_flight)
__pyx_f_7questdb_7_client_6Sender__exit_native(__pyx_v_self, __pyx_v_outer_in_flight);
+13629: if not ok:
__pyx_t_2 = (!__pyx_v_ok);
if (unlikely(__pyx_t_2)) {
/* … */
}
+13630: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13630, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 13630, __pyx_L1_error)
+13631: _oidc_raise_unscheduled_main()
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13631, __pyx_L1_error)
13632:
+13633: cdef _close(self, bint dealloc=False):
static PyObject *__pyx_f_7questdb_7_client_6Sender__close(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, struct __pyx_opt_args_7questdb_7_client_6Sender__close *__pyx_optional_args) {
int __pyx_v_dealloc = ((int)0);
PyThreadState *__pyx_v_gs;
struct line_sender *__pyx_v_impl;
struct line_sender_opts *__pyx_v_opts;
struct line_sender_opts *__pyx_v_qwp_ws_opts;
PyObject *__pyx_r = NULL;
if (__pyx_optional_args) {
if (__pyx_optional_args->__pyx_n > 0) {
__pyx_v_dealloc = __pyx_optional_args->dealloc;
}
}
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client.Sender._close", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
struct __pyx_opt_args_7questdb_7_client_6Sender__close {
int __pyx_n;
int dealloc;
};
+13634: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+13635: cdef line_sender* impl = self._impl
__pyx_t_1 = __pyx_v_self->_impl; __pyx_v_impl = __pyx_t_1;
+13636: cdef line_sender_opts* opts = self._opts
__pyx_t_2 = __pyx_v_self->_opts; __pyx_v_opts = __pyx_t_2;
+13637: cdef line_sender_opts* qwp_ws_opts = self._qwp_ws_opts
__pyx_t_2 = __pyx_v_self->_qwp_ws_opts; __pyx_v_qwp_ws_opts = __pyx_t_2;
+13638: self._impl = NULL
__pyx_v_self->_impl = NULL;
+13639: self._opts = NULL
__pyx_v_self->_opts = NULL;
+13640: self._qwp_ws_opts = NULL
__pyx_v_self->_qwp_ws_opts = NULL;
+13641: if impl != NULL or opts != NULL or qwp_ws_opts != NULL:
__pyx_t_4 = (__pyx_v_impl != NULL);
if (!__pyx_t_4) {
} else {
__pyx_t_3 = __pyx_t_4;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_4 = (__pyx_v_opts != NULL);
if (!__pyx_t_4) {
} else {
__pyx_t_3 = __pyx_t_4;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_4 = (__pyx_v_qwp_ws_opts != NULL);
__pyx_t_3 = __pyx_t_4;
__pyx_L4_bool_binop_done:;
if (__pyx_t_3) {
/* … */
}
+13642: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+13643: if impl != NULL:
__pyx_t_3 = (__pyx_v_impl != NULL);
if (__pyx_t_3) {
/* … */
}
+13644: line_sender_close(impl)
line_sender_close(__pyx_v_impl);
+13645: line_sender_opts_free(opts)
line_sender_opts_free(__pyx_v_opts);
+13646: line_sender_opts_free(qwp_ws_opts)
line_sender_opts_free(__pyx_v_qwp_ws_opts);
+13647: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+13648: _release_callback_refs(self._cb_refs_key)
__pyx_t_5 = __pyx_f_7questdb_7_client__release_callback_refs(__pyx_v_self->_cb_refs_key); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13648, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+13649: self._cb_refs_key = 0
__pyx_v_self->_cb_refs_key = 0;
+13650: self._buffer = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_buffer); __Pyx_DECREF_SET(__pyx_v_self->_buffer, ((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None));
+13651: self._dispatch_context = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_dispatch_context); __Pyx_DECREF_SET(__pyx_v_self->_dispatch_context, Py_None);
+13652: self._error_handler = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_error_handler); __Pyx_DECREF_SET(__pyx_v_self->_error_handler, Py_None);
+13653: self._connection_listener = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_connection_listener); __Pyx_DECREF_SET(__pyx_v_self->_connection_listener, Py_None);
+13654: self._oidc_auth = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_oidc_auth); __Pyx_DECREF_SET(__pyx_v_self->_oidc_auth, Py_None);
13655: # Normal close must release the holder even if the sender stays alive.
13656: # During __dealloc__, attribute access would resurrect a dying PyPy
13657: # wrapper; Cython releases the slot and the instance dictionary after
13658: # we return.
+13659: if not dealloc:
__pyx_t_3 = (!__pyx_v_dealloc);
if (__pyx_t_3) {
/* … */
}
+13660: _sender_hold_bearer(self, None)
__pyx_t_6 = __pyx_f_7questdb_7_client__sender_hold_bearer(__pyx_v_self, Py_None); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13660, __pyx_L1_error)
+13661: if self._slot_id != -1:
__pyx_t_3 = (__pyx_v_self->_slot_id != -1L);
if (__pyx_t_3) {
/* … */
}
+13662: qdb_active_senders_track_closed(<uint32_t>self._slot_id)
qdb_active_senders_track_closed(((uint32_t)__pyx_v_self->_slot_id));
+13663: self._slot_id = -1
__pyx_v_self->_slot_id = -1L;
13664:
+13665: cpdef close(self, bint flush=True):
static PyObject *__pyx_pw_7questdb_7_client_6Sender_49close(PyObject *__pyx_v_self,
#if CYTHON_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 CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
#endif
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13665, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7questdb_7_client_6Sender_49close)) {
__pyx_t_3 = NULL;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_4 = __pyx_t_1;
__pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_v_flush); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13665, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_6 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_6 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13665, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
{
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_49close(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_48close, "\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_49close = {"close", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_49close, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_48close};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_49close(PyObject *__pyx_v_self,
#if CYTHON_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, 13665, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13665, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "close", 0) < (0)) __PYX_ERR(0, 13665, __pyx_L3_error)
} else {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13665, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
}
if (values[0]) {
__pyx_v_flush = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_flush == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13665, __pyx_L3_error)
} else {
__pyx_v_flush = ((int)1);
}
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("close", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 13665, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.Sender.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_6Sender_48close(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_flush);
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Sender_48close(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, int __pyx_v_flush) {
PyObject *__pyx_r = NULL;
__pyx_t_2.__pyx_n = 1;
__pyx_t_2.flush = __pyx_v_flush;
__pyx_t_1 = __pyx_vtabptr_7questdb_7_client_Sender->close(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13665, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
{
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_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_49close, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_close, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[243])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 13665, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
#endif
__Pyx_CyFunction_SetDefaultsTuple(__pyx_t_18, __pyx_mstate_global->__pyx_tuple[96]);
if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_close, __pyx_t_18) < (0)) __PYX_ERR(0, 13665, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
/* … */
{
PyObject* __pyx_temp[1] = {Py_True};
__pyx_mstate_global->__pyx_tuple[96] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[96])) __PYX_ERR(0, 13665, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[96]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[96]);
/* … */
struct __pyx_opt_args_7questdb_7_client_6Sender_close {
int __pyx_n;
int flush;
};
13666: """
13667: Disconnect.
13668:
13669: This method is idempotent and can be called repeatedly.
13670:
13671: Once a sender is closed, it can't be re-used.
13672:
13673: :param bool flush: If ``True``, flush the internal buffer before closing.
13674: For QWP/WebSocket, this also drains already-published frames before
13675: closing.
13676:
13677: Refused while a row is part-way through the sender's **internal**
13678: buffer, which is the buffer this call flushes. A buffer of your
13679: own from :func:`Sender.new_buffer` is neither flushed nor checked
13680: here: the sender is never told which buffers exist, so it cannot
13681: refuse on their behalf. Such a buffer keeps every byte written
13682: into it, but a sender closed out from under it can no longer send
13683: it — finish the row and flush it before closing.
13684: """
+13685: self._check_not_in_own_callback('close')
__pyx_t_7 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_close, NULL); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13685, __pyx_L1_error)
13686: # The internal buffer is the one this call flushes, so it is the
13687: # one held to "no row part-way through" -- the same rule
13688: # `flush(buffer)` applies to whichever buffer it was handed.
13689: # Refused outright rather than by way of the flush below:
13690: # `_close()` runs from the `finally` whatever the flush does, so
13691: # a refusal there would still close the sender and take the
13692: # already-buffered rows with it. With `flush=False` there is no
13693: # flush to refuse at all.
+13694: if self._buffer is not None:
__pyx_t_8 = (((PyObject *)__pyx_v_self->_buffer) != Py_None);
if (__pyx_t_8) {
/* … */
}
+13695: self._buffer._check_not_in_row('close')
__pyx_t_7 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self->_buffer, __pyx_mstate_global->__pyx_n_u_close, NULL); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13695, __pyx_L1_error)
+13696: try:
/*try:*/ {
+13697: if (flush and (self._impl != NULL) and
if (__pyx_v_flush) {
} else {
__pyx_t_8 = __pyx_v_flush;
goto __pyx_L8_bool_binop_done;
}
__pyx_t_9 = (__pyx_v_self->_impl != NULL);
if (__pyx_t_9) {
} else {
__pyx_t_8 = __pyx_t_9;
goto __pyx_L8_bool_binop_done;
}
/* … */
if (__pyx_t_8) {
/* … */
}
}
+13698: (not line_sender_must_close(self._impl))):
__pyx_t_9 = (!line_sender_must_close(__pyx_v_self->_impl));
__pyx_t_8 = __pyx_t_9;
__pyx_L8_bool_binop_done:;
+13699: self.flush(None, True)
__pyx_t_10.__pyx_n = 2;
__pyx_t_10.buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None);
__pyx_t_10.clear = 1;
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_self->__pyx_vtab)->flush(__pyx_v_self, 0, &__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13699, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+13700: if _is_qwp_ws_protocol(self._c_protocol):
__pyx_t_8 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_8 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13700, __pyx_L5_error) if (__pyx_t_8) { /* … */ }
+13701: self.close_drain()
__pyx_t_2 = ((PyObject *)__pyx_v_self);
__Pyx_INCREF(__pyx_t_2);
__pyx_t_6 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_close_drain, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13701, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
13702: finally:
+13703: self._close()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_self->__pyx_vtab)->_close(__pyx_v_self, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13703, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L6;
}
__pyx_L5_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_19);
__pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
{
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_self->__pyx_vtab)->_close(__pyx_v_self, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13703, __pyx_L13_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
}
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
__pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
goto __pyx_L1_error;
__pyx_L13_error:;
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
goto __pyx_L1_error;
}
__pyx_L6:;
}
13704:
+13705: def __exit__(self, exc_type, exc_val, exc_tb):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_51__exit__(PyObject *__pyx_v_self, #if CYTHON_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_50__exit__, "\n Flush pending and disconnect at the end of a ``with`` block.\n\n If the ``with`` block raises an exception, any pending data will\n *NOT* be flushed.\n\n This is implemented by calling :func:`Sender.close`.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_51__exit__ = {"__exit__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_51__exit__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_50__exit__}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_51__exit__(PyObject *__pyx_v_self, #if CYTHON_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, 13705, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 3: values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 13705, __pyx_L3_error) CYTHON_FALLTHROUGH; case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 13705, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13705, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__exit__", 0) < (0)) __PYX_ERR(0, 13705, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 3; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, i); __PYX_ERR(0, 13705, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13705, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 13705, __pyx_L3_error) values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 13705, __pyx_L3_error) } __pyx_v_exc_type = values[0]; __pyx_v_exc_val = values[1]; __pyx_v_exc_tb = values[2]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 13705, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Sender.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_6Sender_50__exit__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_exc_type, __pyx_v_exc_val, __pyx_v_exc_tb); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_50__exit__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, PyObject *__pyx_v_exc_type, CYTHON_UNUSED PyObject *__pyx_v_exc_val, CYTHON_UNUSED PyObject *__pyx_v_exc_tb) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("questdb._client.Sender.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_51__exit__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender___exit, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[244])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 13705, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_exit, __pyx_t_18) < (0)) __PYX_ERR(0, 13705, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
13706: """
13707: Flush pending and disconnect at the end of a ``with`` block.
13708:
13709: If the ``with`` block raises an exception, any pending data will
13710: *NOT* be flushed.
13711:
13712: This is implemented by calling :func:`Sender.close`.
13713: """
+13714: self.close(not exc_type)
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_exc_type); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 13714, __pyx_L1_error) __pyx_t_3.__pyx_n = 1; __pyx_t_3.flush = (!__pyx_t_1); __pyx_t_2 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0, &__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13714, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
13715:
+13716: def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_7questdb_7_client_6Sender_53__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7questdb_7_client_6Sender_53__dealloc__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_pf_7questdb_7_client_6Sender_52__dealloc__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
}
static void __pyx_pf_7questdb_7_client_6Sender_52__dealloc__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_WriteUnraisable("questdb._client.Sender.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
+13717: self._close(dealloc=True)
__pyx_t_2.__pyx_n = 1; __pyx_t_2.dealloc = 1; __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_self->__pyx_vtab)->_close(__pyx_v_self, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13717, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+13718: free(self._last_flush_ms)
free(__pyx_v_self->_last_flush_ms);
13719:
13720:
+13721: cdef void_int _sender_hold_bearer(Sender sender, object holder) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__sender_hold_bearer(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender, PyObject *__pyx_v_holder) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client._sender_hold_bearer", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
13722: """Keep `holder`, the sender's bearer-token holder, alive with `sender`,
13723: or release it with `None`.
13724:
13725: CPython keeps it in a typed slot, which its cycle collector traverses.
13726: PyPy cannot see references held in cpyext fields, so there it goes in the
13727: instance dictionary instead, which keeps a provider that owns its own
13728: sender collectable.
13729: """
+13730: if CYTHON_COMPILING_IN_PYPY:
__pyx_t_1 = (CYTHON_COMPILING_IN_PYPY != 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+13731: PyObject_GenericSetAttr(sender, '_bearer_token_provider', holder)
__pyx_t_2 = PyObject_GenericSetAttr(((PyObject *)__pyx_v_sender), __pyx_mstate_global->__pyx_n_u_bearer_token_provider, __pyx_v_holder); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 13731, __pyx_L1_error)
13732: else:
+13733: sender._bearer_holder = holder
/*else*/ {
__Pyx_INCREF(__pyx_v_holder);
__Pyx_GIVEREF(__pyx_v_holder);
__Pyx_GOTREF(__pyx_v_sender->_bearer_holder);
__Pyx_DECREF_SET(__pyx_v_sender->_bearer_holder, __pyx_v_holder);
}
__pyx_L3:;
+13734: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
13735:
13736:
+13737: cdef object _sender_bearer_holder(Sender sender):
static PyObject *__pyx_f_7questdb_7_client__sender_bearer_holder(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client._sender_bearer_holder", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
13738: """The holder `_sender_hold_bearer` keeps alive with `sender`, or None."""
+13739: if CYTHON_COMPILING_IN_PYPY:
__pyx_t_1 = (CYTHON_COMPILING_IN_PYPY != 0);
if (__pyx_t_1) {
/* … */
}
+13740: try:
{
/*try:*/ {
/* … */
}
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L1_error;
__pyx_L8_try_return:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L0;
__pyx_L7_except_return:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L0;
}
+13741: return PyObject_GenericGetAttr(sender, '_bearer_token_provider')
__pyx_t_5 = PyObject_GenericGetAttr(((PyObject *)__pyx_v_sender), __pyx_mstate_global->__pyx_n_u_bearer_token_provider); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13741, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_5); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_5; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_5 = 0; goto __pyx_L8_try_return;
+13742: except AttributeError:
__pyx_t_6 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_AttributeError)))); if (__pyx_t_6) { __Pyx_ErrRestore(0,0,0);
+13743: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L7_except_return;
}
goto __pyx_L6_except_error;
+13744: return sender._bearer_holder
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_sender->_bearer_holder);
__pyx_r = __pyx_v_sender->_bearer_holder;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
13745:
13746:
+13747: cdef inline void _sender_drop_unused_dict(Sender sender) noexcept:
static CYTHON_INLINE void __pyx_f_7questdb_7_client__sender_drop_unused_dict(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender) {
/* … */
/* function exit code */
}
13748: """Drop the instance dictionary that reading `sender.__dict__` recreates.
13749:
13750: `__cinit__` drops the one Cython creates, but any read of `__dict__` --
13751: `dir()`, `vars()`, `inspect.getattr_static()`, an IDE completing
13752: `sender.` -- makes a new one, and while it exists CPython cannot cache
13753: the method lookup of `sender.row(...)`: every later row pays for the
13754: generic lookup. `__dir__` drops it at once, and `_flush_c_buf` drops one
13755: any other read left.
13756:
13757: On CPython the client stores nothing in a `Sender`'s own dictionary --
13758: `__setattr__` refuses new names, and the bearer-token holder has a typed
13759: slot -- and only an empty one is dropped. A subclass's dictionary holds
13760: its own attributes and is left alone. PyPy keeps the dictionary.
13761: """
+13762: if type(sender) is Sender:
__pyx_t_1 = (((PyObject *)Py_TYPE(((PyObject *)__pyx_v_sender))) == ((PyObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender));
if (__pyx_t_1) {
/* … */
}
+13763: qdb_drop_empty_instance_dict(sender)
qdb_drop_empty_instance_dict(((PyObject *)__pyx_v_sender));
13764:
13765:
+13766: def _debug_instance_dict_is_set(object obj):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_121_debug_instance_dict_is_set(PyObject *__pyx_self, #if CYTHON_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_120_debug_instance_dict_is_set, "Internal test seam: whether `obj` carries an instance dictionary, read\n without creating one as `obj.__dict__` does. `None` when its type keeps\n the dictionary elsewhere."); static PyMethodDef __pyx_mdef_7questdb_7_client_121_debug_instance_dict_is_set = {"_debug_instance_dict_is_set", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_121_debug_instance_dict_is_set, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_120_debug_instance_dict_is_set}; static PyObject *__pyx_pw_7questdb_7_client_121_debug_instance_dict_is_set(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_obj = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_debug_instance_dict_is_set (wrapper)", 0); #if !CYTHON_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_obj,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 13766, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13766, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_instance_dict_is_set", 0) < (0)) __PYX_ERR(0, 13766, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_instance_dict_is_set", 1, 1, 1, i); __PYX_ERR(0, 13766, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13766, __pyx_L3_error) } __pyx_v_obj = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_debug_instance_dict_is_set", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 13766, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client._debug_instance_dict_is_set", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_120_debug_instance_dict_is_set(__pyx_self, __pyx_v_obj); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_120_debug_instance_dict_is_set(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_obj) { int __pyx_v_state; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("questdb._client._debug_instance_dict_is_set", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_121_debug_instance_dict_is_set, 0, __pyx_mstate_global->__pyx_n_u_debug_instance_dict_is_set, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[247])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 13766, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_instance_dict_is_set, __pyx_t_18) < (0)) __PYX_ERR(0, 13766, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
13767: """Internal test seam: whether `obj` carries an instance dictionary, read
13768: without creating one as `obj.__dict__` does. `None` when its type keeps
13769: the dictionary elsewhere."""
+13770: cdef int state = qdb_instance_dict_is_set(obj)
__pyx_v_state = qdb_instance_dict_is_set(__pyx_v_obj);
+13771: return None if state < 0 else bool(state)
__pyx_t_2 = (__pyx_v_state < 0);
if (__pyx_t_2) {
__Pyx_INCREF(Py_None);
__pyx_t_1 = Py_None;
} else {
__pyx_t_4 = NULL;
__pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_state); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13771, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_5};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13771, __pyx_L1_error)
__Pyx_GOTREF((PyObject *)__pyx_t_3);
}
__pyx_t_1 = ((PyObject *)__pyx_t_3);
__pyx_t_3 = 0;
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_1;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_1 = 0;
goto __pyx_L0;
13772:
13773:
13774: # QWP/WebSocket row auto-flush, shared by a standalone `Sender` and a
13775: # `PooledSender` lease: each function takes both, exactly one of them set.
13776:
+13777: cdef void_int _qwp_row_add(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__qwp_row_add(CYTHON_UNUSED struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender, struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_pooled, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buf, PyObject *__pyx_v_table_name, PyObject *__pyx_v_symbols, PyObject *__pyx_v_columns, PyObject *__pyx_v_at) {
int __pyx_v_starts_batch;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client._qwp_row_add", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
return __pyx_r;
}
13778: Sender sender,
13779: PooledSender pooled,
13780: Buffer buf,
13781: str table_name,
13782: dict symbols,
13783: dict columns,
13784: object at) except -1:
13785: """
13786: Append a row, holding the rewind point just before it. A row whose
13787: values are all `None` writes nothing and leaves no rewind point.
13788: """
+13789: cdef bint starts_batch = line_sender_buffer_row_count(buf._impl) == 0
__pyx_v_starts_batch = (line_sender_buffer_row_count(__pyx_v_buf->_impl) == 0);
+13790: buf._row(False, table_name, symbols, columns, at, True)
__pyx_t_2.__pyx_n = 4;
__pyx_t_2.symbols = __pyx_v_symbols;
__pyx_t_2.columns = __pyx_v_columns;
__pyx_t_2.at = __pyx_v_at;
__pyx_t_2.keep_marker = 1;
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_Buffer *)__pyx_v_buf->__pyx_vtab)->_row(__pyx_v_buf, 0, __pyx_v_table_name, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13790, __pyx_L1_error)
+13791: if pooled is not None and starts_batch:
__pyx_t_4 = (((PyObject *)__pyx_v_pooled) != Py_None);
if (__pyx_t_4) {
} else {
__pyx_t_3 = __pyx_t_4;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_3 = __pyx_v_starts_batch;
__pyx_L4_bool_binop_done:;
if (__pyx_t_3) {
/* … */
}
+13792: pooled._batch_started_ms = line_sender_now_micros() // 1000
__pyx_v_pooled->_batch_started_ms = __Pyx_div_int64_t(line_sender_now_micros(), 0x3E8, 1);
13793:
13794:
+13795: cdef bint _qwp_row_due(
static int __pyx_f_7questdb_7_client__qwp_row_due(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender, struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_pooled, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buf, size_t *__pyx_v_hard_cap) {
struct __pyx_t_7questdb_7_client_auto_flush_mode_t *__pyx_v_mode;
int __pyx_v_bytes_dynamic;
int64_t __pyx_v_interval_start_ms;
bool __pyx_v_server_cap_known;
struct line_sender_error *__pyx_v_err;
int __pyx_v_ok;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client._qwp_row_due", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
13796: Sender sender,
13797: PooledSender pooled,
13798: Buffer buf,
13799: size_t* hard_cap) except -1:
13800: """
13801: Whether the row buffer is due for auto-flush, reporting the frame cap
13802: it plans for through `hard_cap` (see `_qwp_row_planning_cap`).
13803: """
13804: cdef auto_flush_mode_t* mode
13805: cdef bint bytes_dynamic
13806: cdef int64_t interval_start_ms
+13807: cdef cbool server_cap_known = False
__pyx_v_server_cap_known = 0;
+13808: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
13809: cdef bint ok
+13810: if pooled is not None:
__pyx_t_1 = (((PyObject *)__pyx_v_pooled) != Py_None);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+13811: mode = &pooled._handle._auto_flush_mode
__pyx_v_mode = (&__pyx_v_pooled->_handle->_auto_flush_mode);
+13812: if not mode.enabled:
__pyx_t_1 = (!__pyx_v_mode->enabled);
if (__pyx_t_1) {
/* … */
}
+13813: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+13814: bytes_dynamic = pooled._handle._auto_flush_bytes_dynamic
__pyx_t_1 = __pyx_v_pooled->_handle->_auto_flush_bytes_dynamic;
__pyx_v_bytes_dynamic = __pyx_t_1;
+13815: interval_start_ms = pooled._batch_started_ms
__pyx_t_2 = __pyx_v_pooled->_batch_started_ms;
__pyx_v_interval_start_ms = __pyx_t_2;
+13816: ok = qwp_sender_effective_frame_cap(
__pyx_v_ok = qwp_sender_effective_frame_cap(__pyx_v_pooled->_qwp, __pyx_v_hard_cap, (&__pyx_v_server_cap_known), (&__pyx_v_err));
13817: pooled._qwp, hard_cap, &server_cap_known, &err)
13818: else:
+13819: mode = &sender._auto_flush_mode
/*else*/ {
__pyx_v_mode = (&__pyx_v_sender->_auto_flush_mode);
+13820: if not mode.enabled:
__pyx_t_1 = (!__pyx_v_mode->enabled);
if (__pyx_t_1) {
/* … */
}
+13821: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+13822: if sender._impl == NULL:
__pyx_t_1 = (__pyx_v_sender->_impl == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+13823: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13823, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+13824: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13824, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13824, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_row_can_t_be_called_Sender_is_cl}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13823, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 13823, __pyx_L1_error)
13825: "row() can't be called: Sender is closed.")
+13826: bytes_dynamic = sender._auto_flush_bytes_dynamic
__pyx_t_1 = __pyx_v_sender->_auto_flush_bytes_dynamic;
__pyx_v_bytes_dynamic = __pyx_t_1;
+13827: interval_start_ms = sender._last_flush_ms[0]
__pyx_v_interval_start_ms = (__pyx_v_sender->_last_flush_ms[0]);
+13828: ok = line_sender_qwpws_effective_frame_cap(
__pyx_v_ok = line_sender_qwpws_effective_frame_cap(__pyx_v_sender->_impl, __pyx_v_hard_cap, (&__pyx_v_server_cap_known), (&__pyx_v_err)); } __pyx_L3:;
13829: sender._impl, hard_cap, &server_cap_known, &err)
+13830: if not ok:
__pyx_t_1 = (!__pyx_v_ok);
if (unlikely(__pyx_t_1)) {
/* … */
}
+13831: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13831, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 13831, __pyx_L1_error)
+13832: hard_cap[0] = _qwp_row_planning_cap(hard_cap[0], server_cap_known)
(__pyx_v_hard_cap[0]) = __pyx_f_7questdb_7_client__qwp_row_planning_cap((__pyx_v_hard_cap[0]), __pyx_v_server_cap_known);
+13833: return _qwp_row_should_auto_flush(
{
__pyx_r = __pyx_f_7questdb_7_client__qwp_row_should_auto_flush(__pyx_v_mode, __pyx_v_bytes_dynamic, __pyx_v_buf->_impl, (__pyx_v_hard_cap[0]), __pyx_v_interval_start_ms);
}
goto __pyx_L0;
13834: mode,
13835: bytes_dynamic,
13836: buf._impl,
13837: hard_cap[0],
13838: interval_start_ms)
13839:
13840:
+13841: cdef void_int _qwp_row_publish(Sender sender, PooledSender pooled) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__qwp_row_publish(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender, struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_pooled) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._qwp_row_publish", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
13842: """
13843: Publish the whole row buffer as one frame and clear it.
13844:
13845: A `BatchTooLarge` refusal publishes nothing and leaves the buffer intact
13846: on both senders. After any other failure a pooled lease keeps its rows
13847: and a standalone sender has cleared them, as their `flush()` does.
13848: """
+13849: if pooled is not None:
__pyx_t_1 = (((PyObject *)__pyx_v_pooled) != Py_None);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+13850: pooled._flush_locked(False)
__pyx_t_2 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_pooled->__pyx_vtab)->_flush_locked(__pyx_v_pooled, 0); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13850, __pyx_L1_error)
13851: else:
+13852: sender._flush_c_buf(sender._buffer, True, False, True)
/*else*/ {
__pyx_t_3 = ((PyObject *)__pyx_v_sender->_buffer);
__Pyx_INCREF(__pyx_t_3);
__pyx_t_2 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_sender->__pyx_vtab)->_flush_c_buf(__pyx_v_sender, ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_3), 1, 0, 1); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13852, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
}
__pyx_L3:;
13853:
13854:
+13855: cdef void_int _qwp_row_reject(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__qwp_row_reject(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_pooled, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buf, PyObject *__pyx_v_exc, int __pyx_v_earlier_rows_published) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_AddTraceback("questdb._client._qwp_row_reject", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
13856: PooledSender pooled,
13857: Buffer buf,
13858: object exc,
13859: bint earlier_rows_published) except -1:
13860: """Remove the newest row, which does not fit in a frame on its own."""
+13861: buf._rewind_to_marker()
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__rewind_to_marker(__pyx_v_buf); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13861, __pyx_L1_error)
+13862: if pooled is not None:
__pyx_t_2 = (((PyObject *)__pyx_v_pooled) != Py_None);
if (__pyx_t_2) {
/* … */
}
+13863: pooled._batch_started_ms = 0
__pyx_v_pooled->_batch_started_ms = 0;
+13864: raise QuestDBError(
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13864, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5);
+13865: QuestDBErrorCode.BatchTooLarge,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13865, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_BatchTooLarge); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13865, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
13866: 'The row was not added: it does not fit in one QWP/WebSocket '
13867: 'frame on its own. '
+13868: + ('The rows buffered before it were published. '
__pyx_t_8 = __Pyx_PyUnicode_ConcatSafe(__pyx_mstate_global->__pyx_kp_u_The_row_was_not_added_it_does_no, __pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13868, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+13869: if earlier_rows_published else '')
if (__pyx_v_earlier_rows_published) {
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_The_rows_buffered_before_it_were);
__pyx_t_6 = __pyx_mstate_global->__pyx_kp_u_The_rows_buffered_before_it_were;
} else {
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u__6);
__pyx_t_6 = __pyx_mstate_global->__pyx_kp_u__6;
}
+13870: + str(exc)) from exc
__pyx_t_6 = __Pyx_PyObject_Unicode(__pyx_v_exc); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13870, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_9 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_8, __pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 13870, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_t_9}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13864, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, __pyx_v_exc); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 13864, __pyx_L1_error)
13871:
13872:
+13873: cdef object _qwp_row_not_added(object exc, bint earlier_rows_published):
static PyObject *__pyx_f_7questdb_7_client__qwp_row_not_added(PyObject *__pyx_v_exc, int __pyx_v_earlier_rows_published) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._qwp_row_not_added", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
13874: """
13875: `exc`, a publish failure other than `BatchTooLarge`, with its message
13876: saying that the row was not added.
13877: """
+13878: return _error_with_message(
__pyx_t_1 = __pyx_f_7questdb_7_client__error_with_message(__pyx_v_exc, ((PyObject*)__pyx_t_3)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13878, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
13879: exc,
13880: 'The row was not added. '
+13881: + ('The rows buffered before it were published. '
__pyx_t_2 = __Pyx_PyUnicode_ConcatSafe(__pyx_mstate_global->__pyx_kp_u_The_row_was_not_added, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13881, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+13882: if earlier_rows_published else '')
if (__pyx_v_earlier_rows_published) {
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_The_rows_buffered_before_it_were);
__pyx_t_1 = __pyx_mstate_global->__pyx_kp_u_The_rows_buffered_before_it_were;
} else {
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u__6);
__pyx_t_1 = __pyx_mstate_global->__pyx_kp_u__6;
}
+13883: + str(exc))
__pyx_t_1 = __Pyx_PyObject_Unicode(__pyx_v_exc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13883, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13883, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
13884:
13885:
+13886: def _debug_qwp_row_not_added(object exc, bint earlier_rows_published):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_123_debug_qwp_row_not_added(PyObject *__pyx_self, #if CYTHON_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_122_debug_qwp_row_not_added, "Internal test seam: the exception `row()` raises for publish failure\n `exc`."); static PyMethodDef __pyx_mdef_7questdb_7_client_123_debug_qwp_row_not_added = {"_debug_qwp_row_not_added", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_123_debug_qwp_row_not_added, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_122_debug_qwp_row_not_added}; static PyObject *__pyx_pw_7questdb_7_client_123_debug_qwp_row_not_added(PyObject *__pyx_self, #if CYTHON_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 = 0; int __pyx_v_earlier_rows_published; #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_qwp_row_not_added (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,&__pyx_mstate_global->__pyx_n_u_earlier_rows_published,0}; PyObject* values[2] = {0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 13886, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 13886, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13886, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_qwp_row_not_added", 0) < (0)) __PYX_ERR(0, 13886, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 2; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_qwp_row_not_added", 1, 2, 2, i); __PYX_ERR(0, 13886, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13886, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 13886, __pyx_L3_error) } __pyx_v_exc = values[0]; __pyx_v_earlier_rows_published = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_earlier_rows_published == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13886, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_debug_qwp_row_not_added", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 13886, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client._debug_qwp_row_not_added", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_122_debug_qwp_row_not_added(__pyx_self, __pyx_v_exc, __pyx_v_earlier_rows_published); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_122_debug_qwp_row_not_added(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_exc, int __pyx_v_earlier_rows_published) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("questdb._client._debug_qwp_row_not_added", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_123_debug_qwp_row_not_added, 0, __pyx_mstate_global->__pyx_n_u_debug_qwp_row_not_added, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[248])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 13886, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_qwp_row_not_added, __pyx_t_18) < (0)) __PYX_ERR(0, 13886, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
13887: """Internal test seam: the exception `row()` raises for publish failure
13888: `exc`."""
+13889: return _qwp_row_not_added(exc, earlier_rows_published)
__pyx_t_1 = __pyx_f_7questdb_7_client__qwp_row_not_added(__pyx_v_exc, __pyx_v_earlier_rows_published); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13889, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
13890:
13891:
+13892: cdef void_int _qwp_row_split(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__qwp_row_split(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender, struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_pooled, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buf, PyObject *__pyx_v_table_name, PyObject *__pyx_v_symbols, PyObject *__pyx_v_columns, PyObject *__pyx_v_at) {
size_t __pyx_v_hard_cap;
size_t __pyx_v_discarded;
PyObject *__pyx_v_exc = NULL;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_AddTraceback("questdb._client._qwp_row_split", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
13893: Sender sender,
13894: PooledSender pooled,
13895: Buffer buf,
13896: str table_name,
13897: dict symbols,
13898: dict columns,
13899: object at) except -1:
13900: """
13901: Publish the rows buffered before the newest one as a frame of their
13902: own, then add the newest row back to start the next batch.
13903: """
+13904: cdef size_t hard_cap = 0
__pyx_v_hard_cap = 0;
13905: cdef size_t discarded
+13906: buf._rewind_to_marker()
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__rewind_to_marker(__pyx_v_buf); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13906, __pyx_L1_error)
+13907: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L8_try_end;
__pyx_L3_error:;
/* … */
__pyx_L5_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L1_error;
__pyx_L8_try_end:;
}
+13908: _qwp_row_publish(sender, pooled)
__pyx_t_1 = __pyx_f_7questdb_7_client__qwp_row_publish(__pyx_v_sender, __pyx_v_pooled); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13908, __pyx_L3_error)
+13909: except QuestDBError as exc:
__Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13909, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_5, __pyx_t_8); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_ErrRestore(__pyx_t_5, __pyx_t_6, __pyx_t_7); __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; if (__pyx_t_9) { __Pyx_AddTraceback("questdb._client._qwp_row_split", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5) < 0) __PYX_ERR(0, 13909, __pyx_L5_except_error) __Pyx_XGOTREF(__pyx_t_7); __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_t_6); __pyx_v_exc = __pyx_t_6; /*try:*/ { /* … */ /*finally:*/ { __pyx_L14_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_ExceptionSwap(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25); if ( unlikely(__Pyx_GetException(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22) < 0)) __Pyx_ErrFetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22); __Pyx_XGOTREF(__pyx_t_20); __Pyx_XGOTREF(__pyx_t_21); __Pyx_XGOTREF(__pyx_t_22); __Pyx_XGOTREF(__pyx_t_23); __Pyx_XGOTREF(__pyx_t_24); __Pyx_XGOTREF(__pyx_t_25); __pyx_t_9 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_19 = __pyx_filename; { __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; } __Pyx_XGIVEREF(__pyx_t_23); __Pyx_XGIVEREF(__pyx_t_24); __Pyx_XGIVEREF(__pyx_t_25); __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25); __Pyx_XGIVEREF(__pyx_t_20); __Pyx_XGIVEREF(__pyx_t_21); __Pyx_XGIVEREF(__pyx_t_22); __Pyx_ErrRestore(__pyx_t_20, __pyx_t_21, __pyx_t_22); __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19; goto __pyx_L5_except_error; } } } goto __pyx_L5_except_error;
+13910: if exc.code == QuestDBErrorCode.BatchTooLarge:
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13910, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 13910, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_BatchTooLarge); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 13910, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_12 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_8, __pyx_t_11, Py_EQ); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 13910, __pyx_L14_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; if (__pyx_t_12) { /* … */ }
13911: # No frame can carry these rows, and the routine cannot cut
13912: # them any finer: it removes only the newest row.
+13913: discarded = line_sender_buffer_row_count(buf._impl)
__pyx_v_discarded = line_sender_buffer_row_count(__pyx_v_buf->_impl);
+13914: line_sender_buffer_clear(buf._impl)
line_sender_buffer_clear(__pyx_v_buf->_impl);
+13915: if pooled is not None:
__pyx_t_12 = (((PyObject *)__pyx_v_pooled) != Py_None);
if (__pyx_t_12) {
/* … */
}
+13916: qdb_pystr_buf_clear(buf._b)
qdb_pystr_buf_clear(__pyx_v_buf->_b);
+13917: pooled._batch_started_ms = 0
__pyx_v_pooled->_batch_started_ms = 0;
+13918: raise QuestDBError(
__pyx_t_8 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 13918, __pyx_L14_error)
__Pyx_GOTREF(__pyx_t_10);
+13919: QuestDBErrorCode.BatchTooLarge,
__Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 13919, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_BatchTooLarge); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 13919, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+13920: f'{discarded} buffered '
__pyx_t_13 = __Pyx_PyUnicode_From_size_t(__pyx_v_discarded, 0, ' ', 'd'); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 13920, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_15 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_13, __pyx_mstate_global->__pyx_kp_u_buffered); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 13920, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+13921: + ('row was' if discarded == 1 else 'rows were')
__pyx_t_12 = (__pyx_v_discarded == 1);
if (__pyx_t_12) {
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_row_was);
__pyx_t_13 = __pyx_mstate_global->__pyx_kp_u_row_was;
} else {
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_rows_were);
__pyx_t_13 = __pyx_mstate_global->__pyx_kp_u_rows_were;
}
__pyx_t_16 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_t_15, __pyx_t_13); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 13921, __pyx_L14_error)
__Pyx_GOTREF(__pyx_t_16);
__Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+13922: + ' discarded and the row was not added: the buffered rows '
__pyx_t_13 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_16, __pyx_mstate_global->__pyx_kp_u_discarded_and_the_row_was_not_a); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 13922, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
13923: 'do not fit in one QWP/WebSocket frame even without it. '
13924: 'This can happen when the frame cap shrinks, for example '
13925: 'on reconnect, or when a lazily connected sender learns '
13926: "that the server's cap is below the default. "
+13927: + str(exc)) from exc
__pyx_t_16 = __Pyx_PyObject_Unicode(__pyx_v_exc); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 13927, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_15 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_13, __pyx_t_16); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 13927, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_17 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_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, 13918, __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, 13918, __pyx_L14_error)
13928: # The rows before the newest one are as the sender's `flush()`
13929: # leaves them, and the newest one stays out, so a pooled lease
13930: # keeps only rows that fit in one frame.
+13931: raise _qwp_row_not_added(exc, False) from exc
__pyx_t_11 = __pyx_f_7questdb_7_client__qwp_row_not_added(__pyx_v_exc, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 13931, __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, 13931, __pyx_L14_error) }
13932: # Converts the row's values a second time.
+13933: _qwp_row_add(sender, pooled, buf, table_name, symbols, columns, at)
__pyx_t_1 = __pyx_f_7questdb_7_client__qwp_row_add(__pyx_v_sender, __pyx_v_pooled, __pyx_v_buf, __pyx_v_table_name, __pyx_v_symbols, __pyx_v_columns, __pyx_v_at); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13933, __pyx_L1_error)
+13934: if _qwp_row_due(sender, pooled, buf, &hard_cap):
__pyx_t_12 = __pyx_f_7questdb_7_client__qwp_row_due(__pyx_v_sender, __pyx_v_pooled, __pyx_v_buf, (&__pyx_v_hard_cap)); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 13934, __pyx_L1_error)
if (__pyx_t_12) {
/* … */
}
+13935: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
goto __pyx_L28_try_end;
__pyx_L23_error:;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L25_except_error:;
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_ExceptionReset(__pyx_t_4, __pyx_t_3, __pyx_t_2);
goto __pyx_L1_error;
__pyx_L28_try_end:;
}
+13936: _qwp_row_publish(sender, pooled)
__pyx_t_1 = __pyx_f_7questdb_7_client__qwp_row_publish(__pyx_v_sender, __pyx_v_pooled); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13936, __pyx_L23_error)
+13937: except QuestDBError as exc:
__Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 13937, __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, 13937, __pyx_L25_except_error) __Pyx_XGOTREF(__pyx_t_7); __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_t_6); __pyx_v_exc = __pyx_t_6; /*try:*/ { /* … */ /*finally:*/ { __pyx_L34_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20); if ( unlikely(__Pyx_GetException(&__pyx_t_25, &__pyx_t_24, &__pyx_t_23) < 0)) __Pyx_ErrFetch(&__pyx_t_25, &__pyx_t_24, &__pyx_t_23); __Pyx_XGOTREF(__pyx_t_25); __Pyx_XGOTREF(__pyx_t_24); __Pyx_XGOTREF(__pyx_t_23); __Pyx_XGOTREF(__pyx_t_22); __Pyx_XGOTREF(__pyx_t_21); __Pyx_XGOTREF(__pyx_t_20); __pyx_t_18 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_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;
+13938: 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, 13938, __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, 13938, __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, 13938, __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, 13938, __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) { /* … */ }
+13939: _qwp_row_reject(pooled, buf, exc, True)
__pyx_t_1 = __pyx_f_7questdb_7_client__qwp_row_reject(__pyx_v_pooled, __pyx_v_buf, __pyx_v_exc, 1); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13939, __pyx_L34_error)
+13940: raise _qwp_row_not_added(exc, True) from exc
__pyx_t_15 = __pyx_f_7questdb_7_client__qwp_row_not_added(__pyx_v_exc, 1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 13940, __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, 13940, __pyx_L34_error) }
13941:
13942:
+13943: cdef void_int _qwp_row_append(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__qwp_row_append(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender, struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_pooled, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buf, PyObject *__pyx_v_table_name, PyObject *__pyx_v_symbols, PyObject *__pyx_v_columns, PyObject *__pyx_v_at) {
size_t __pyx_v_hard_cap;
size_t __pyx_v_row_count;
int __pyx_v_split;
PyObject *__pyx_v_exc = NULL;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_AddTraceback("questdb._client._qwp_row_append", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
13944: Sender sender,
13945: PooledSender pooled,
13946: Buffer buf,
13947: str table_name,
13948: dict symbols,
13949: dict columns,
13950: object at) except -1:
13951: """
13952: Append a row to a QWP/WebSocket row buffer and run auto-flush, keeping
13953: every published frame within the connection's frame cap.
13954:
13955: The whole buffer goes out as one frame when it fits. When it does not,
13956: or its size estimate is already past the cap, the rows buffered before
13957: the new one go out on their own and the new row starts the next batch,
13958: so a single call publishes at most two frames.
13959:
13960: Whatever this raises, the new row is not in the buffer. A
13961: `BatchTooLarge` means either it does not fit in a frame on its own, or
13962: the rows before it do not fit even without it, as after the frame cap
13963: shrinks, and those rows are discarded. After any other failure the rows
13964: before it are as the sender's `flush()` leaves them: a pooled lease
13965: keeps them and a standalone sender has cleared them.
13966: """
+13967: cdef size_t hard_cap = 0
__pyx_v_hard_cap = 0;
13968: cdef size_t row_count
13969: cdef bint split
+13970: _qwp_row_add(sender, pooled, buf, table_name, symbols, columns, at)
__pyx_t_1 = __pyx_f_7questdb_7_client__qwp_row_add(__pyx_v_sender, __pyx_v_pooled, __pyx_v_buf, __pyx_v_table_name, __pyx_v_symbols, __pyx_v_columns, __pyx_v_at); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13970, __pyx_L1_error)
+13971: if not buf._marker_set:
__pyx_t_2 = (!__pyx_v_buf->_marker_set);
if (__pyx_t_2) {
/* … */
}
13972: # Nothing was written, and the split and reject paths below need
13973: # the rewind point. Such a row triggers no auto-flush, as in
13974: # `Buffer._row`.
+13975: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+13976: try:
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L12_try_end;
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
/* … */
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L5_error;
__pyx_L11_try_return:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L4_return;
__pyx_L12_try_end:;
}
}
+13977: if not _qwp_row_due(sender, pooled, buf, &hard_cap):
__pyx_t_2 = __pyx_f_7questdb_7_client__qwp_row_due(__pyx_v_sender, __pyx_v_pooled, __pyx_v_buf, (&__pyx_v_hard_cap)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 13977, __pyx_L7_error)
__pyx_t_6 = (!__pyx_t_2);
if (__pyx_t_6) {
/* … */
}
+13978: return 0
{
__pyx_r = 0;
}
goto __pyx_L11_try_return;
+13979: row_count = line_sender_buffer_row_count(buf._impl)
__pyx_v_row_count = line_sender_buffer_row_count(__pyx_v_buf->_impl);
13980: # Past the cap, the estimate cannot tell whether the whole buffer
13981: # fits. The rows before the newest one fit unless the cap shrank:
13982: # they were under the threshold when the previous row was checked,
13983: # and the estimate does not undercount a frame (see
13984: # `line_sender_buffer_size`). So they go out on their own, without
13985: # first encoding the whole buffer to find out.
+13986: split = (row_count > 1 and
__pyx_t_2 = (__pyx_v_row_count > 1);
if (__pyx_t_2) {
} else {
__pyx_t_6 = __pyx_t_2;
goto __pyx_L14_bool_binop_done;
}
+13987: line_sender_buffer_size(buf._impl) > hard_cap)
__pyx_t_2 = (line_sender_buffer_size(__pyx_v_buf->_impl) > __pyx_v_hard_cap);
__pyx_t_6 = __pyx_t_2;
__pyx_L14_bool_binop_done:;
__pyx_v_split = __pyx_t_6;
+13988: if not split:
__pyx_t_6 = (!__pyx_v_split);
if (__pyx_t_6) {
/* … */
}
+13989: try:
{
/*try:*/ {
/* … */
}
__pyx_L17_error:;
/* … */
__pyx_L19_except_error:;
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
goto __pyx_L7_error;
__pyx_L21_try_return:;
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
goto __pyx_L11_try_return;
__pyx_L18_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
}
+13990: _qwp_row_publish(sender, pooled)
__pyx_t_1 = __pyx_f_7questdb_7_client__qwp_row_publish(__pyx_v_sender, __pyx_v_pooled); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13990, __pyx_L17_error)
+13991: return 0
{
__pyx_r = 0;
}
goto __pyx_L21_try_return;
+13992: except QuestDBError as exc:
__Pyx_ErrFetch(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 13992, __pyx_L19_except_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_10, __pyx_t_13); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_ErrRestore(__pyx_t_10, __pyx_t_11, __pyx_t_12); __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; if (__pyx_t_14) { __Pyx_AddTraceback("questdb._client._qwp_row_append", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10) < 0) __PYX_ERR(0, 13992, __pyx_L19_except_error) __Pyx_XGOTREF(__pyx_t_12); __Pyx_XGOTREF(__pyx_t_11); __Pyx_XGOTREF(__pyx_t_10); __Pyx_INCREF(__pyx_t_11); __pyx_v_exc = __pyx_t_11; /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; goto __pyx_L29; } __pyx_L28_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24); if ( unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21); __Pyx_XGOTREF(__pyx_t_19); __Pyx_XGOTREF(__pyx_t_20); __Pyx_XGOTREF(__pyx_t_21); __Pyx_XGOTREF(__pyx_t_22); __Pyx_XGOTREF(__pyx_t_23); __Pyx_XGOTREF(__pyx_t_24); __pyx_t_14 = __pyx_lineno; __pyx_t_17 = __pyx_clineno; __pyx_t_18 = __pyx_filename; { __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; } __Pyx_XGIVEREF(__pyx_t_22); __Pyx_XGIVEREF(__pyx_t_23); __Pyx_XGIVEREF(__pyx_t_24); __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24); __Pyx_XGIVEREF(__pyx_t_19); __Pyx_XGIVEREF(__pyx_t_20); __Pyx_XGIVEREF(__pyx_t_21); __Pyx_ErrRestore(__pyx_t_19, __pyx_t_20, __pyx_t_21); __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_lineno = __pyx_t_14; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_18; goto __pyx_L19_except_error; } __pyx_L29:; } __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; goto __pyx_L18_exception_handled; } goto __pyx_L19_except_error;
+13993: if exc.code != QuestDBErrorCode.BatchTooLarge:
__pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 13993, __pyx_L28_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 13993, __pyx_L28_error) __Pyx_GOTREF(__pyx_t_15); __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_BatchTooLarge); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 13993, __pyx_L28_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __pyx_t_6 = __Pyx_PyObject_CompareBoolNe_object_object(__pyx_t_13, __pyx_t_16, Py_NE); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 13993, __pyx_L28_error) __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; if (unlikely(__pyx_t_6)) { /* … */ }
+13994: 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, 13994, __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, 13994, __pyx_L28_error)
+13995: if row_count == 1:
__pyx_t_6 = (__pyx_v_row_count == 1);
if (__pyx_t_6) {
/* … */
}
}
+13996: _qwp_row_reject(pooled, buf, exc, False)
__pyx_t_1 = __pyx_f_7questdb_7_client__qwp_row_reject(__pyx_v_pooled, __pyx_v_buf, __pyx_v_exc, 0); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13996, __pyx_L28_error)
+13997: _qwp_row_split(sender, pooled, buf, table_name, symbols, columns, at)
__pyx_t_1 = __pyx_f_7questdb_7_client__qwp_row_split(__pyx_v_sender, __pyx_v_pooled, __pyx_v_buf, __pyx_v_table_name, __pyx_v_symbols, __pyx_v_columns, __pyx_v_at); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13997, __pyx_L7_error)
+13998: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._qwp_row_append", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12) < 0) __PYX_ERR(0, 13998, __pyx_L9_except_error)
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
13999: # A path that removed the new row itself has spent the rewind
14000: # point, and a failed standalone publish has cleared the buffer,
14001: # rewind point included. Otherwise the row is still buffered, since
14002: # a failed publish leaves a pooled lease's rows in place, and it
14003: # comes out here.
+14004: buf._rewind_after_failure()
__pyx_t_16 = __pyx_f_7questdb_7_client_6Buffer__rewind_after_failure(__pyx_v_buf); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 14004, __pyx_L9_except_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+14005: if (pooled is not None and
__pyx_t_2 = (((PyObject *)__pyx_v_pooled) != Py_None);
if (__pyx_t_2) {
} else {
__pyx_t_6 = __pyx_t_2;
goto __pyx_L39_bool_binop_done;
}
/* … */
if (__pyx_t_6) {
/* … */
}
+14006: line_sender_buffer_row_count(buf._impl) == 0):
__pyx_t_2 = (line_sender_buffer_row_count(__pyx_v_buf->_impl) == 0);
__pyx_t_6 = __pyx_t_2;
__pyx_L39_bool_binop_done:;
+14007: pooled._batch_started_ms = 0
__pyx_v_pooled->_batch_started_ms = 0;
+14008: raise
__Pyx_GIVEREF(__pyx_t_10); __Pyx_GIVEREF(__pyx_t_11); __Pyx_XGIVEREF(__pyx_t_12); __Pyx_ErrRestoreWithState(__pyx_t_10, __pyx_t_11, __pyx_t_12); __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __PYX_ERR(0, 14008, __pyx_L9_except_error) }
14009: finally:
+14010: buf._clear_marker()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_12 = __pyx_f_7questdb_7_client_6Buffer__clear_marker(__pyx_v_buf); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 14010, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_12);
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
goto __pyx_L6;
}
__pyx_L5_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_5 = 0; __pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7);
if ( unlikely(__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_3) < 0)) __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_4, &__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_5);
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_7);
__pyx_t_17 = __pyx_lineno; __pyx_t_14 = __pyx_clineno; __pyx_t_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, 14010, __pyx_L42_error)
__Pyx_GOTREF(__pyx_t_12);
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
}
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ErrRestore(__pyx_t_5, __pyx_t_4, __pyx_t_3);
__pyx_t_5 = 0; __pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0;
__pyx_lineno = __pyx_t_17; __pyx_clineno = __pyx_t_14; __pyx_filename = __pyx_t_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, 14010, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_12);
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
__pyx_r = __pyx_t_1;
goto __pyx_L0;
}
__pyx_L6:;
}
14011:
14012:
+14013: @cython.no_gc_clear
struct __pyx_vtabstruct_7questdb_7_client_PooledSender {
void (*_attach)(struct __pyx_obj_7questdb_7_client_PooledSender *, struct __pyx_obj_7questdb_7_client_QuestDB *, struct questdb_db *, struct qwp_sender *, struct __pyx_obj_7questdb_7_client_Buffer *);
__pyx_t_7questdb_7_client_void_int (*_check_open)(struct __pyx_obj_7questdb_7_client_PooledSender *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_lock_enter)(struct __pyx_obj_7questdb_7_client_PooledSender *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_check_not_in_row)(struct __pyx_obj_7questdb_7_client_PooledSender *, PyObject *);
struct __pyx_obj_7questdb_7_client_QuestDB *(*_enter_call_locked)(struct __pyx_obj_7questdb_7_client_PooledSender *);
void (*_exit_call_locked)(struct __pyx_obj_7questdb_7_client_PooledSender *, struct __pyx_obj_7questdb_7_client_QuestDB *);
__pyx_t_7questdb_7_client_void_int (*_check_not_mid_call)(struct __pyx_obj_7questdb_7_client_PooledSender *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_wait_locked)(struct __pyx_obj_7questdb_7_client_PooledSender *, uint64_t);
__pyx_t_7questdb_7_client_void_int (*_flush_locked)(struct __pyx_obj_7questdb_7_client_PooledSender *, int);
void (*_release_locked)(struct __pyx_obj_7questdb_7_client_PooledSender *);
};
static struct __pyx_vtabstruct_7questdb_7_client_PooledSender *__pyx_vtabptr_7questdb_7_client_PooledSender;
14014: cdef class PooledSender:
14015: """
14016: A row-building sender borrowed from a :class:`QuestDB` pool.
14017:
14018: Obtain a lease with :meth:`QuestDB.sender`; ``close()`` returns the
14019: native sender to the pool. Rows publish into an ordered,
14020: store-and-forward-covered QWP stream over one pooled connection.
14021:
14022: Rows go through ``row()``, ``dataframe()``, ``flush()``, ``wait()``
14023: and ``close()``; ``len(sender)`` is the number of buffered rows.
14024: Frame-level delivery tracking is available through
14025: :meth:`flush_and_get_fsn`, :meth:`flush_and_keep_and_get_fsn`,
14026: :meth:`published_fsn`, :meth:`acked_fsn` and
14027: :meth:`await_acked_fsn`, and per-lease server diagnostics through
14028: :meth:`poll_error` and :meth:`error_events_dropped`. Prefer
14029: :meth:`QuestDB.dataframe` for bulk loads; the lease's own
14030: ``dataframe()`` is a convenience that routes to the same direct
14031: columnar path. Row auto-flush is enabled by default at 1,000 rows, 100
14032: milliseconds, or a cap-derived byte threshold, and can be configured
14033: through the parent handle's connection settings.
14034:
14035: A lease is used by one thread at a time. It may move to another
14036: thread -- borrowed on one and used on a worker, say -- provided the
14037: hand-off is synchronized and no two threads call into it at once. To
14038: ingest from several threads, share the :class:`QuestDB` handle and
14039: borrow one lease per thread. Every method holds the lease's lock for
14040: its whole call, :meth:`dataframe` included, so a call from a second
14041: thread waits until the running one returns. Code that runs inside a
14042: call -- a column value's conversion, the Arrow stream
14043: :meth:`dataframe` reads, or a handler on the ``questdb`` logger,
14044: which :meth:`dataframe` logs its warnings to -- therefore must not
14045: wait on another thread that uses the same lease.
14046:
14047: Close every lease, or use it in a ``with`` block. A lease collected
14048: without ``close()`` returns its sender to the pool without sending
14049: the rows still buffered in it, and reports how many it discarded
14050: through the ``questdb`` logger at ``WARNING``.
14051: """
14052: cdef qwp_sender* _qwp
14053: cdef questdb_db* _db
14054: cdef QuestDB _handle
14055: cdef Buffer _buffer
14056: cdef object _lock
14057: cdef int64_t _batch_started_ms
14058: cdef int64_t _call_depth
14059:
+14060: def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_12PooledSender_1__cinit__(PyObject *__pyx_v_self,
#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;
}
+14061: self._qwp = NULL
__pyx_v_self->_qwp = NULL;
+14062: self._db = NULL
__pyx_v_self->_db = NULL;
+14063: self._handle = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_handle); __Pyx_DECREF_SET(__pyx_v_self->_handle, ((struct __pyx_obj_7questdb_7_client_QuestDB *)Py_None));
+14064: self._buffer = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_buffer); __Pyx_DECREF_SET(__pyx_v_self->_buffer, ((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None));
+14065: self._lock = threading.RLock()
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14065, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_RLock); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14065, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 14065, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v_self->_lock); __Pyx_DECREF_SET(__pyx_v_self->_lock, __pyx_t_1); __pyx_t_1 = 0;
+14066: self._batch_started_ms = 0
__pyx_v_self->_batch_started_ms = 0;
+14067: self._call_depth = 0
__pyx_v_self->_call_depth = 0;
14068:
+14069: cdef void _attach(
static void __pyx_f_7questdb_7_client_12PooledSender__attach(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle, struct questdb_db *__pyx_v_db, struct qwp_sender *__pyx_v_sender, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer) {
/* … */
/* function exit code */
__Pyx_RefNannyFinishContext();
}
14070: self,
14071: QuestDB handle,
14072: questdb_db* db,
14073: qwp_sender* sender,
14074: Buffer buffer) noexcept:
+14075: self._handle = handle
__Pyx_INCREF((PyObject *)__pyx_v_handle); __Pyx_GIVEREF((PyObject *)__pyx_v_handle); __Pyx_GOTREF((PyObject *)__pyx_v_self->_handle); __Pyx_DECREF_SET(__pyx_v_self->_handle, __pyx_v_handle);
+14076: self._db = db
__pyx_v_self->_db = __pyx_v_db;
+14077: self._qwp = sender
__pyx_v_self->_qwp = __pyx_v_sender;
+14078: self._buffer = buffer
__Pyx_INCREF((PyObject *)__pyx_v_buffer); __Pyx_GIVEREF((PyObject *)__pyx_v_buffer); __Pyx_GOTREF((PyObject *)__pyx_v_self->_buffer); __Pyx_DECREF_SET(__pyx_v_self->_buffer, __pyx_v_buffer);
+14079: self._batch_started_ms = 0
__pyx_v_self->_batch_started_ms = 0;
14080:
+14081: cdef void_int _check_open(self, str method) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_12PooledSender__check_open(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyObject *__pyx_v_method) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.PooledSender._check_open", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+14082: if self._qwp == NULL:
__pyx_t_1 = (__pyx_v_self->_qwp == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+14083: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14083, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+14084: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14084, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14084, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+14085: f"{method}() can't be called: Sender is closed.")
__pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14085, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_Sender_is_close); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 14085, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_7}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14083, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 14083, __pyx_L1_error)
14086:
+14087: cdef void_int _lock_enter(self, str method) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_12PooledSender__lock_enter(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyObject *__pyx_v_method) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_AddTraceback("questdb._client.PooledSender._lock_enter", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
14088: """Take this lease's lock; the caller releases it in ``finally``.
14089:
14090: Another thread may hold the lock across a native ACK wait (``wait()``,
14091: ``flush(wait=True)``, ``await_acked_fsn()``, ``close(wait=True)``)
14092: whose reconnect needs a token. An OIDC provider cannot supply one
14093: until its persistence-warning or renderer callback returns, and a
14094: ``bearer_token_provider=`` call on a native reconnect thread is that
14095: token request itself, so a callback that blocked here would never
14096: return and both threads would hang. From inside such a callback, wait
14097: a bounded time and then raise instead, as ``QuestDB.close()`` does.
14098: """
14099: # Uncontended (or re-entrant) is the per-row common case: one call.
+14100: if self._lock.acquire(False):
__pyx_t_2 = __pyx_v_self->_lock; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, Py_False}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 14100, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 14100, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_4) { /* … */ }
+14101: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+14102: if not _in_bounded_wait_callback():
__pyx_t_4 = __pyx_f_7questdb_7_client__in_bounded_wait_callback(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 14102, __pyx_L1_error)
__pyx_t_5 = (!__pyx_t_4);
if (__pyx_t_5) {
/* … */
}
+14103: self._lock.acquire()
__pyx_t_2 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 14103, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+14104: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+14105: if self._lock.acquire(True, _OIDC_CLOSE_DIAGNOSTIC_WAIT_SECS):
__pyx_t_2 = __pyx_v_self->_lock; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = PyFloat_FromDouble(__pyx_v_7questdb_7_client__OIDC_CLOSE_DIAGNOSTIC_WAIT_SECS); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14105, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_3 = 0; { PyObject *__pyx_callargs[3] = {__pyx_t_2, Py_True, __pyx_t_6}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 14105, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 14105, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_5) { /* … */ }
+14106: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+14107: raise _callback_wait_refused(
__pyx_t_2 = __pyx_f_7questdb_7_client__callback_wait_refused(((PyObject*)__pyx_t_6)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14107, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 14107, __pyx_L1_error)
+14108: f'{method}() cannot wait for this sender lease inside '
__pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 14108, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); /* … */ __pyx_t_8 = 176; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7[0]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7[2]); #endif __pyx_t_9 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_9 |= __Pyx_PyUnicode_KIND_04(__pyx_t_7[0]) | __Pyx_PyUnicode_KIND_04(__pyx_t_7[2]); #endif __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_7, 4, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14108, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+14109: f'{_bounded_wait_callback_name()}: another thread is using the '
__pyx_t_6 = __pyx_f_7questdb_7_client__bounded_wait_callback_name(); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_2 = __Pyx_PyUnicode_Unicode(__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7[0] = __pyx_t_1; __pyx_t_7[1] = __pyx_mstate_global->__pyx_kp_u_cannot_wait_for_this_sender_lea; __pyx_t_7[2] = __pyx_t_2; __pyx_t_7[3] = __pyx_mstate_global->__pyx_kp_u_another_thread_is_using_the_lea;
14110: 'lease and may be waiting for this callback to return. Return '
14111: 'from the callback before using the lease.')
14112:
+14113: cdef void_int _check_not_in_row(self, str method) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_12PooledSender__check_not_in_row(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyObject *__pyx_v_method) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client.PooledSender._check_not_in_row", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
14114: """
14115: Refuse a call that arrives while `row()` is part-way through
14116: assembling a row on this lease's buffer.
14117:
14118: A column value whose conversion runs Python code re-enters here on
14119: the same thread, and `self._lock` is re-entrant, so the lock alone
14120: lets it through. Flushing a half-written row cannot succeed, and
14121: returning the lease to the pool would free the buffer the row is
14122: still writing into.
14123: """
+14124: if self._buffer is not None and self._buffer._row_depth != 0:
__pyx_t_2 = (((PyObject *)__pyx_v_self->_buffer) != Py_None);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_self->_buffer->_row_depth != 0);
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (unlikely(__pyx_t_1)) {
/* … */
}
+14125: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14125, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+14126: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14126, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 14126, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+14127: f"{method}() can't be called while a row is being "
__pyx_t_6 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14127, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_8 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_while_a_row_is_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 14127, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_t_8}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14125, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 14125, __pyx_L1_error)
14128: "written. `row()` is part-way through assembling a row "
14129: "and something it called has come back into this sender, "
14130: "most likely a column value whose conversion runs Python "
14131: "code.")
14132:
+14133: cdef QuestDB _enter_call_locked(self):
static struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_f_7questdb_7_client_12PooledSender__enter_call_locked(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self) {
struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0;
struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.PooledSender._enter_call_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_handle);
__Pyx_XGIVEREF((PyObject *)__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
14134: """Count one of this lease's own calls, on the lease and on the
14135: handle it was borrowed from. Called with `self._lock` held.
14136:
14137: Every public method that writes, flushes, waits or closes counts,
14138: whether or not it looks like it runs the caller's Python: the list
14139: of methods that do has been wrong once per review round, and a
14140: counter raised on all of them cannot be short one entry. The six
14141: that only read state -- `__enter__`, `__len__`, `poll_error()`,
14142: `error_events_dropped()`, `published_fsn()` and `acked_fsn()` --
14143: run none of the caller's Python and do not count. The returned
14144: handle is the one to pass back to `_exit_call_locked`, because the
14145: lease drops its own reference when it is released.
14146:
14147: The two counts answer different questions. The handle's is
14148: per-thread and shared by every lease and call on that handle, so
14149: `QuestDB.close()` can see that the frame it would wait for is its
14150: own caller. The lease's own is per-lease, so `close()` can refuse
14151: to return the sender to the pool from inside a call still using
14152: it without refusing to close some unrelated lease.
14153: """
+14154: cdef QuestDB handle = self._handle
__pyx_t_1 = ((PyObject *)__pyx_v_self->_handle);
__Pyx_INCREF(__pyx_t_1);
__pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_1);
__pyx_t_1 = 0;
+14155: self._call_depth += 1
__pyx_v_self->_call_depth = (__pyx_v_self->_call_depth + 1);
+14156: if handle is not None:
__pyx_t_2 = (((PyObject *)__pyx_v_handle) != Py_None);
if (__pyx_t_2) {
/* … */
}
+14157: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L1_error;
__pyx_L9_try_end:;
}
+14158: handle._enter_scoped_call()
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_handle->__pyx_vtab)->_enter_scoped_call(__pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14158, __pyx_L4_error)
+14159: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledSender._enter_call_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 14159, __pyx_L6_except_error)
__Pyx_XGOTREF(__pyx_t_1);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_7);
+14160: self._call_depth -= 1
__pyx_v_self->_call_depth = (__pyx_v_self->_call_depth - 1);
+14161: raise
__Pyx_GIVEREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_6); __Pyx_XGIVEREF(__pyx_t_7); __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_6, __pyx_t_7); __pyx_t_1 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __PYX_ERR(0, 14161, __pyx_L6_except_error) }
+14162: return handle
{
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;
14163:
+14164: cdef void _exit_call_locked(self, QuestDB handle) except *:
static void __pyx_f_7questdb_7_client_12PooledSender__exit_call_locked(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle) {
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client.PooledSender._exit_call_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
}
14165: # The handle's thread-local update can raise; this lease is no longer
14166: # in its call either way, so unwind its guard first.
+14167: self._call_depth -= 1
__pyx_v_self->_call_depth = (__pyx_v_self->_call_depth - 1);
+14168: if handle is not None:
__pyx_t_1 = (((PyObject *)__pyx_v_handle) != Py_None);
if (__pyx_t_1) {
/* … */
}
+14169: handle._exit_scoped_call()
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_handle->__pyx_vtab)->_exit_scoped_call(__pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14169, __pyx_L1_error)
14170:
+14171: cdef void_int _check_not_mid_call(self, str method) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_12PooledSender__check_not_mid_call(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyObject *__pyx_v_method) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.PooledSender._check_not_mid_call", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
14172: """
14173: Refuse a call that would end this lease while one of its own
14174: calls is still running.
14175:
14176: `dataframe()` runs the caller's Python for the whole plan build --
14177: reading `attrs`, sniffing object cells, pulling
14178: `__arrow_c_stream__` -- and `row()` runs it for every column
14179: value whose conversion is not pure C. That code can come back
14180: here. Returning the sender to the pool from inside it leaves the
14181: rest of the call working against a lease that is already closed,
14182: so every later use in the enclosing block raises.
14183: """
+14184: if self._call_depth != 0:
__pyx_t_1 = (__pyx_v_self->_call_depth != 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+14185: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14185, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+14186: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14186, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14186, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+14187: f"{method}() can't be called from inside a call on this "
__pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14187, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_from_inside_a_c); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 14187, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_7}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14185, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 14185, __pyx_L1_error)
14188: 'sender lease. It would return the sender to the pool '
14189: 'while that call is still using it. Close the lease '
14190: 'after the call returns.')
14191:
+14192: cdef void_int _wait_locked(self, uint64_t timeout_millis) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_12PooledSender__wait_locked(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, uint64_t __pyx_v_timeout_millis) {
struct line_sender_error *__pyx_v_err;
PyThreadState *__pyx_v_gs;
int __pyx_v_ok;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.PooledSender._wait_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+14193: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+14194: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+14195: cdef bint ok = False
__pyx_v_ok = 0;
+14196: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+14197: ok = qwp_sender_wait(
__pyx_v_ok = qwp_sender_wait(__pyx_v_self->_qwp, qwpws_ack_level_ok, __pyx_v_timeout_millis, (&__pyx_v_err));
14198: self._qwp,
14199: qwpws_ack_level.qwpws_ack_level_ok,
14200: timeout_millis,
14201: &err)
+14202: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+14203: if not ok:
__pyx_t_1 = (!__pyx_v_ok);
if (unlikely(__pyx_t_1)) {
/* … */
}
+14204: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14204, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 14204, __pyx_L1_error)
14205:
+14206: cdef void_int _flush_locked(self, bint wait) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_12PooledSender__flush_locked(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, int __pyx_v_wait) {
struct line_sender_error *__pyx_v_err;
PyThreadState *__pyx_v_gs;
int __pyx_v_ok;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client.PooledSender._flush_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+14207: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+14208: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+14209: cdef bint ok = False
__pyx_v_ok = 0;
+14210: self._check_open('flush')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14210, __pyx_L1_error)
+14211: self._check_not_in_row('flush')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_not_in_row(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14211, __pyx_L1_error)
+14212: if line_sender_buffer_row_count(self._buffer._impl) == 0:
__pyx_t_2 = (line_sender_buffer_row_count(__pyx_v_self->_buffer->_impl) == 0);
if (__pyx_t_2) {
/* … */
}
+14213: self._batch_started_ms = 0
__pyx_v_self->_batch_started_ms = 0;
+14214: if wait:
if (__pyx_v_wait) {
/* … */
}
+14215: self._wait_locked(0)
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_wait_locked(__pyx_v_self, 0); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14215, __pyx_L1_error)
+14216: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+14217: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+14218: if wait:
if (__pyx_v_wait) {
/* … */
goto __pyx_L5;
}
+14219: ok = qwp_sender_flush_buffer_and_wait(
__pyx_v_ok = qwp_sender_flush_buffer_and_wait(__pyx_v_self->_qwp, __pyx_v_self->_buffer->_impl, qwpws_ack_level_ok, (&__pyx_v_err));
14220: self._qwp,
14221: self._buffer._impl,
14222: qwpws_ack_level.qwpws_ack_level_ok,
14223: &err)
14224: else:
+14225: ok = qwp_sender_flush_buffer(
/*else*/ {
/* … */
__pyx_v_ok = qwp_sender_flush_buffer(__pyx_v_self->_qwp, __pyx_v_self->_buffer->_impl, (&__pyx_v_err));
}
__pyx_L5:;
14226: self._qwp, self._buffer._impl, &err)
+14227: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+14228: if not ok:
__pyx_t_2 = (!__pyx_v_ok);
if (unlikely(__pyx_t_2)) {
/* … */
}
+14229: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14229, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 14229, __pyx_L1_error)
+14230: qdb_pystr_buf_clear(self._buffer._b)
qdb_pystr_buf_clear(__pyx_v_self->_buffer->_b);
+14231: self._batch_started_ms = 0
__pyx_v_self->_batch_started_ms = 0;
14232:
+14233: cdef void _release_locked(self) except *:
static void __pyx_f_7questdb_7_client_12PooledSender__release_locked(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self) {
struct qwp_sender *__pyx_v_sender;
struct questdb_db *__pyx_v_db;
struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0;
PyThreadState *__pyx_v_gs;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client.PooledSender._release_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_handle);
__Pyx_RefNannyFinishContext();
}
14234: """Hand the borrowed sender back to the pool.
14235:
14236: Every refusal belongs to `close()`, which runs them before it
14237: reaches here. This is also the `__dealloc__` path, where the
14238: function is `except *` and cannot report anything: a raise here
14239: would skip `questdb_db_return_sender` below, leaving the pool a
14240: sender short and `QuestDB.close()` waiting on a lease that can
14241: never come back. `PooledReader._release_locked` is the same
14242: shape.
14243: """
+14244: cdef qwp_sender* sender = self._qwp
__pyx_t_1 = __pyx_v_self->_qwp; __pyx_v_sender = __pyx_t_1;
+14245: cdef questdb_db* db = self._db
__pyx_t_2 = __pyx_v_self->_db; __pyx_v_db = __pyx_t_2;
+14246: cdef QuestDB handle = self._handle
__pyx_t_3 = ((PyObject *)__pyx_v_self->_handle);
__Pyx_INCREF(__pyx_t_3);
__pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_3);
__pyx_t_3 = 0;
+14247: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+14248: if sender == NULL:
__pyx_t_4 = (__pyx_v_sender == NULL);
if (__pyx_t_4) {
/* … */
}
+14249: return
{
}
goto __pyx_L0;
+14250: self._qwp = NULL
__pyx_v_self->_qwp = NULL;
+14251: self._db = NULL
__pyx_v_self->_db = NULL;
+14252: self._buffer = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_buffer); __Pyx_DECREF_SET(__pyx_v_self->_buffer, ((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None));
+14253: self._handle = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_handle); __Pyx_DECREF_SET(__pyx_v_self->_handle, ((struct __pyx_obj_7questdb_7_client_QuestDB *)Py_None));
+14254: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+14255: questdb_db_return_sender(db, sender)
questdb_db_return_sender(__pyx_v_db, __pyx_v_sender);
+14256: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+14257: if handle is not None:
__pyx_t_4 = (((PyObject *)__pyx_v_handle) != Py_None);
if (__pyx_t_4) {
/* … */
}
+14258: handle._end_db_use(scoped=False)
__pyx_t_5.__pyx_n = 1;
__pyx_t_5.scoped = 0;
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_handle->__pyx_vtab)->_end_db_use(__pyx_v_handle, &__pyx_t_5); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14258, __pyx_L1_error)
14259:
+14260: def __enter__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_3__enter__(PyObject *__pyx_v_self,
#if CYTHON_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_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_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_3__enter__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender___enter, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[249])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 14260, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
#endif
if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_enter, __pyx_t_18) < (0)) __PYX_ERR(0, 14260, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+14261: self._lock_enter('__enter__')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14261, __pyx_L1_error)
+14262: try:
/*try:*/ {
+14263: self._check_open('__enter__')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14263, __pyx_L4_error)
}
14264: finally:
+14265: self._lock.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_3 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14265, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
goto __pyx_L5;
}
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
__Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
if ( unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__pyx_t_5 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_7 = __pyx_filename;
{
__pyx_t_3 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14265, __pyx_L7_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
}
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_ErrRestore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
__pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
__pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_7;
goto __pyx_L1_error;
__pyx_L7_error:;
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
goto __pyx_L1_error;
}
__pyx_L5:;
}
+14266: return self
{
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;
14267:
+14268: 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, 14268, __pyx_L3_error) if (likely(__pyx_kwds_len > 0)) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 14268, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "row", 0) < (0)) __PYX_ERR(0, 14268, __pyx_L3_error) /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_4row(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyObject *__pyx_v_table_name, PyObject *__pyx_v_symbols, PyObject *__pyx_v_columns, PyObject *__pyx_v_at) { struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buf = 0; struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("questdb._client.PooledSender.row", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_buf); __Pyx_XDECREF((PyObject *)__pyx_v_handle); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 14268, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); /* … */ __pyx_t_25 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 14268, __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, 14268, __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, 14268, __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, 14268, __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, 14268, __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[250])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 14268, __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_18); __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_20, __pyx_t_25); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 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, 14268, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
14269: self,
14270: table_name: str,
14271: *,
+14272: symbols: Optional[Dict[str, Optional[str]]] = None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_symbols, Py_None) < (0)) __PYX_ERR(0, 14268, __pyx_L1_error)
14273: columns: Optional[Dict[
14274: str,
14275: Union[None, bool, int, float, str, TimestampMicros,
14276: TimestampNanos, datetime.datetime, numpy.ndarray,
14277: Decimal, uuid.UUID, ipaddress.IPv4Address, bytes,
14278: bytearray, memoryview, Char, DateMillis, Long256,
+14279: Geohash]]] = None,
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("row", 1, 1, 1, i); __PYX_ERR(0, 14268, __pyx_L3_error) } } for (Py_ssize_t i = 1; i < 2; i++) { if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("row", *(__pyx_pyargnames[i - 0])); __PYX_ERR(0, 14268, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { __Pyx_RaiseKeywordRequired("row", __pyx_mstate_global->__pyx_n_u_at); __PYX_ERR(0, 14268, __pyx_L3_error) } __pyx_v_table_name = ((PyObject*)values[0]); __pyx_v_at = values[1]; __pyx_v_symbols = ((PyObject*)values[2]); __pyx_v_columns = ((PyObject*)values[3]); } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("row", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 14268, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.PooledSender.row", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 0, "table_name", 2))) __PYX_ERR(0, 14270, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_symbols), (&PyDict_Type), 1, "symbols", 2))) __PYX_ERR(0, 14272, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_columns), (&PyDict_Type), 1, "columns", 2))) __PYX_ERR(0, 14273, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_4row(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self), __pyx_v_table_name, __pyx_v_symbols, __pyx_v_columns, __pyx_v_at); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_columns, Py_None) < (0)) __PYX_ERR(0, 14268, __pyx_L1_error)
14280: at: Union[ServerTimestampType, TimestampNanos,
14281: datetime.datetime]):
14282: """
14283: Append one row to this sender's QWP buffer.
14284:
14285: When pooled auto-flush is enabled on the :class:`QuestDB` handle,
14286: completing a row that breaches a configured row, byte, or interval
14287: threshold publishes the buffer without waiting for an acknowledgement.
14288: A buffer whose size estimate reaches the connection's frame cap is
14289: published too, even with ``auto_flush_bytes=off``. Every published
14290: frame fits the frame cap: when the whole buffer does not, or its
14291: size estimate is past the cap, the rows buffered before this one go
14292: out as a frame of their own and this row starts the next batch, so
14293: one call publishes at most two frames. Re-adding the row converts its
14294: values a second time.
14295:
14296: Whatever this method raises, the row was not added.
14297: :class:`QuestDBErrorCode.BatchTooLarge` means either it does not fit
14298: in a frame on its own, or the rows buffered before it do not fit
14299: even without it, which can happen after the frame cap shrinks, for
14300: example on reconnect; those rows are then discarded, and the error
14301: says how many. Any other error raised by a publish propagates from
14302: this method and leaves the rows buffered before it in place.
14303:
14304: See :func:`Buffer.row <questdb.ingress.Buffer.row>` for supported
14305: column types, protocol restrictions, server requirements, and
14306: ``NULL``-sentinel behavior.
14307: """
14308: cdef Buffer buf
14309: cdef QuestDB handle
+14310: if at is None:
__pyx_t_1 = (__pyx_v_at == Py_None);
if (unlikely(__pyx_t_1)) {
/* … */
}
+14311: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14311, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+14312: QuestDBErrorCode.InvalidTimestamp,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14312, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14312, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_at_must_be_of_type_TimestampNan}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14311, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 14311, __pyx_L1_error)
14313: "`at` must be of type TimestampNanos, datetime, or "
14314: "ServerTimestamp")
+14315: self._lock_enter('row')
__pyx_t_8 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_row_2); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14315, __pyx_L1_error)
+14316: try:
/*try:*/ {
+14317: self._check_open('row')
__pyx_t_8 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_row_2); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14317, __pyx_L5_error)
+14318: handle = self._enter_call_locked()
__pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14318, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_2); __pyx_t_2 = 0;
+14319: try:
/*try:*/ {
14320: # The lease holds the only reference to the buffer, and a
14321: # column value whose conversion runs Python code can reach
14322: # back in here. A strong local reference keeps the buffer
14323: # alive for the whole row, including its cleanup.
+14324: buf = self._buffer
__pyx_t_2 = ((PyObject *)__pyx_v_self->_buffer);
__Pyx_INCREF(__pyx_t_2);
__pyx_v_buf = ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_2);
__pyx_t_2 = 0;
+14325: _qwp_row_append(
__pyx_t_8 = __pyx_f_7questdb_7_client__qwp_row_append(((struct __pyx_obj_7questdb_7_client_Sender *)Py_None), __pyx_v_self, __pyx_v_buf, __pyx_v_table_name, ((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, 14325, __pyx_L8_error)
}
14326: None, self, buf, table_name, symbols, columns, at)
14327: finally:
+14328: self._exit_call_locked(handle)
/*finally:*/ {
/*normal exit:*/{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14328, __pyx_L5_error)
goto __pyx_L9;
}
__pyx_L8_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
if ( unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__pyx_t_9 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_11 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14328, __pyx_L11_error)
}
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_ErrRestore(__pyx_t_12, __pyx_t_13, __pyx_t_14);
__pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
__pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_11;
goto __pyx_L5_error;
__pyx_L11_error:;
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17);
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
goto __pyx_L5_error;
}
__pyx_L9:;
}
}
14329: finally:
+14330: self._lock.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_4 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14330, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
goto __pyx_L6;
}
__pyx_L5_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_ExceptionSwap(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12);
if ( unlikely(__Pyx_GetException(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15) < 0)) __Pyx_ErrFetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_12);
__pyx_t_10 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_11 = __pyx_filename;
{
__pyx_t_4 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14330, __pyx_L13_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
}
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_14, __pyx_t_13, __pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ErrRestore(__pyx_t_17, __pyx_t_16, __pyx_t_15);
__pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0;
__pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_11;
goto __pyx_L1_error;
__pyx_L13_error:;
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_14, __pyx_t_13, __pyx_t_12);
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0;
goto __pyx_L1_error;
}
__pyx_L6:;
}
+14331: return self
{
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;
14332:
+14333: 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, 14333, __pyx_L3_error) if (likely(__pyx_kwds_len > 0)) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 14333, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "dataframe", 0) < (0)) __PYX_ERR(0, 14333, __pyx_L3_error) /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_6dataframe(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyObject *__pyx_v_df, PyObject *__pyx_v_table_name, PyObject *__pyx_v_table_name_col, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at, PyObject *__pyx_v_max_rows_per_batch, PyObject *__pyx_v_schema_overrides) { struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("questdb._client.PooledSender.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_handle); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_20 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 14333, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); /* … */ __pyx_t_25 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 14333, __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, 14333, __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, 14333, __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, 14333, __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, 14333, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_max_rows_per_batch, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 14333, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_schema_overrides_2, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_object) < (0)) __PYX_ERR(0, 14333, __pyx_L1_error) __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_7dataframe, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_dataframe, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[251])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 14333, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_18, __pyx_t_20); __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_18, __pyx_t_25); __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_dataframe, __pyx_t_18) < (0)) __PYX_ERR(0, 14333, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
14334: self,
14335: df,
14336: *,
+14337: table_name: Optional[str] = None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_table_name, Py_None) < (0)) __PYX_ERR(0, 14333, __pyx_L1_error)
+14338: table_name_col: Union[None, int, str] = None,
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_n_u_auto)); if (!values[5]) values[5] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k__41); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_table_name_col, Py_None) < (0)) __PYX_ERR(0, 14333, __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, 14333, __pyx_L1_error)
14339: symbols: Union[str, bool, List[int], List[str]] = 'auto',
14340: at: Union[ServerTimestampType, int, str, TimestampNanos,
14341: datetime.datetime],
+14342: max_rows_per_batch: int = DEFAULT_MAX_CHUNK_ROWS,
__Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_DEFAULT_MAX_CHUNK_ROWS); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 14342, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); if (__Pyx_PyInt_FromNumber(&__pyx_t_20, NULL, 1) < (0)) __PYX_ERR(0, 14342, __pyx_L1_error) __pyx_mstate_global->__pyx_k__41 = ((PyObject*)__pyx_t_20); __Pyx_GIVEREF(__pyx_t_20); __pyx_t_20 = 0; /* … */ __Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_DEFAULT_MAX_CHUNK_ROWS); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 14342, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); if (__Pyx_PyInt_FromNumber(&__pyx_t_25, NULL, 1) < (0)) __PYX_ERR(0, 14342, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_max_rows_per_batch, __pyx_t_25) < (0)) __PYX_ERR(0, 14333, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
+14343: schema_overrides: Optional[Dict[str, object]] = None):
if (!values[6]) values[6] = __Pyx_NewRef(((PyObject*)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, i); __PYX_ERR(0, 14333, __pyx_L3_error) } } for (Py_ssize_t i = 1; i < 2; i++) { if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("dataframe", *(__pyx_pyargnames[i - 0])); __PYX_ERR(0, 14333, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { __Pyx_RaiseKeywordRequired("dataframe", __pyx_mstate_global->__pyx_n_u_at); __PYX_ERR(0, 14333, __pyx_L3_error) } __pyx_v_df = values[0]; __pyx_v_at = values[1]; __pyx_v_table_name = ((PyObject*)values[2]); __pyx_v_table_name_col = values[3]; __pyx_v_symbols = values[4]; if (__Pyx_PyInt_FromNumber(&values[5], "max_rows_per_batch", 0) < (0)) __PYX_ERR(0, 14342, __pyx_L3_error) __pyx_v_max_rows_per_batch = ((PyObject*)values[5]); __pyx_v_schema_overrides = ((PyObject*)values[6]); } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 14333, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.PooledSender.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 1, "table_name", 2))) __PYX_ERR(0, 14337, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_max_rows_per_batch), (&PyLong_Type), 0, "max_rows_per_batch", 2))) __PYX_ERR(0, 14342, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema_overrides), (&PyDict_Type), 1, "schema_overrides", 2))) __PYX_ERR(0, 14343, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_6dataframe(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self), __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, __pyx_v_max_rows_per_batch, __pyx_v_schema_overrides); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_schema_overrides_2, Py_None) < (0)) __PYX_ERR(0, 14333, __pyx_L1_error)
14344: """
14345: Bulk-load a whole DataFrame over a direct columnar connection
14346: borrowed from the pool for the duration of this call.
14347:
14348: Prefer :meth:`QuestDB.dataframe` — this convenience forwards to the
14349: same path and is **not** part of this sender's row stream: the frame
14350: is committed over its own connection and becomes visible to SQL
14351: immediately, without waiting for rows appended to this sender with
14352: :meth:`row` to drain. There is therefore **no ordering relationship**
14353: between ``dataframe()`` and buffered rows — ``dataframe()`` does not
14354: flush them; publish those with :meth:`flush`.
14355:
14356: Being the handle's own path, it is refused once
14357: :meth:`QuestDB.close` has started, as :meth:`QuestDB.dataframe`
14358: is, even though this lease's other methods keep working until
14359: it is closed. A load already running when ``close()`` starts
14360: finishes.
14361:
14362: Arguments mirror :meth:`QuestDB.dataframe`.
14363: """
14364: cdef QuestDB handle
+14365: self._lock_enter('dataframe')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_dataframe); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14365, __pyx_L1_error)
+14366: try:
/*try:*/ {
+14367: self._check_open('dataframe')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_dataframe); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14367, __pyx_L4_error)
+14368: self._check_not_in_row('dataframe')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_not_in_row(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_dataframe); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14368, __pyx_L4_error)
+14369: handle = self._enter_call_locked()
__pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14369, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_2); __pyx_t_2 = 0;
14370: # The lock is held for the whole load, as in every method of a
14371: # lease, which one thread uses at a time. That keeps the call
14372: # count visible only to the thread running the call: a
14373: # `close()` from the caller's own Python mid-plan is refused as
14374: # re-entry, and one from another thread waits for the load.
+14375: try:
/*try:*/ {
+14376: handle.dataframe(
__pyx_t_3 = ((PyObject *)__pyx_v_handle);
__Pyx_INCREF(__pyx_t_3);
/* … */
#endif
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[8] = {__pyx_t_3, __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_5 = __pyx_mstate_global->__pyx_tuple[50];
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14376, __pyx_L7_error)
__Pyx_INCREF(__pyx_t_5);
#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_5 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 6);
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14376, __pyx_L7_error)
__Pyx_GOTREF(__pyx_t_5);
}
#endif
__pyx_t_2 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_dataframe, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_5);
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14376, __pyx_L7_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
}
/* … */
{
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[50] = __Pyx_PyTuple_FromArray(__pyx_temp, 6); if (unlikely(!__pyx_mstate_global->__pyx_tuple[50])) __PYX_ERR(0, 14376, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[50]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[50]);
14377: df,
14378: table_name=table_name,
14379: table_name_col=table_name_col,
14380: symbols=symbols,
14381: at=at,
14382: max_rows_per_batch=max_rows_per_batch,
+14383: schema_overrides=schema_overrides)
#if CYTHON_VECTORCALL
14384: finally:
+14385: self._exit_call_locked(handle)
/*finally:*/ {
/*normal exit:*/{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14385, __pyx_L4_error)
goto __pyx_L8;
}
__pyx_L7_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
if ( unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__pyx_t_6 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14385, __pyx_L10_error)
}
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ErrRestore(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
__pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_7; __pyx_filename = __pyx_t_8;
goto __pyx_L4_error;
__pyx_L10_error:;
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
goto __pyx_L4_error;
}
__pyx_L8:;
}
}
14386: finally:
+14387: self._lock.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_5 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_5);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14387, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
goto __pyx_L5;
}
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9);
if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_9);
__pyx_t_7 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_8 = __pyx_filename;
{
__pyx_t_5 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_5);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14387, __pyx_L12_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
}
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_10, __pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ErrRestore(__pyx_t_14, __pyx_t_13, __pyx_t_12);
__pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0;
__pyx_lineno = __pyx_t_7; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_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_L5:;
}
+14388: 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;
14389:
+14390: def __len__(self):
/* Python wrapper */ static Py_ssize_t __pyx_pw_7questdb_7_client_12PooledSender_9__len__(PyObject *__pyx_v_self); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledSender_8__len__, "Number of buffered (unpublished) rows."); #if CYTHON_UPDATE_DESCRIPTOR_DOC struct wrapperbase __pyx_wrapperbase_7questdb_7_client_12PooledSender_8__len__; #endif static Py_ssize_t __pyx_pw_7questdb_7_client_12PooledSender_9__len__(PyObject *__pyx_v_self) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; Py_ssize_t __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_8__len__(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static Py_ssize_t __pyx_pf_7questdb_7_client_12PooledSender_8__len__(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self) { Py_ssize_t __pyx_r; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_11); __Pyx_XDECREF(__pyx_t_12); __Pyx_AddTraceback("questdb._client.PooledSender.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; }
14391: """Number of buffered (unpublished) rows."""
+14392: self._lock_enter('__len__')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_len); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14392, __pyx_L1_error)
+14393: try:
/*try:*/ {
+14394: self._check_open('__len__')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_len); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14394, __pyx_L4_error)
+14395: return line_sender_buffer_row_count(self._buffer._impl)
{
__pyx_r = line_sender_buffer_row_count(__pyx_v_self->_buffer->_impl);
}
goto __pyx_L3_return;
}
14396: finally:
+14397: self._lock.release()
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
__Pyx_ExceptionSwap(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
if ( unlikely(__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0)) __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_5);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__pyx_t_2 = __pyx_lineno; __pyx_t_3 = __pyx_clineno; __pyx_t_4 = __pyx_filename;
{
__pyx_t_12 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_12);
__pyx_t_13 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_12, NULL};
__pyx_t_11 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_13, (1-__pyx_t_13) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 14397, __pyx_L7_error)
__Pyx_GOTREF(__pyx_t_11);
}
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
}
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ErrRestore(__pyx_t_5, __pyx_t_6, __pyx_t_7);
__pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
__pyx_lineno = __pyx_t_2; __pyx_clineno = __pyx_t_3; __pyx_filename = __pyx_t_4;
goto __pyx_L1_error;
__pyx_L7_error:;
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
goto __pyx_L1_error;
}
__pyx_L3_return: {
__pyx_t_14 = __pyx_r;
__pyx_t_12 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_12);
__pyx_t_13 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_12, NULL};
__pyx_t_11 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_13, (1-__pyx_t_13) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 14397, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
}
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
__pyx_r = __pyx_t_14;
goto __pyx_L0;
}
}
14398:
+14399: def flush(self, *, bint wait=False):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_11flush(PyObject *__pyx_v_self, #if CYTHON_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, 14399, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 0: break; default: goto __pyx_L5_argtuple_error; } if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, 0, __pyx_kwds_len, "flush", 0) < (0)) __PYX_ERR(0, 14399, __pyx_L3_error) } else if (unlikely(__pyx_nargs != 0)) { goto __pyx_L5_argtuple_error; } else { } if (values[0]) { __pyx_v_wait = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_wait == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 14399, __pyx_L3_error) } else { __pyx_v_wait = ((int)0); } } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("flush", 1, 0, 0, __pyx_nargs); __PYX_ERR(0, 14399, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.PooledSender.flush", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_10flush(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self), __pyx_v_wait); /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_10flush(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, int __pyx_v_wait) { struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_12); __Pyx_AddTraceback("questdb._client.PooledSender.flush", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_handle); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 14399, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_wait, Py_False) < (0)) __PYX_ERR(0, 14399, __pyx_L1_error) __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_11flush, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_flush, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[252])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 14399, __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_18); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_flush, __pyx_t_25) < (0)) __PYX_ERR(0, 14399, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
14400: """
14401: Publish and clear buffered rows.
14402:
14403: By default this returns after local store-and-forward acceptance.
14404: Pass ``wait=True`` to wait for the server's OK acknowledgement of
14405: everything published through this lease. The wait is a pure ack
14406: barrier: only a terminal connection failure raises. Server
14407: rejections are delivered to the pool's ``error_handler``
14408: (default: the ``questdb`` logger) instead; retriable ones are
14409: replayed by the store-and-forward queue.
14410: """
14411: cdef QuestDB handle
+14412: self._lock_enter('flush')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14412, __pyx_L1_error)
+14413: try:
/*try:*/ {
+14414: handle = self._enter_call_locked()
__pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14414, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_2); __pyx_t_2 = 0;
+14415: try:
/*try:*/ {
+14416: self._flush_locked(wait)
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_flush_locked(__pyx_v_self, __pyx_v_wait); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14416, __pyx_L7_error)
}
14417: finally:
+14418: self._exit_call_locked(handle)
/*finally:*/ {
/*normal exit:*/{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14418, __pyx_L4_error)
goto __pyx_L8;
}
__pyx_L7_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14418, __pyx_L10_error)
}
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
goto __pyx_L4_error;
__pyx_L10_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
goto __pyx_L4_error;
}
__pyx_L8:;
}
}
14419: finally:
+14420: self._lock.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_12 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_12);
__pyx_t_13 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_12, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_13, (1-__pyx_t_13) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14420, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
goto __pyx_L5;
}
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6);
if ( unlikely(__Pyx_GetException(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_6);
__pyx_t_4 = __pyx_lineno; __pyx_t_3 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
{
__pyx_t_12 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_12);
__pyx_t_13 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_12, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_13, (1-__pyx_t_13) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14420, __pyx_L12_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
}
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_8, __pyx_t_7, __pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ErrRestore(__pyx_t_11, __pyx_t_10, __pyx_t_9);
__pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0;
__pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_3; __pyx_filename = __pyx_t_5;
goto __pyx_L1_error;
__pyx_L12_error:;
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_8, __pyx_t_7, __pyx_t_6);
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0;
goto __pyx_L1_error;
}
__pyx_L5:;
}
+14421: return self
{
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;
14422:
+14423: def wait(self, timeout_millis=0):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_13wait(PyObject *__pyx_v_self, #if CYTHON_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 When it expires this raises ``QuestDBError`` with ``code`` set to\n ``QuestDBErrorCode.FailoverRetry`` and the rows stay queued. While the\n lease cannot reconnect because an attached OIDC provider needs a new\n sign-in, that error is :class:`~questdb.auth.OidcInteractionRequired`.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_13wait = {"wait", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_13wait, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledSender_12wait}; static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_13wait(PyObject *__pyx_v_self, #if CYTHON_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, 14423, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 14423, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "wait", 0) < (0)) __PYX_ERR(0, 14423, __pyx_L3_error) if (!values[0]) values[0] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); } else { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 14423, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } if (!values[0]) values[0] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); } __pyx_v_timeout_millis = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("wait", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 14423, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.PooledSender.wait", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_12wait(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self), __pyx_v_timeout_millis); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_12wait(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyObject *__pyx_v_timeout_millis) { struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("questdb._client.PooledSender.wait", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_handle); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_13wait, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_wait, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[253])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 14423, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25); #endif __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_25, __pyx_mstate_global->__pyx_tuple[16]); if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_wait, __pyx_t_25) < (0)) __PYX_ERR(0, 14423, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
14424: """
14425: Wait for everything published through this lease to receive an OK
14426: ack; returns immediately if this lease published nothing.
14427:
14428: The wait is a pure ack barrier: only a terminal connection failure
14429: raises. Server rejections are delivered to the pool's
14430: ``error_handler`` (default: the ``questdb`` logger) instead.
14431:
14432: ``timeout_millis`` is a no-progress timeout; ``0`` waits indefinitely.
14433: When it expires this raises ``QuestDBError`` with ``code`` set to
14434: ``QuestDBErrorCode.FailoverRetry`` and the rows stay queued. While the
14435: lease cannot reconnect because an attached OIDC provider needs a new
14436: sign-in, that error is :class:`~questdb.auth.OidcInteractionRequired`.
14437: """
+14438: if not isinstance(timeout_millis, int) or isinstance(timeout_millis, bool):
__pyx_t_2 = PyLong_Check(__pyx_v_timeout_millis); __pyx_t_3 = (!__pyx_t_2); if (!__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; goto __pyx_L4_bool_binop_done; } __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_timeout_millis, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); __pyx_t_1 = __pyx_t_3; __pyx_L4_bool_binop_done:; if (unlikely(__pyx_t_1)) { /* … */ }
+14439: raise TypeError('"timeout_millis" must be a non-negative int.')
__pyx_t_5 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_timeout_millis_must_be_a_non_ne};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14439, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 14439, __pyx_L1_error)
+14440: if timeout_millis < 0:
__pyx_t_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, 14440, __pyx_L1_error) if (unlikely(__pyx_t_1)) { /* … */ }
+14441: raise ValueError('timeout_millis must be non-negative.')
__pyx_t_5 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_timeout_millis_must_be_non_negat};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14441, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 14441, __pyx_L1_error)
14442: cdef QuestDB handle
+14443: self._lock_enter('wait')
__pyx_t_7 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_wait); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14443, __pyx_L1_error)
+14444: try:
/*try:*/ {
+14445: self._check_open('wait')
__pyx_t_7 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_wait); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14445, __pyx_L8_error)
+14446: handle = self._enter_call_locked()
__pyx_t_4 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14446, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_4); __pyx_t_4 = 0;
+14447: try:
/*try:*/ {
+14448: self._wait_locked(<uint64_t>timeout_millis)
__pyx_t_8 = __Pyx_PyLong_As_uint64_t(__pyx_v_timeout_millis); if (unlikely((__pyx_t_8 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 14448, __pyx_L11_error) __pyx_t_7 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_wait_locked(__pyx_v_self, ((uint64_t)__pyx_t_8)); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14448, __pyx_L11_error) }
14449: finally:
+14450: self._exit_call_locked(handle)
/*finally:*/ {
/*normal exit:*/{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14450, __pyx_L8_error)
goto __pyx_L12;
}
__pyx_L11_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
if ( unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__pyx_t_9 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_11 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14450, __pyx_L14_error)
}
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_ErrRestore(__pyx_t_12, __pyx_t_13, __pyx_t_14);
__pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
__pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_11;
goto __pyx_L8_error;
__pyx_L14_error:;
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17);
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
goto __pyx_L8_error;
}
__pyx_L12:;
}
}
14451: finally:
+14452: self._lock.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_5 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_5);
__pyx_t_6 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
__pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14452, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L9;
}
__pyx_L8_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_ExceptionSwap(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12);
if ( unlikely(__Pyx_GetException(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15) < 0)) __Pyx_ErrFetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_12);
__pyx_t_10 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_11 = __pyx_filename;
{
__pyx_t_5 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_5);
__pyx_t_6 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
__pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14452, __pyx_L16_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
}
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_14, __pyx_t_13, __pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ErrRestore(__pyx_t_17, __pyx_t_16, __pyx_t_15);
__pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0;
__pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_11;
goto __pyx_L1_error;
__pyx_L16_error:;
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_14, __pyx_t_13, __pyx_t_12);
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0;
goto __pyx_L1_error;
}
__pyx_L9:;
}
+14453: return self
{
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;
14454:
+14455: def flush_and_get_fsn(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_15flush_and_get_fsn(PyObject *__pyx_v_self, #if CYTHON_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_13); __Pyx_AddTraceback("questdb._client.PooledSender.flush_and_get_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_handle); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_15flush_and_get_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_flush_and_get_fsn, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[254])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 14455, __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_PooledSender, __pyx_mstate_global->__pyx_n_u_flush_and_get_fsn, __pyx_t_25) < (0)) __PYX_ERR(0, 14455, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
14456: """
14457: Publish and clear buffered rows, returning the frame sequence
14458: number (FSN) of the published frame, or ``None`` if the buffer was
14459: empty.
14460:
14461: FSNs are watermarks of the lease's pooled connection: use them for
14462: progress tracking while this lease is held (see
14463: :meth:`await_acked_fsn`); they are not portable receipts across
14464: leases, which may borrow different connections. Configure
14465: ``auto_flush=off`` when this call must publish and identify one whole
14466: application batch; auto-flush may already have published and cleared
14467: some or all buffered rows.
14468: """
+14469: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+14470: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
14471: cdef line_sender_qwpws_fsn fsn
+14472: cdef bint ok = False
__pyx_v_ok = 0;
14473: cdef QuestDB handle
+14474: self._lock_enter('flush_and_get_fsn')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush_and_get_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14474, __pyx_L1_error)
+14475: try:
/*try:*/ {
+14476: self._check_open('flush_and_get_fsn')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush_and_get_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14476, __pyx_L4_error)
+14477: self._check_not_in_row('flush_and_get_fsn')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_not_in_row(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush_and_get_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14477, __pyx_L4_error)
+14478: handle = self._enter_call_locked()
__pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14478, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_2); __pyx_t_2 = 0;
+14479: try:
/*try:*/ {
+14480: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+14481: ok = qwp_sender_flush_buffer_and_get_fsn(
__pyx_v_ok = qwp_sender_flush_buffer_and_get_fsn(__pyx_v_self->_qwp, __pyx_v_self->_buffer->_impl, (&__pyx_v_fsn), (&__pyx_v_err));
14482: self._qwp, self._buffer._impl, &fsn, &err)
+14483: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+14484: if not ok:
__pyx_t_3 = (!__pyx_v_ok);
if (unlikely(__pyx_t_3)) {
/* … */
}
+14485: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14485, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 14485, __pyx_L7_error)
+14486: qdb_pystr_buf_clear(self._buffer._b)
qdb_pystr_buf_clear(__pyx_v_self->_buffer->_b);
+14487: self._batch_started_ms = 0
__pyx_v_self->_batch_started_ms = 0;
}
14488: finally:
+14489: self._exit_call_locked(handle)
/*finally:*/ {
/*normal exit:*/{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14489, __pyx_L4_error)
goto __pyx_L8;
}
__pyx_L7_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
if ( unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14489, __pyx_L11_error)
}
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
__pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
__pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
goto __pyx_L4_error;
__pyx_L11_error:;
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
goto __pyx_L4_error;
}
__pyx_L8:;
}
}
14490: finally:
+14491: self._lock.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_13 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_13);
__pyx_t_14 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_13, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_14, (1-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14491, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
goto __pyx_L5;
}
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7);
if ( unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_7);
__pyx_t_5 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
{
__pyx_t_13 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_13);
__pyx_t_14 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_13, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_14, (1-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14491, __pyx_L13_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
}
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_ErrRestore(__pyx_t_12, __pyx_t_11, __pyx_t_10);
__pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0;
__pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_6;
goto __pyx_L1_error;
__pyx_L13_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7);
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0;
goto __pyx_L1_error;
}
__pyx_L5:;
}
+14492: return fsn.value if fsn.has_value else None
__pyx_t_3 = (__pyx_v_fsn.has_value != 0);
if (__pyx_t_3) {
__pyx_t_13 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 14492, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_13);
__pyx_t_2 = __pyx_t_13;
__pyx_t_13 = 0;
} else {
__Pyx_INCREF(Py_None);
__pyx_t_2 = Py_None;
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_2;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_2 = 0;
goto __pyx_L0;
14493:
+14494: def flush_and_keep_and_get_fsn(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_17flush_and_keep_and_get_fsn(PyObject *__pyx_v_self, #if CYTHON_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_13); __Pyx_AddTraceback("questdb._client.PooledSender.flush_and_keep_and_get_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_handle); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_17flush_and_keep_and_get_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_flush_and_keep_and, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[255])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 14494, __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_PooledSender, __pyx_mstate_global->__pyx_n_u_flush_and_keep_and_get_fsn, __pyx_t_25) < (0)) __PYX_ERR(0, 14494, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
14495: """
14496: Publish buffered rows without clearing the buffer, returning the
14497: published frame's FSN, or ``None`` if the buffer was empty.
14498: """
+14499: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+14500: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
14501: cdef line_sender_qwpws_fsn fsn
+14502: cdef bint ok = False
__pyx_v_ok = 0;
14503: cdef QuestDB handle
+14504: self._lock_enter('flush_and_keep_and_get_fsn')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush_and_keep_and_get_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14504, __pyx_L1_error)
+14505: try:
/*try:*/ {
+14506: self._check_open('flush_and_keep_and_get_fsn')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush_and_keep_and_get_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14506, __pyx_L4_error)
+14507: self._check_not_in_row('flush_and_keep_and_get_fsn')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_not_in_row(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush_and_keep_and_get_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14507, __pyx_L4_error)
+14508: handle = self._enter_call_locked()
__pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14508, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_2); __pyx_t_2 = 0;
+14509: try:
/*try:*/ {
+14510: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+14511: ok = qwp_sender_flush_buffer_and_keep_and_get_fsn(
__pyx_v_ok = qwp_sender_flush_buffer_and_keep_and_get_fsn(__pyx_v_self->_qwp, __pyx_v_self->_buffer->_impl, (&__pyx_v_fsn), (&__pyx_v_err));
14512: self._qwp, self._buffer._impl, &fsn, &err)
+14513: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+14514: if not ok:
__pyx_t_3 = (!__pyx_v_ok);
if (unlikely(__pyx_t_3)) {
/* … */
}
+14515: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14515, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 14515, __pyx_L7_error)
+14516: if fsn.has_value:
__pyx_t_3 = (__pyx_v_fsn.has_value != 0);
if (__pyx_t_3) {
/* … */
}
}
+14517: self._batch_started_ms = (
__pyx_v_self->_batch_started_ms = __Pyx_div_int64_t(line_sender_now_micros(), 0x3E8, 1);
14518: line_sender_now_micros() // 1000)
14519: finally:
+14520: self._exit_call_locked(handle)
/*finally:*/ {
/*normal exit:*/{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14520, __pyx_L4_error)
goto __pyx_L8;
}
__pyx_L7_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
if ( unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14520, __pyx_L12_error)
}
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
__pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
__pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
goto __pyx_L4_error;
__pyx_L12_error:;
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
goto __pyx_L4_error;
}
__pyx_L8:;
}
}
14521: finally:
+14522: self._lock.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_13 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_13);
__pyx_t_14 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_13, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_14, (1-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14522, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
goto __pyx_L5;
}
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7);
if ( unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_7);
__pyx_t_5 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
{
__pyx_t_13 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_13);
__pyx_t_14 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_13, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_14, (1-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14522, __pyx_L14_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
}
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_ErrRestore(__pyx_t_12, __pyx_t_11, __pyx_t_10);
__pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0;
__pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_6;
goto __pyx_L1_error;
__pyx_L14_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7);
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0;
goto __pyx_L1_error;
}
__pyx_L5:;
}
+14523: return fsn.value if fsn.has_value else None
__pyx_t_3 = (__pyx_v_fsn.has_value != 0);
if (__pyx_t_3) {
__pyx_t_13 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 14523, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_13);
__pyx_t_2 = __pyx_t_13;
__pyx_t_13 = 0;
} else {
__Pyx_INCREF(Py_None);
__pyx_t_2 = Py_None;
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_2;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_2 = 0;
goto __pyx_L0;
14524:
+14525: def poll_error(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_19poll_error(PyObject *__pyx_v_self, #if CYTHON_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_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("questdb._client.PooledSender.poll_error", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_19poll_error, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_poll_error, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[256])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 14525, __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_PooledSender, __pyx_mstate_global->__pyx_n_u_poll_error, __pyx_t_25) < (0)) __PYX_ERR(0, 14525, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
14526: """
14527: Poll the next server-rejection diagnostic recorded on the lease's
14528: connection since this lease was borrowed, as a
14529: :class:`SenderError`, or ``None`` when none is pending.
14530:
14531: The pool's ``error_handler`` independently receives every rejection
14532: the moment it is recorded; polling here is a per-lease pull
14533: alternative for code that wants diagnostics inline.
14534: """
+14535: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+14536: cdef line_sender_qwpws_error* c_error = NULL
__pyx_v_c_error = NULL;
14537: cdef line_sender_qwpws_error_view view
+14538: self._lock_enter('poll_error')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_poll_error); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14538, __pyx_L1_error)
+14539: try:
/*try:*/ {
+14540: self._check_open('poll_error')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_poll_error); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14540, __pyx_L4_error)
+14541: if not qwp_sender_poll_error(self._qwp, &c_error, &err):
__pyx_t_2 = (!qwp_sender_poll_error(__pyx_v_self->_qwp, (&__pyx_v_c_error), (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
+14542: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14542, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 14542, __pyx_L4_error)
+14543: if c_error == NULL:
__pyx_t_2 = (__pyx_v_c_error == NULL);
if (__pyx_t_2) {
/* … */
}
+14544: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L3_return;
+14545: try:
/*try:*/ {
+14546: view = line_sender_qwpws_error_get_view(c_error)
__pyx_v_view = line_sender_qwpws_error_get_view(__pyx_v_c_error);
+14547: return _sender_error_from_raw(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_sender_error_from_raw); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14547, __pyx_L9_error)
__Pyx_GOTREF(__pyx_t_5);
+14548: c_sender_error_view_to_raw(view))
__pyx_t_6 = __pyx_f_7questdb_7_client_c_sender_error_view_to_raw(__pyx_v_view); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14548, __pyx_L9_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_6}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14547, __pyx_L9_error) __Pyx_GOTREF(__pyx_t_3); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L8_return; }
14549: finally:
+14550: line_sender_qwpws_error_free(c_error)
/*finally:*/ {
__pyx_L9_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_ExceptionSwap(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
if ( unlikely(__Pyx_GetException(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13) < 0)) __Pyx_ErrFetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__pyx_t_8 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_10 = __pyx_filename;
{
line_sender_qwpws_error_free(__pyx_v_c_error);
}
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_ExceptionReset(__pyx_t_14, __pyx_t_15, __pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ErrRestore(__pyx_t_11, __pyx_t_12, __pyx_t_13);
__pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
__pyx_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_10;
goto __pyx_L4_error;
}
__pyx_L8_return: {
__pyx_t_16 = __pyx_r;
__pyx_r = 0;
line_sender_qwpws_error_free(__pyx_v_c_error);
__pyx_r = __pyx_t_16;
__pyx_t_16 = 0;
goto __pyx_L3_return;
}
}
}
14551: finally:
+14552: self._lock.release()
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_ExceptionSwap(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11);
if ( unlikely(__Pyx_GetException(&__pyx_t_16, &__pyx_t_15, &__pyx_t_14) < 0)) __Pyx_ErrFetch(&__pyx_t_16, &__pyx_t_15, &__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_11);
__pyx_t_9 = __pyx_lineno; __pyx_t_8 = __pyx_clineno; __pyx_t_10 = __pyx_filename;
{
__pyx_t_5 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_5);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14552, __pyx_L14_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
}
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_13, __pyx_t_12, __pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_ErrRestore(__pyx_t_16, __pyx_t_15, __pyx_t_14);
__pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0;
__pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_8; __pyx_filename = __pyx_t_10;
goto __pyx_L1_error;
__pyx_L14_error:;
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_13, __pyx_t_12, __pyx_t_11);
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0;
goto __pyx_L1_error;
}
__pyx_L3_return: {
__pyx_t_11 = __pyx_r;
__pyx_r = 0;
__pyx_t_5 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_5);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14552, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_r = __pyx_t_11;
__pyx_t_11 = 0;
goto __pyx_L0;
}
}
14553:
+14554: def error_events_dropped(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_21error_events_dropped(PyObject *__pyx_v_self, #if CYTHON_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_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("questdb._client.PooledSender.error_events_dropped", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_21error_events_dropped, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_error_events_droppe, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[257])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 14554, __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_PooledSender, __pyx_mstate_global->__pyx_n_u_error_events_dropped, __pyx_t_25) < (0)) __PYX_ERR(0, 14554, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
14555: """
14556: Diagnostics dropped from the lease's connection ring
14557: (``error_inbox_capacity``).
14558: """
+14559: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+14560: cdef uint64_t dropped = 0
__pyx_v_dropped = 0;
+14561: self._lock_enter('error_events_dropped')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_error_events_dropped); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14561, __pyx_L1_error)
+14562: try:
/*try:*/ {
+14563: self._check_open('error_events_dropped')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_error_events_dropped); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14563, __pyx_L4_error)
+14564: if not qwp_sender_error_events_dropped(
__pyx_t_2 = (!qwp_sender_error_events_dropped(__pyx_v_self->_qwp, (&__pyx_v_dropped), (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
}
14565: self._qwp, &dropped, &err):
+14566: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14566, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 14566, __pyx_L4_error)
14567: finally:
+14568: self._lock.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_4 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14568, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L5;
}
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
if ( unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__pyx_t_6 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename;
{
__pyx_t_4 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14568, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
}
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ErrRestore(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
__pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_7; __pyx_filename = __pyx_t_8;
goto __pyx_L1_error;
__pyx_L8_error:;
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
goto __pyx_L1_error;
}
__pyx_L5:;
}
+14569: return dropped
__pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_dropped); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14569, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
14570:
+14571: def published_fsn(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_23published_fsn(PyObject *__pyx_v_self, #if CYTHON_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_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("questdb._client.PooledSender.published_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_23published_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_published_fsn, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[258])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 14571, __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_PooledSender, __pyx_mstate_global->__pyx_n_u_published_fsn, __pyx_t_25) < (0)) __PYX_ERR(0, 14571, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
14572: """
14573: Highest FSN published locally on the lease's pooled connection, or
14574: ``None`` if nothing has been published on it yet.
14575: """
+14576: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
14577: cdef line_sender_qwpws_fsn fsn
+14578: self._lock_enter('published_fsn')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_published_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14578, __pyx_L1_error)
+14579: try:
/*try:*/ {
+14580: self._check_open('published_fsn')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_published_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14580, __pyx_L4_error)
+14581: if not qwp_sender_published_fsn(self._qwp, &fsn, &err):
__pyx_t_2 = (!qwp_sender_published_fsn(__pyx_v_self->_qwp, (&__pyx_v_fsn), (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
}
+14582: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14582, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 14582, __pyx_L4_error)
14583: finally:
+14584: self._lock.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_4 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14584, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L5;
}
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
if ( unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__pyx_t_6 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename;
{
__pyx_t_4 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14584, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
}
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ErrRestore(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
__pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_7; __pyx_filename = __pyx_t_8;
goto __pyx_L1_error;
__pyx_L8_error:;
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
goto __pyx_L1_error;
}
__pyx_L5:;
}
+14585: return fsn.value if fsn.has_value else None
__pyx_t_2 = (__pyx_v_fsn.has_value != 0);
if (__pyx_t_2) {
__pyx_t_4 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14585, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_3 = __pyx_t_4;
__pyx_t_4 = 0;
} else {
__Pyx_INCREF(Py_None);
__pyx_t_3 = Py_None;
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_3;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_3 = 0;
goto __pyx_L0;
14586:
+14587: def acked_fsn(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_25acked_fsn(PyObject *__pyx_v_self, #if CYTHON_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_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("questdb._client.PooledSender.acked_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_25acked_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_acked_fsn, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[259])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 14587, __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_PooledSender, __pyx_mstate_global->__pyx_n_u_acked_fsn, __pyx_t_25) < (0)) __PYX_ERR(0, 14587, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
14588: """
14589: Highest FSN completed on the lease's pooled connection by ACK or
14590: drop-and-continue rejection, or ``None`` if no frame has completed
14591: yet. A completed frame is not necessarily applied: a rejected frame
14592: the queue drops to make progress also advances this watermark.
14593: """
+14594: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
14595: cdef line_sender_qwpws_fsn fsn
+14596: self._lock_enter('acked_fsn')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_acked_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14596, __pyx_L1_error)
+14597: try:
/*try:*/ {
+14598: self._check_open('acked_fsn')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_acked_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14598, __pyx_L4_error)
+14599: if not qwp_sender_acked_fsn(self._qwp, &fsn, &err):
__pyx_t_2 = (!qwp_sender_acked_fsn(__pyx_v_self->_qwp, (&__pyx_v_fsn), (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
}
+14600: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14600, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 14600, __pyx_L4_error)
14601: finally:
+14602: self._lock.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_4 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14602, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L5;
}
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
if ( unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__pyx_t_6 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename;
{
__pyx_t_4 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14602, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
}
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ErrRestore(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
__pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_7; __pyx_filename = __pyx_t_8;
goto __pyx_L1_error;
__pyx_L8_error:;
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
goto __pyx_L1_error;
}
__pyx_L5:;
}
+14603: return fsn.value if fsn.has_value else None
__pyx_t_2 = (__pyx_v_fsn.has_value != 0);
if (__pyx_t_2) {
__pyx_t_4 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14603, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_3 = __pyx_t_4;
__pyx_t_4 = 0;
} else {
__Pyx_INCREF(Py_None);
__pyx_t_3 = Py_None;
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_3;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_3 = 0;
goto __pyx_L0;
14604:
+14605: def await_acked_fsn(self, fsn, timeout_millis=0):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_27await_acked_fsn(PyObject *__pyx_v_self, #if CYTHON_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). Terminal connection failures raise. A wait from\n an OIDC persistence callback can also raise retryable\n :class:`~questdb.auth.OidcInteractionRequired` when reconnecting would\n depend on that callback returning. The publication remains queued:\n return from the callback and retry the ACK wait, not the publication.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_27await_acked_fsn = {"await_acked_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_27await_acked_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledSender_26await_acked_fsn}; static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_27await_acked_fsn(PyObject *__pyx_v_self, #if CYTHON_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, 14605, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 14605, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 14605, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "await_acked_fsn", 0) < (0)) __PYX_ERR(0, 14605, __pyx_L3_error) if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("await_acked_fsn", 0, 1, 2, i); __PYX_ERR(0, 14605, __pyx_L3_error) } } } else { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 14605, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 14605, __pyx_L3_error) break; default: goto __pyx_L5_argtuple_error; } if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); } __pyx_v_fsn = values[0]; __pyx_v_timeout_millis = values[1]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("await_acked_fsn", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 14605, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.PooledSender.await_acked_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_26await_acked_fsn(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self), __pyx_v_fsn, __pyx_v_timeout_millis); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_26await_acked_fsn(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyObject *__pyx_v_fsn, PyObject *__pyx_v_timeout_millis) { struct line_sender_error *__pyx_v_err; PyThreadState *__pyx_v_gs; uint64_t __pyx_v_c_fsn; uint64_t __pyx_v_c_timeout_millis; struct line_sender_qwpws_fsn __pyx_v_acked; int __pyx_v_ok; struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_10); __Pyx_AddTraceback("questdb._client.PooledSender.await_acked_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_handle); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_27await_acked_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_await_acked_fsn, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[260])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 14605, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25); #endif __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_25, __pyx_mstate_global->__pyx_tuple[16]); if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_await_acked_fsn, __pyx_t_25) < (0)) __PYX_ERR(0, 14605, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
14606: """
14607: Wait until the acknowledgement watermark reaches ``fsn`` (as
14608: returned by :meth:`flush_and_get_fsn` on this lease).
14609:
14610: Returns ``True`` once ``fsn`` is acknowledged, or ``False`` if the
14611: no-progress timeout elapsed before ``fsn`` was acknowledged (``0``
14612: waits indefinitely). Terminal connection failures raise. A wait from
14613: an OIDC persistence callback can also raise retryable
14614: :class:`~questdb.auth.OidcInteractionRequired` when reconnecting would
14615: depend on that callback returning. The publication remains queued:
14616: return from the callback and retry the ACK wait, not the publication.
14617: """
+14618: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+14619: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
14620: cdef uint64_t c_fsn
14621: cdef uint64_t c_timeout_millis
14622: cdef line_sender_qwpws_fsn acked
+14623: cdef bint ok = False
__pyx_v_ok = 0;
14624: cdef QuestDB handle
+14625: if not isinstance(fsn, int) or isinstance(fsn, bool):
__pyx_t_2 = PyLong_Check(__pyx_v_fsn); __pyx_t_3 = (!__pyx_t_2); if (!__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; goto __pyx_L4_bool_binop_done; } __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_fsn, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); __pyx_t_1 = __pyx_t_3; __pyx_L4_bool_binop_done:; if (unlikely(__pyx_t_1)) { /* … */ }
+14626: raise TypeError('"fsn" must be a non-negative int.')
__pyx_t_5 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_fsn_must_be_a_non_negative_int};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14626, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 14626, __pyx_L1_error)
+14627: if fsn < 0:
__pyx_t_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, 14627, __pyx_L1_error) if (unlikely(__pyx_t_1)) { /* … */ }
+14628: raise ValueError('"fsn" must be a non-negative int.')
__pyx_t_5 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_fsn_must_be_a_non_negative_int};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14628, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 14628, __pyx_L1_error)
+14629: if not isinstance(timeout_millis, int) or isinstance(timeout_millis, bool):
__pyx_t_3 = PyLong_Check(__pyx_v_timeout_millis); __pyx_t_2 = (!__pyx_t_3); if (!__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L8_bool_binop_done; } __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_timeout_millis, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); __pyx_t_1 = __pyx_t_2; __pyx_L8_bool_binop_done:; if (unlikely(__pyx_t_1)) { /* … */ }
+14630: raise TypeError('"timeout_millis" must be a non-negative int.')
__pyx_t_5 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_timeout_millis_must_be_a_non_ne};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14630, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 14630, __pyx_L1_error)
+14631: if timeout_millis < 0:
__pyx_t_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, 14631, __pyx_L1_error) if (unlikely(__pyx_t_1)) { /* … */ }
+14632: raise ValueError('"timeout_millis" must be a non-negative int.')
__pyx_t_5 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_timeout_millis_must_be_a_non_ne};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14632, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 14632, __pyx_L1_error)
+14633: c_fsn = fsn
__pyx_t_7 = __Pyx_PyLong_As_uint64_t(__pyx_v_fsn); if (unlikely((__pyx_t_7 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 14633, __pyx_L1_error) __pyx_v_c_fsn = __pyx_t_7;
+14634: c_timeout_millis = timeout_millis
__pyx_t_7 = __Pyx_PyLong_As_uint64_t(__pyx_v_timeout_millis); if (unlikely((__pyx_t_7 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 14634, __pyx_L1_error) __pyx_v_c_timeout_millis = __pyx_t_7;
+14635: self._lock_enter('await_acked_fsn')
__pyx_t_8 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_await_acked_fsn); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14635, __pyx_L1_error)
+14636: try:
/*try:*/ {
+14637: self._check_open('await_acked_fsn')
__pyx_t_8 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_await_acked_fsn); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14637, __pyx_L12_error)
+14638: handle = self._enter_call_locked()
__pyx_t_4 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14638, __pyx_L12_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_4); __pyx_t_4 = 0;
+14639: try:
/*try:*/ {
+14640: if not qwp_sender_acked_fsn(self._qwp, &acked, &err):
__pyx_t_1 = (!qwp_sender_acked_fsn(__pyx_v_self->_qwp, (&__pyx_v_acked), (&__pyx_v_err)));
if (unlikely(__pyx_t_1)) {
/* … */
}
+14641: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14641, __pyx_L15_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 14641, __pyx_L15_error)
+14642: if acked.has_value and acked.value >= c_fsn:
__pyx_t_2 = (__pyx_v_acked.has_value != 0);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L19_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_acked.value >= __pyx_v_c_fsn);
__pyx_t_1 = __pyx_t_2;
__pyx_L19_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+14643: return True
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(Py_True);
__pyx_r = Py_True;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L14_return;
14644: # The barrier drains every frame published so far (a
14645: # superset of ``fsn``); a no-progress expiry surfaces as
14646: # FailoverRetry.
+14647: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+14648: ok = qwp_sender_wait(
__pyx_v_ok = qwp_sender_wait(__pyx_v_self->_qwp, qwpws_ack_level_ok, __pyx_v_c_timeout_millis, (&__pyx_v_err));
14649: self._qwp,
14650: qwpws_ack_level.qwpws_ack_level_ok,
14651: c_timeout_millis,
14652: &err)
+14653: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+14654: if not ok:
__pyx_t_1 = (!__pyx_v_ok);
if (__pyx_t_1) {
/* … */
}
+14655: if line_sender_error_get_code(err) != \
__pyx_t_1 = (line_sender_error_get_code(__pyx_v_err) != line_sender_error_failover_retry);
if (unlikely(__pyx_t_1)) {
/* … */
}
14656: line_sender_error_failover_retry:
+14657: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14657, __pyx_L15_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 14657, __pyx_L15_error)
+14658: line_sender_error_free(err)
line_sender_error_free(__pyx_v_err);
+14659: err = NULL
__pyx_v_err = NULL;
14660: # Re-read the watermark: the wait either drained ``fsn``
14661: # or expired with no progress; the current ack level is
14662: # the answer.
+14663: if not qwp_sender_acked_fsn(self._qwp, &acked, &err):
__pyx_t_1 = (!qwp_sender_acked_fsn(__pyx_v_self->_qwp, (&__pyx_v_acked), (&__pyx_v_err)));
if (unlikely(__pyx_t_1)) {
/* … */
}
+14664: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14664, __pyx_L15_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 14664, __pyx_L15_error)
+14665: return bool(acked.has_value and acked.value >= c_fsn)
__pyx_t_5 = NULL;
if (__pyx_v_acked.has_value) {
} else {
__pyx_t_10 = __Pyx_PyLong_From_bool(__pyx_v_acked.has_value); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 14665, __pyx_L15_error)
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_9 = __pyx_t_10;
__pyx_t_10 = 0;
goto __pyx_L24_bool_binop_done;
}
__pyx_t_1 = (__pyx_v_acked.value >= __pyx_v_c_fsn);
__pyx_t_10 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 14665, __pyx_L15_error)
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_9 = __pyx_t_10;
__pyx_t_10 = 0;
__pyx_L24_bool_binop_done:;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_9};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14665, __pyx_L15_error)
__Pyx_GOTREF((PyObject *)__pyx_t_4);
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = ((PyObject *)__pyx_t_4);
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_4 = 0;
goto __pyx_L14_return;
}
14666: finally:
+14667: self._exit_call_locked(handle)
/*finally:*/ {
__pyx_L15_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_19);
__pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14667, __pyx_L27_error)
}
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
__pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
goto __pyx_L12_error;
__pyx_L27_error:;
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
goto __pyx_L12_error;
}
__pyx_L14_return: {
__pyx_t_19 = __pyx_r;
__pyx_r = 0;
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14667, __pyx_L12_error)
__pyx_r = __pyx_t_19;
__pyx_t_19 = 0;
goto __pyx_L11_return;
}
}
}
14668: finally:
+14669: self._lock.release()
/*finally:*/ {
__pyx_L12_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_15, &__pyx_t_14);
if ( unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_19);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_14);
__pyx_t_12 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
{
__pyx_t_9 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_9);
__pyx_t_6 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_9, NULL};
__pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14669, __pyx_L29_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
}
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_ExceptionReset(__pyx_t_16, __pyx_t_15, __pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_ErrRestore(__pyx_t_19, __pyx_t_18, __pyx_t_17);
__pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0;
__pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_13;
goto __pyx_L1_error;
__pyx_L29_error:;
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_ExceptionReset(__pyx_t_16, __pyx_t_15, __pyx_t_14);
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0;
goto __pyx_L1_error;
}
__pyx_L11_return: {
__pyx_t_14 = __pyx_r;
__pyx_r = 0;
__pyx_t_9 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_9);
__pyx_t_6 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_9, NULL};
__pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14669, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_r = __pyx_t_14;
__pyx_t_14 = 0;
goto __pyx_L0;
}
}
14670:
+14671: def close(self, flush: bool=True, wait: bool=False):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_29close(PyObject *__pyx_v_self, #if CYTHON_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, 14671, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 14671, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 14671, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "close", 0) < (0)) __PYX_ERR(0, 14671, __pyx_L3_error) if (!values[0]) values[0] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_True)); if (!values[1]) values[1] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_False)); } else { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 14671, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 14671, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } if (!values[0]) values[0] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_True)); if (!values[1]) values[1] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_False)); } __pyx_v_flush = ((PyLongObject *)values[0]); __pyx_v_wait = ((PyLongObject *)values[1]); } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("close", 0, 0, 2, __pyx_nargs); __PYX_ERR(0, 14671, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.PooledSender.close", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_flush), __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, 0, "flush", 0))) __PYX_ERR(0, 14671, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_wait), __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, 0, "wait", 0))) __PYX_ERR(0, 14671, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_28close(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self), __pyx_v_flush, __pyx_v_wait); /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_28close(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyLongObject *__pyx_v_flush, PyLongObject *__pyx_v_wait) { struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_14); __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_25 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 14671, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_flush, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(0, 14671, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_wait, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(0, 14671, __pyx_L1_error) __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_29close, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_close, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[261])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 14671, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_18, __pyx_mstate_global->__pyx_tuple[97]); __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_18, __pyx_t_25); __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_close, __pyx_t_18) < (0)) __PYX_ERR(0, 14671, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
14672: """
14673: Return this sender to its pool. Idempotent.
14674:
14675: Pending rows are published by default; delivery is owned by the
14676: store-and-forward queue, which keeps delivering after the sender
14677: is returned. ``wait=True`` additionally waits for an OK ack before
14678: returning the sender to the pool; without it, a later server
14679: rejection of this lease's rows is reported through the pool's
14680: ``error_handler`` (default: the ``questdb`` logger).
14681: """
14682: cdef QuestDB handle
+14683: self._lock_enter('close')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_close); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14683, __pyx_L1_error)
+14684: try:
/*try:*/ {
14685: # A part-way-through row is the sharper diagnosis and names
14686: # the buffer, so it is asked first; the broader "inside one
14687: # of this lease's own calls" answers everything else.
+14688: self._check_not_in_row('close')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_not_in_row(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_close); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14688, __pyx_L4_error)
+14689: self._check_not_mid_call('close')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_not_mid_call(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_close); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14689, __pyx_L4_error)
+14690: handle = self._enter_call_locked()
__pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14690, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_2); __pyx_t_2 = 0;
+14691: try:
/*try:*/ {
+14692: try:
/*try:*/ {
+14693: if flush and self._qwp != NULL:
__pyx_t_4 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_flush)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 14693, __pyx_L10_error) if (__pyx_t_4) { } else { __pyx_t_3 = __pyx_t_4; goto __pyx_L13_bool_binop_done; } __pyx_t_4 = (__pyx_v_self->_qwp != NULL); __pyx_t_3 = __pyx_t_4; __pyx_L13_bool_binop_done:; if (__pyx_t_3) { /* … */ } }
+14694: self._flush_locked(wait)
__pyx_t_3 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_wait)); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 14694, __pyx_L10_error) __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_flush_locked(__pyx_v_self, __pyx_t_3); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14694, __pyx_L10_error)
14695: finally:
+14696: self._release_locked()
/*finally:*/ {
/*normal exit:*/{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_release_locked(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14696, __pyx_L7_error)
goto __pyx_L11;
}
__pyx_L10_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
if ( unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__pyx_t_5 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_7 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_release_locked(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14696, __pyx_L16_error)
}
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_ErrRestore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
__pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
__pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_7;
goto __pyx_L7_error;
__pyx_L16_error:;
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
goto __pyx_L7_error;
}
__pyx_L11:;
}
}
14697: finally:
+14698: self._exit_call_locked(handle)
/*finally:*/ {
/*normal exit:*/{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14698, __pyx_L4_error)
goto __pyx_L8;
}
__pyx_L7_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8);
if ( unlikely(__Pyx_GetException(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_8);
__pyx_t_6 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_7 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14698, __pyx_L18_error)
}
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_9, __pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ErrRestore(__pyx_t_13, __pyx_t_12, __pyx_t_11);
__pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0;
__pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_7;
goto __pyx_L4_error;
__pyx_L18_error:;
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_9, __pyx_t_8);
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0;
goto __pyx_L4_error;
}
__pyx_L8:;
}
}
14699: finally:
+14700: self._lock.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_14 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_14);
__pyx_t_15 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_14, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_15, (1-__pyx_t_15) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14700, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
goto __pyx_L5;
}
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
if ( unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__pyx_t_5 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_7 = __pyx_filename;
{
__pyx_t_14 = __pyx_v_self->_lock;
__Pyx_INCREF(__pyx_t_14);
__pyx_t_15 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_14, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_15, (1-__pyx_t_15) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14700, __pyx_L20_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
}
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_ErrRestore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
__pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
__pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_7;
goto __pyx_L1_error;
__pyx_L20_error:;
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
goto __pyx_L1_error;
}
__pyx_L5:;
}
14701:
+14702: def __exit__(self, exc_type, exc_val, exc_tb):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_31__exit__(PyObject *__pyx_v_self,
#if CYTHON_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, 14702, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 14702, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 14702, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 14702, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__exit__", 0) < (0)) __PYX_ERR(0, 14702, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, i); __PYX_ERR(0, 14702, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 3)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 14702, __pyx_L3_error)
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 14702, __pyx_L3_error)
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 14702, __pyx_L3_error)
}
__pyx_v_exc_type = values[0];
__pyx_v_exc_val = values[1];
__pyx_v_exc_tb = values[2];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 14702, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.PooledSender.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_30__exit__(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self), __pyx_v_exc_type, __pyx_v_exc_val, __pyx_v_exc_tb);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_30__exit__(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyObject *__pyx_v_exc_type, CYTHON_UNUSED PyObject *__pyx_v_exc_val, CYTHON_UNUSED PyObject *__pyx_v_exc_tb) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.PooledSender.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_31__exit__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender___exit, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[262])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 14702, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
#endif
if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_exit, __pyx_t_18) < (0)) __PYX_ERR(0, 14702, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+14703: self.close(exc_type is None, False)
__pyx_t_2 = ((PyObject *)__pyx_v_self); __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = (__pyx_v_exc_type == Py_None); __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14703, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = 0; { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_4, Py_False}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_close, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 14703, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
14704:
+14705: def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_7questdb_7_client_12PooledSender_33__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7questdb_7_client_12PooledSender_33__dealloc__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_pf_7questdb_7_client_12PooledSender_32__dealloc__(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
}
static void __pyx_pf_7questdb_7_client_12PooledSender_32__dealloc__(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self) {
size_t __pyx_v_discarded;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_WriteUnraisable("questdb._client.PooledSender.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
+14706: cdef size_t discarded = 0
__pyx_v_discarded = 0;
+14707: if self._lock is None:
__pyx_t_1 = (__pyx_v_self->_lock == Py_None);
if (__pyx_t_1) {
/* … */
}
+14708: return
{
}
goto __pyx_L0;
+14709: with self._lock:
/*with:*/ {
__pyx_t_2 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14709, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_4 = NULL;
__pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14709, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_6 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_5))) {
__pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
assert(__pyx_t_4);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
__Pyx_INCREF(__pyx_t_4);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
__pyx_t_6 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14709, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
goto __pyx_L13_try_end;
__pyx_L8_error:;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledSender.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_5, &__pyx_t_4) < 0) __PYX_ERR(0, 14709, __pyx_L10_except_error)
__Pyx_XGOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_5);
__Pyx_XGOTREF(__pyx_t_4);
{
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, 14709, __pyx_L10_except_error)
__Pyx_GOTREF(__pyx_t_11);
}
__pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_11, NULL);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 14709, __pyx_L10_except_error)
__Pyx_GOTREF(__pyx_t_12);
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_12);
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
if (__pyx_t_1 < (0)) __PYX_ERR(0, 14709, __pyx_L10_except_error)
__pyx_t_10 = (!__pyx_t_1);
if (unlikely(__pyx_t_10)) {
__Pyx_GIVEREF(__pyx_t_3);
__Pyx_GIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ErrRestoreWithState(__pyx_t_3, __pyx_t_5, __pyx_t_4);
__pyx_t_3 = 0; __pyx_t_5 = 0; __pyx_t_4 = 0;
__PYX_ERR(0, 14709, __pyx_L10_except_error)
}
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L9_exception_handled;
}
__pyx_L10_except_error:;
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
goto __pyx_L1_error;
__pyx_L9_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
__pyx_L13_try_end:;
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_2) {
__pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 14709, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
}
goto __pyx_L7;
}
__pyx_L7:;
}
goto __pyx_L20;
__pyx_L4_error:;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
goto __pyx_L1_error;
__pyx_L20:;
}
+14710: if self._qwp != NULL and self._buffer is not None:
__pyx_t_10 = (__pyx_v_self->_qwp != NULL);
if (__pyx_t_10) {
} else {
__pyx_t_1 = __pyx_t_10;
goto __pyx_L15_bool_binop_done;
}
__pyx_t_10 = (((PyObject *)__pyx_v_self->_buffer) != Py_None);
__pyx_t_1 = __pyx_t_10;
__pyx_L15_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+14711: discarded = line_sender_buffer_row_count(self._buffer._impl)
__pyx_v_discarded = line_sender_buffer_row_count(__pyx_v_self->_buffer->_impl);
+14712: self._release_locked()
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_release_locked(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14712, __pyx_L8_error)
+14713: if discarded != 0:
__pyx_t_10 = (__pyx_v_discarded != 0);
if (__pyx_t_10) {
/* … */
}
+14714: _log_discarded_lease_rows(discarded)
__pyx_f_7questdb_7_client__log_discarded_lease_rows(__pyx_v_discarded);
14715:
14716:
+14717: cdef void _log_discarded_lease_rows(size_t rows) noexcept:
static void __pyx_f_7questdb_7_client__log_discarded_lease_rows(size_t __pyx_v_rows) {
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_WriteUnraisable("questdb._client._log_discarded_lease_rows", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
14718: """Report the rows a lease collected without ``close()`` took with it.
14719:
14720: Called from ``PooledSender.__dealloc__``, which cannot flush them: a
14721: lease reaches it only once nothing refers to it, often during garbage
14722: collection or interpreter exit. Without this record the rows would
14723: vanish with nothing said. Deallocation cannot report an error either,
14724: so a logging handler that raises, or a ``logging`` module already
14725: torn down at interpreter exit, costs the record and nothing else.
14726: """
+14727: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L8_try_end;
__pyx_L3_error:;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
__pyx_L5_except_error:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L1_error;
__pyx_L4_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
__pyx_L8_try_end:;
}
+14728: logging.getLogger('questdb').warning(
__pyx_t_7 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 14728, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 14728, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_10 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_9))) {
__pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9);
assert(__pyx_t_7);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
__Pyx_INCREF(__pyx_t_7);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
__pyx_t_10 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_n_u_questdb};
__pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14728, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_6);
}
__pyx_t_5 = __pyx_t_6;
__Pyx_INCREF(__pyx_t_5);
14729: 'questdb: a PooledSender lease was garbage-collected without '
14730: 'close(), discarding %d buffered row(s) that were never sent. '
14731: 'Close every lease, or use it in a `with` block, so that its '
14732: 'rows are flushed.',
+14733: rows)
__pyx_t_9 = __Pyx_PyLong_FromSize_t(__pyx_v_rows); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 14733, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = 0; { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_questdb_a_PooledSender_lease_was, __pyx_t_9}; __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_warning, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14728, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+14734: except BaseException:
__pyx_t_11 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_11) { __Pyx_ErrRestore(0,0,0); goto __pyx_L4_exception_handled; } goto __pyx_L5_except_error;
14735: pass
14736:
14737:
+14738: @cython.no_gc_clear
struct __pyx_obj_7questdb_7_client_PooledReader {
PyObject_HEAD
struct __pyx_vtabstruct_7questdb_7_client_PooledReader *__pyx_vtab;
struct __pyx_obj_7questdb_7_client_QuestDB *_handle;
struct __pyx_obj_7questdb_7_client__ReaderHandle *_reader;
struct __pyx_obj_7questdb_7_client__CursorHandle *_last_cursor;
PyObject *_lock;
int _query_in_flight;
unsigned long _query_thread;
int64_t _call_depth;
};
/* … */
struct __pyx_vtabstruct_7questdb_7_client_PooledReader {
void (*_attach)(struct __pyx_obj_7questdb_7_client_PooledReader *, struct __pyx_obj_7questdb_7_client_QuestDB *, struct __pyx_obj_7questdb_7_client__ReaderHandle *);
int (*_query_blocks)(struct __pyx_obj_7questdb_7_client_PooledReader *);
__pyx_t_7questdb_7_client_void_int (*_check_open)(struct __pyx_obj_7questdb_7_client_PooledReader *, PyObject *);
struct __pyx_obj_7questdb_7_client_QuestDB *(*_enter_call_locked)(struct __pyx_obj_7questdb_7_client_PooledReader *);
void (*_exit_call_locked)(struct __pyx_obj_7questdb_7_client_PooledReader *, struct __pyx_obj_7questdb_7_client_QuestDB *);
__pyx_t_7questdb_7_client_void_int (*_check_not_mid_call)(struct __pyx_obj_7questdb_7_client_PooledReader *, PyObject *);
void (*_release_locked)(struct __pyx_obj_7questdb_7_client_PooledReader *);
void (*_release_finalizer_locked)(struct __pyx_obj_7questdb_7_client_PooledReader *);
};
static struct __pyx_vtabstruct_7questdb_7_client_PooledReader *__pyx_vtabptr_7questdb_7_client_PooledReader;
14739: cdef class PooledReader:
14740: """
14741: A reader lease borrowed from a :class:`QuestDB` pool.
14742:
14743: The read-side twin of :meth:`QuestDB.sender`: obtain a lease with
14744: :meth:`QuestDB.reader`; it holds one pooled reader connection for
14745: its lifetime and runs queries on it sequentially via :meth:`query`.
14746: ``close()`` (or leaving the ``with`` block) releases the
14747: connection: back to the pool if the last query reached its terminal
14748: on a live connection (a clean drain, a successful ``cancel()``, or a
14749: server-side error such as a parse error or a query timeout), dropped
14750: otherwise.
14751:
14752: Queries are strictly sequential — one result at a time. Fully drain
14753: (or ``close()``) each :class:`QueryResult` before calling
14754: :meth:`query` again; running the next query while the previous
14755: result is still open raises ``QuestDBError``. Closing an undrained
14756: result terminates the lease; call ``result.cancel()`` before
14757: ``result.close()`` to preserve it.
14758:
14759: Because every query shares one connection, passing
14760: ``reset_symbol_dict=False`` to follow-up queries keeps the
14761: connection's SYMBOL dictionary warm across them instead of
14762: resetting it per query.
14763:
14764: The lease counts as an active use of the :class:`QuestDB` handle
14765: (``QuestDB.close()`` waits for it) and has thread affinity: use one
14766: lease per thread, on the thread that created it. A
14767: :class:`QueryResult` returned by the lease may be handed to a worker
14768: under that result's thread hand-off rules; wait for it to finish
14769: before using the lease again.
14770: """
14771: cdef QuestDB _handle
14772: cdef _ReaderHandle _reader
14773: cdef _CursorHandle _last_cursor
14774: cdef object _lock
14775: cdef bint _query_in_flight
14776: # The thread whose query is in flight. See `_query_blocks`.
14777: cdef unsigned long _query_thread
14778: cdef int64_t _call_depth
14779:
+14780: def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_12PooledReader_1__cinit__(PyObject *__pyx_v_self,
#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;
}
+14781: self._handle = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_handle); __Pyx_DECREF_SET(__pyx_v_self->_handle, ((struct __pyx_obj_7questdb_7_client_QuestDB *)Py_None));
+14782: self._reader = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_reader); __Pyx_DECREF_SET(__pyx_v_self->_reader, ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)Py_None));
+14783: self._last_cursor = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_last_cursor); __Pyx_DECREF_SET(__pyx_v_self->_last_cursor, ((struct __pyx_obj_7questdb_7_client__CursorHandle *)Py_None));
+14784: self._lock = threading.RLock()
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14784, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_RLock); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14784, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 14784, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v_self->_lock); __Pyx_DECREF_SET(__pyx_v_self->_lock, __pyx_t_1); __pyx_t_1 = 0;
+14785: self._query_in_flight = False
__pyx_v_self->_query_in_flight = 0;
+14786: self._query_thread = 0
__pyx_v_self->_query_thread = 0;
+14787: self._call_depth = 0
__pyx_v_self->_call_depth = 0;
14788:
+14789: cdef void _attach(
static void __pyx_f_7questdb_7_client_12PooledReader__attach(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self, struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle, struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_v_reader) {
/* … */
/* function exit code */
__Pyx_RefNannyFinishContext();
}
14790: self,
14791: QuestDB handle,
14792: _ReaderHandle reader) noexcept:
+14793: self._handle = handle
__Pyx_INCREF((PyObject *)__pyx_v_handle); __Pyx_GIVEREF((PyObject *)__pyx_v_handle); __Pyx_GOTREF((PyObject *)__pyx_v_self->_handle); __Pyx_DECREF_SET(__pyx_v_self->_handle, __pyx_v_handle);
+14794: self._reader = reader
__Pyx_INCREF((PyObject *)__pyx_v_reader); __Pyx_GIVEREF((PyObject *)__pyx_v_reader); __Pyx_GOTREF((PyObject *)__pyx_v_self->_reader); __Pyx_DECREF_SET(__pyx_v_self->_reader, __pyx_v_reader);
14795:
+14796: cdef bint _query_blocks(self) except -1:
static int __pyx_f_7questdb_7_client_12PooledReader__query_blocks(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client.PooledReader._query_blocks", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
return __pyx_r;
}
14797: """Whether a query in flight on this lease refuses a call outright.
14798:
14799: A query runs the caller's Python on its own thread before the native
14800: call starts -- `_bind_query_params` reads `value.bytes` off every bind
14801: value -- and what that code calls back into is answered by the lease's
14802: own rules: `close()` is refused as re-entry (`_check_not_mid_call`), a
14803: second query is refused by the reader, and `__enter__` hands the lease
14804: back. Python that runs while the native call itself is in progress --
14805: an OIDC callback on the querying thread -- and any call from another
14806: thread are refused here instead.
14807: """
+14808: if not self._query_in_flight:
__pyx_t_1 = (!__pyx_v_self->_query_in_flight);
if (__pyx_t_1) {
/* … */
}
+14809: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+14810: if self._query_thread != PyThread_get_thread_ident():
__pyx_t_1 = (__pyx_v_self->_query_thread != PyThread_get_thread_ident());
if (__pyx_t_1) {
/* … */
}
+14811: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+14812: return _oidc_callback_on_this_thread()
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_callback_on_this_thread(); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 14812, __pyx_L1_error)
{
__pyx_r = __pyx_t_1;
}
goto __pyx_L0;
14813:
+14814: cdef void_int _check_open(self, str method) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_12PooledReader__check_open(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self, PyObject *__pyx_v_method) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.PooledReader._check_open", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+14815: if self._query_blocks():
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_query_blocks(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 14815, __pyx_L1_error)
if (unlikely(__pyx_t_1)) {
/* … */
}
+14816: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14816, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+14817: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14817, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14817, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+14818: f"{method}() can't be called during a reader query.")
__pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14818, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_during_a_reader); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 14818, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_7}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14816, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 14816, __pyx_L1_error)
+14819: if self._reader is None:
__pyx_t_1 = (((PyObject *)__pyx_v_self->_reader) == Py_None);
if (unlikely(__pyx_t_1)) {
/* … */
}
+14820: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 14820, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
+14821: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14821, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14821, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+14822: f"{method}() can't be called: the reader lease is closed.")
__pyx_t_6 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14822, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_the_reader_leas); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14822, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_3, __pyx_t_5}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14820, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 14820, __pyx_L1_error)
14823:
+14824: cdef QuestDB _enter_call_locked(self):
static struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_f_7questdb_7_client_12PooledReader__enter_call_locked(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self) {
struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0;
struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.PooledReader._enter_call_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_handle);
__Pyx_XGIVEREF((PyObject *)__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
14825: """Count one of this lease's own calls, on the lease and on the
14826: handle it was borrowed from. Called with `self._lock` held.
14827:
14828: The mirror of `PooledSender._enter_call_locked`, and for the same
14829: two reasons: `QuestDB.close()` has to be able to see that the
14830: frame it would wait for is its own caller, and `close()` here has
14831: to be able to tell a call on *this* lease from a call somewhere
14832: else on the handle.
14833:
14834: A query runs the caller's Python while it holds the lease --
14835: `_bind_query_params` reads `value.bytes` off every bind parameter
14836: it is handed -- so this is the read side's re-entrancy window.
14837: """
+14838: cdef QuestDB handle = self._handle
__pyx_t_1 = ((PyObject *)__pyx_v_self->_handle);
__Pyx_INCREF(__pyx_t_1);
__pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_1);
__pyx_t_1 = 0;
+14839: self._call_depth += 1
__pyx_v_self->_call_depth = (__pyx_v_self->_call_depth + 1);
+14840: if handle is not None:
__pyx_t_2 = (((PyObject *)__pyx_v_handle) != Py_None);
if (__pyx_t_2) {
/* … */
}
+14841: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L1_error;
__pyx_L9_try_end:;
}
+14842: handle._enter_scoped_call()
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_handle->__pyx_vtab)->_enter_scoped_call(__pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14842, __pyx_L4_error)
+14843: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledReader._enter_call_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 14843, __pyx_L6_except_error)
__Pyx_XGOTREF(__pyx_t_1);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_7);
+14844: self._call_depth -= 1
__pyx_v_self->_call_depth = (__pyx_v_self->_call_depth - 1);
+14845: raise
__Pyx_GIVEREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_6); __Pyx_XGIVEREF(__pyx_t_7); __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_6, __pyx_t_7); __pyx_t_1 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __PYX_ERR(0, 14845, __pyx_L6_except_error) }
+14846: return handle
{
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;
14847:
+14848: cdef void _exit_call_locked(self, QuestDB handle) except *:
static void __pyx_f_7questdb_7_client_12PooledReader__exit_call_locked(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self, struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle) {
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client.PooledReader._exit_call_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
}
14849: # The handle's thread-local update can raise; this lease is no longer
14850: # in its call either way, so unwind its guard first.
+14851: self._call_depth -= 1
__pyx_v_self->_call_depth = (__pyx_v_self->_call_depth - 1);
+14852: if handle is not None:
__pyx_t_1 = (((PyObject *)__pyx_v_handle) != Py_None);
if (__pyx_t_1) {
/* … */
}
+14853: handle._exit_scoped_call()
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_handle->__pyx_vtab)->_exit_scoped_call(__pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14853, __pyx_L1_error)
14854:
+14855: cdef void_int _check_not_mid_call(self, str method) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_12PooledReader__check_not_mid_call(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self, PyObject *__pyx_v_method) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.PooledReader._check_not_mid_call", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
14856: """
14857: Refuse a call that would end this lease while one of its own
14858: calls is still running: the reader connection would go back to
14859: the pool with the call still reading from it.
14860: """
+14861: if self._call_depth != 0:
__pyx_t_1 = (__pyx_v_self->_call_depth != 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+14862: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14862, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+14863: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14863, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14863, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+14864: f"{method}() can't be called from inside a call on this "
__pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14864, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_from_inside_a_c_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 14864, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_7}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14862, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 14862, __pyx_L1_error)
14865: 'reader lease. It would release the connection while '
14866: 'that call is still using it. Close the lease after the '
14867: 'call returns.')
14868:
+14869: cdef void _release_locked(self) except *:
static void __pyx_f_7questdb_7_client_12PooledReader__release_locked(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self) {
struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_v_reader = 0;
struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_last = 0;
struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_AddTraceback("questdb._client.PooledReader._release_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_reader);
__Pyx_XDECREF((PyObject *)__pyx_v_last);
__Pyx_XDECREF((PyObject *)__pyx_v_handle);
__Pyx_RefNannyFinishContext();
}
+14870: cdef _ReaderHandle reader = self._reader
__pyx_t_1 = ((PyObject *)__pyx_v_self->_reader);
__Pyx_INCREF(__pyx_t_1);
__pyx_v_reader = ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)__pyx_t_1);
__pyx_t_1 = 0;
+14871: cdef _CursorHandle last = self._last_cursor
__pyx_t_1 = ((PyObject *)__pyx_v_self->_last_cursor);
__Pyx_INCREF(__pyx_t_1);
__pyx_v_last = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_1);
__pyx_t_1 = 0;
+14872: cdef QuestDB handle = self._handle
__pyx_t_1 = ((PyObject *)__pyx_v_self->_handle);
__Pyx_INCREF(__pyx_t_1);
__pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_1);
__pyx_t_1 = 0;
+14873: if self._query_blocks():
__pyx_t_2 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_query_blocks(__pyx_v_self); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 14873, __pyx_L1_error)
if (unlikely(__pyx_t_2)) {
/* … */
}
+14874: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14874, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+14875: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14875, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14875, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_PooledReader_close_cannot_releas}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 14874, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 14874, __pyx_L1_error)
14876: 'PooledReader.close() cannot release a reader during a query.')
+14877: if last is not None:
__pyx_t_2 = (((PyObject *)__pyx_v_last) != Py_None);
if (__pyx_t_2) {
/* … */
}
+14878: last._check_not_driving('PooledReader.close', check_lock=True)
__pyx_t_9.__pyx_n = 1;
__pyx_t_9.check_lock = 1;
__pyx_t_8 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_last->__pyx_vtab)->_check_not_driving(__pyx_v_last, __pyx_mstate_global->__pyx_kp_u_PooledReader_close, &__pyx_t_9); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14878, __pyx_L1_error)
+14879: if reader is None:
__pyx_t_2 = (((PyObject *)__pyx_v_reader) == Py_None);
if (__pyx_t_2) {
/* … */
}
+14880: return
{
}
goto __pyx_L0;
+14881: self._reader = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_reader); __Pyx_DECREF_SET(__pyx_v_self->_reader, ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)Py_None));
+14882: self._last_cursor = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_last_cursor); __Pyx_DECREF_SET(__pyx_v_self->_last_cursor, ((struct __pyx_obj_7questdb_7_client__CursorHandle *)Py_None));
+14883: self._handle = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_handle); __Pyx_DECREF_SET(__pyx_v_self->_handle, ((struct __pyx_obj_7questdb_7_client_QuestDB *)Py_None));
+14884: try:
/*try:*/ {
+14885: if last is not None:
__pyx_t_2 = (((PyObject *)__pyx_v_last) != Py_None);
if (__pyx_t_2) {
/* … */
}
}
+14886: last._close()
__pyx_t_10 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_last->__pyx_vtab)->_close(__pyx_v_last); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 14886, __pyx_L7_error)
14887: finally:
+14888: if last is not None and last._cursor != NULL:
/*finally:*/ {
/*normal exit:*/{
__pyx_t_11 = (((PyObject *)__pyx_v_last) != Py_None);
if (__pyx_t_11) {
} else {
__pyx_t_2 = __pyx_t_11;
goto __pyx_L11_bool_binop_done;
}
__pyx_t_11 = (__pyx_v_last->_cursor != NULL);
__pyx_t_2 = __pyx_t_11;
__pyx_L11_bool_binop_done:;
if (__pyx_t_2) {
/* … */
}
/* … */
__pyx_t_11 = (((PyObject *)__pyx_v_last) != Py_None);
if (__pyx_t_11) {
} else {
__pyx_t_2 = __pyx_t_11;
goto __pyx_L18_bool_binop_done;
}
__pyx_t_11 = (__pyx_v_last->_cursor != NULL);
__pyx_t_2 = __pyx_t_11;
__pyx_L18_bool_binop_done:;
if (__pyx_t_2) {
/* … */
}
14889: # Deferred or interrupted: whoever frees the cursor closes
14890: # the reader.
+14891: last._owns_reader = True
__pyx_v_last->_owns_reader = 1;
/* … */
__pyx_v_last->_owns_reader = 1;
+14892: reader = None
__Pyx_INCREF(Py_None); __Pyx_DECREF_SET(__pyx_v_reader, ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)Py_None)); /* … */ __Pyx_INCREF(Py_None); __Pyx_DECREF_SET(__pyx_v_reader, ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)Py_None));
+14893: if reader is not None:
__pyx_t_2 = (((PyObject *)__pyx_v_reader) != Py_None);
if (__pyx_t_2) {
/* … */
}
/* … */
__pyx_t_2 = (((PyObject *)__pyx_v_reader) != Py_None);
if (__pyx_t_2) {
/* … */
}
+14894: reader._close()
((struct __pyx_vtabstruct_7questdb_7_client__ReaderHandle *)__pyx_v_reader->__pyx_vtab)->_close(__pyx_v_reader, NULL);
/* … */
((struct __pyx_vtabstruct_7questdb_7_client__ReaderHandle *)__pyx_v_reader->__pyx_vtab)->_close(__pyx_v_reader, NULL);
+14895: if handle is not None:
__pyx_t_2 = (((PyObject *)__pyx_v_handle) != Py_None);
if (__pyx_t_2) {
/* … */
}
goto __pyx_L8;
}
__pyx_L7_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_ExceptionSwap(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
if ( unlikely(__Pyx_GetException(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17) < 0)) __Pyx_ErrFetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_19);
__Pyx_XGOTREF(__pyx_t_20);
__pyx_t_10 = __pyx_lineno; __pyx_t_13 = __pyx_clineno; __pyx_t_14 = __pyx_filename;
{
/* … */
__pyx_t_2 = (((PyObject *)__pyx_v_handle) != Py_None);
if (__pyx_t_2) {
/* … */
}
}
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_20);
__Pyx_ExceptionReset(__pyx_t_18, __pyx_t_19, __pyx_t_20);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_ErrRestore(__pyx_t_15, __pyx_t_16, __pyx_t_17);
__pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
__pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_13; __pyx_filename = __pyx_t_14;
goto __pyx_L1_error;
__pyx_L16_error:;
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_20);
__Pyx_ExceptionReset(__pyx_t_18, __pyx_t_19, __pyx_t_20);
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
goto __pyx_L1_error;
}
__pyx_L8:;
}
+14896: handle._end_db_use(scoped=False)
__pyx_t_12.__pyx_n = 1;
__pyx_t_12.scoped = 0;
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_handle->__pyx_vtab)->_end_db_use(__pyx_v_handle, &__pyx_t_12); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14896, __pyx_L1_error)
/* … */
__pyx_t_12.__pyx_n = 1;
__pyx_t_12.scoped = 0;
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_handle->__pyx_vtab)->_end_db_use(__pyx_v_handle, &__pyx_t_12); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14896, __pyx_L16_error)
14897:
+14898: cdef void _release_finalizer_locked(self) noexcept:
static void __pyx_f_7questdb_7_client_12PooledReader__release_finalizer_locked(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self) {
struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_v_reader = 0;
struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_last = 0;
struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0;
int __pyx_v_reclaimed;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_WriteUnraisable("questdb._client.PooledReader._release_finalizer_locked", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_reader);
__Pyx_XDECREF((PyObject *)__pyx_v_last);
__Pyx_XDECREF((PyObject *)__pyx_v_handle);
__Pyx_RefNannyFinishContext();
}
14899: """Release a GC-owned lease without waiting for a worker cursor."""
+14900: cdef _ReaderHandle reader = self._reader
__pyx_t_1 = ((PyObject *)__pyx_v_self->_reader);
__Pyx_INCREF(__pyx_t_1);
__pyx_v_reader = ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)__pyx_t_1);
__pyx_t_1 = 0;
+14901: cdef _CursorHandle last = self._last_cursor
__pyx_t_1 = ((PyObject *)__pyx_v_self->_last_cursor);
__Pyx_INCREF(__pyx_t_1);
__pyx_v_last = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_1);
__pyx_t_1 = 0;
+14902: cdef QuestDB handle = self._handle
__pyx_t_1 = ((PyObject *)__pyx_v_self->_handle);
__Pyx_INCREF(__pyx_t_1);
__pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_1);
__pyx_t_1 = 0;
+14903: cdef int reclaimed = 0
__pyx_v_reclaimed = 0;
+14904: if reader is None:
__pyx_t_2 = (((PyObject *)__pyx_v_reader) == Py_None);
if (__pyx_t_2) {
/* … */
}
+14905: return
{
}
goto __pyx_L0;
14906: # Clear the lease first so even an unexpected cleanup exception cannot
14907: # make a later finalizer repeat active-use accounting.
+14908: self._reader = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_reader); __Pyx_DECREF_SET(__pyx_v_self->_reader, ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)Py_None));
+14909: self._last_cursor = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_last_cursor); __Pyx_DECREF_SET(__pyx_v_self->_last_cursor, ((struct __pyx_obj_7questdb_7_client__CursorHandle *)Py_None));
+14910: self._handle = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_handle); __Pyx_DECREF_SET(__pyx_v_self->_handle, ((struct __pyx_obj_7questdb_7_client_QuestDB *)Py_None));
+14911: if last is not None:
__pyx_t_2 = (((PyObject *)__pyx_v_last) != Py_None);
if (__pyx_t_2) {
/* … */
}
+14912: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L10_try_end;
__pyx_L5_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
__pyx_L7_except_error:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L1_error;
__pyx_L6_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
__pyx_L10_try_end:;
}
+14913: reclaimed = last._try_reclaim()
__pyx_t_6 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_last->__pyx_vtab)->_try_reclaim(__pyx_v_last); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14913, __pyx_L5_error)
__pyx_v_reclaimed = __pyx_t_6;
+14914: except BaseException:
__pyx_t_6 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_6) { __Pyx_ErrRestore(0,0,0);
+14915: reclaimed = -1
__pyx_v_reclaimed = -1;
goto __pyx_L6_exception_handled;
}
goto __pyx_L7_except_error;
+14916: if reclaimed != -1:
__pyx_t_2 = (__pyx_v_reclaimed != -1L);
if (__pyx_t_2) {
/* … */
}
14917: # Reclaim owns the cursor lock here, so no operation can still be
14918: # using this reader. A busy cursor instead retains `_reader_ref`
14919: # until its lock holder finishes; dropping the local references
14920: # leaves that cursor responsible for eventual reader teardown.
+14921: reader._close()
((struct __pyx_vtabstruct_7questdb_7_client__ReaderHandle *)__pyx_v_reader->__pyx_vtab)->_close(__pyx_v_reader, NULL);
+14922: if handle is not None:
__pyx_t_2 = (((PyObject *)__pyx_v_handle) != Py_None);
if (__pyx_t_2) {
/* … */
}
+14923: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L20_try_end;
__pyx_L15_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
__pyx_L17_except_error:;
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_5, __pyx_t_4, __pyx_t_3);
goto __pyx_L1_error;
__pyx_L16_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_5, __pyx_t_4, __pyx_t_3);
__pyx_L20_try_end:;
}
+14924: handle._end_db_use(scoped=False)
__pyx_t_7.__pyx_n = 1;
__pyx_t_7.scoped = 0;
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_handle->__pyx_vtab)->_end_db_use(__pyx_v_handle, &__pyx_t_7); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14924, __pyx_L15_error)
+14925: except BaseException:
__pyx_t_6 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_6) { __Pyx_ErrRestore(0,0,0); goto __pyx_L16_exception_handled; } goto __pyx_L17_except_error;
14926: # Finalizers cannot propagate. The fields were already cleared,
14927: # so retrying would underflow the active-use count.
14928: pass
14929:
+14930: def __enter__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledReader_3__enter__(PyObject *__pyx_v_self,
#if CYTHON_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_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledReader_3__enter__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledReader___enter, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[265])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 14930, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
#endif
if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledReader, __pyx_mstate_global->__pyx_n_u_enter, __pyx_t_18) < (0)) __PYX_ERR(0, 14930, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+14931: with self._lock:
/*with:*/ {
__pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 14931, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = NULL;
__pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14931, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14931, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
goto __pyx_L12_try_end;
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledReader.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 14931, __pyx_L9_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_3);
{
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, 14931, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_10);
}
__pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_10, NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 14931, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_11);
__pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_11);
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
if (__pyx_t_12 < (0)) __PYX_ERR(0, 14931, __pyx_L9_except_error)
__pyx_t_13 = (!__pyx_t_12);
if (unlikely(__pyx_t_13)) {
__Pyx_GIVEREF(__pyx_t_2);
__Pyx_GIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_4, __pyx_t_3);
__pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_3 = 0;
__PYX_ERR(0, 14931, __pyx_L9_except_error)
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L8_exception_handled;
}
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L1_error;
__pyx_L8_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_L12_try_end:;
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_1) {
__pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 14931, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
goto __pyx_L6;
}
__pyx_L6:;
}
goto __pyx_L16;
__pyx_L3_error:;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L1_error;
__pyx_L16:;
}
+14932: self._check_open('__enter__')
__pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14932, __pyx_L7_error)
+14933: return self
{
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;
14934:
+14935: 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, 14935, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 14935, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 14935, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "query", 0) < (0)) __PYX_ERR(0, 14935, __pyx_L3_error) /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_12PooledReader_4query(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self, PyObject *__pyx_v_sql, PyObject *__pyx_v_binds, int __pyx_v_reset_symbol_dict, PyObject *__pyx_v_timeout) { struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_cursor_handle = 0; struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_last = 0; int64_t __pyx_v_timeout_ms; struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0; int __pyx_v_outer_in_flight; unsigned long __pyx_v_outer_thread; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_15); __Pyx_AddTraceback("questdb._client.PooledReader.query", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_cursor_handle); __Pyx_XDECREF((PyObject *)__pyx_v_last); __Pyx_XDECREF((PyObject *)__pyx_v_handle); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 14935, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); /* … */ __pyx_t_25 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 14935, __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_QueryResult) < (0)) __PYX_ERR(0, 14935, __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[266])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 14935, __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[63]); __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_20, __pyx_t_18); __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_20, __pyx_t_25); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledReader, __pyx_mstate_global->__pyx_n_u_query, __pyx_t_20) < (0)) __PYX_ERR(0, 14935, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
14936: self,
14937: str sql,
+14938: object binds=None,
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
14939: *,
+14940: bint reset_symbol_dict=True,
__pyx_v_reset_symbol_dict = ((int)1);
}
__pyx_v_timeout = values[3];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("query", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 14935, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.PooledReader.query", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sql), (&PyUnicode_Type), 1, "sql", 1))) __PYX_ERR(0, 14937, __pyx_L1_error)
__pyx_r = __pyx_pf_7questdb_7_client_12PooledReader_4query(((struct __pyx_obj_7questdb_7_client_PooledReader *)__pyx_v_self), __pyx_v_sql, __pyx_v_binds, __pyx_v_reset_symbol_dict, __pyx_v_timeout);
/* … */
if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_reset_symbol_dict, Py_True) < (0)) __PYX_ERR(0, 14935, __pyx_L1_error)
+14941: object timeout=None) -> QueryResult:
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("query", 0, 1, 2, i); __PYX_ERR(0, 14935, __pyx_L3_error) } } } else { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 14935, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 14935, __pyx_L3_error) break; default: goto __pyx_L5_argtuple_error; } /* … */ if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None)); } __pyx_v_sql = ((PyObject*)values[0]); __pyx_v_binds = values[1]; if (values[2]) { __pyx_v_reset_symbol_dict = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_reset_symbol_dict == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 14940, __pyx_L3_error) } else { /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_timeout, Py_None) < (0)) __PYX_ERR(0, 14935, __pyx_L1_error)
14942: """
14943: Execute a SQL query on the lease's connection and return a
14944: :class:`QueryResult`.
14945:
14946: ``sql``, ``binds``, ``reset_symbol_dict`` and ``timeout`` behave
14947: exactly as on :meth:`QuestDB.query`, except the query runs on the
14948: reader this lease holds instead of a per-call pool borrow. The
14949: previous query's result must be fully drained (or closed)
14950: first; ``reset_symbol_dict=False`` reuses the connection's
14951: SYMBOL dictionary built up by the lease's earlier queries.
14952: """
14953: cdef _CursorHandle cursor_handle
14954: cdef _CursorHandle last
14955: cdef int64_t timeout_ms
14956: cdef QuestDB handle
14957: cdef bint outer_in_flight
14958: cdef unsigned long outer_thread
+14959: if binds is not None and not isinstance(binds, (list, tuple)):
__pyx_t_2 = (__pyx_v_binds != Py_None);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_3 = PyList_Check(__pyx_v_binds);
if (!__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L6_bool_binop_done;
}
__pyx_t_3 = PyTuple_Check(__pyx_v_binds);
__pyx_t_2 = __pyx_t_3;
__pyx_L6_bool_binop_done:;
__pyx_t_3 = (!__pyx_t_2);
__pyx_t_1 = __pyx_t_3;
__pyx_L4_bool_binop_done:;
if (unlikely(__pyx_t_1)) {
/* … */
}
+14960: raise TypeError(
__pyx_t_5 = NULL;
+14961: '"binds" must be a list or tuple of positional bind '
__pyx_t_6 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_binds_must_be_a_list_or_tuple_o, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14961, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14960, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 14960, __pyx_L1_error)
+14962: f'parameters (or None), not {_fqn(type(binds))}')
__pyx_t_6 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_binds)))); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14962, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 14962, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
14963: # Validated before the lease is touched, so a bad argument is a
14964: # plain TypeError / ValueError and never disturbs the connection.
+14965: timeout_ms = _query_timeout_to_millis(timeout)
__pyx_t_9 = __pyx_f_7questdb_7_client__query_timeout_to_millis(__pyx_v_timeout); if (unlikely(__pyx_t_9 == ((int64_t)-2L))) __PYX_ERR(0, 14965, __pyx_L1_error)
__pyx_v_timeout_ms = __pyx_t_9;
+14966: with self._lock:
/*with:*/ {
__pyx_t_10 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 14966, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_6 = NULL;
__pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14966, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_8 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_5))) {
__pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
assert(__pyx_t_6);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
__Pyx_INCREF(__pyx_t_6);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
__pyx_t_8 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14966, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
goto __pyx_L17_try_end;
__pyx_L12_error:;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledReader.query", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_15, &__pyx_t_4, &__pyx_t_7) < 0) __PYX_ERR(0, 14966, __pyx_L14_except_error)
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_7);
{
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, 14966, __pyx_L14_except_error)
__Pyx_GOTREF(__pyx_t_6);
}
__pyx_t_21 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_6, NULL);
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 14966, __pyx_L14_except_error)
__Pyx_GOTREF(__pyx_t_21);
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_21);
__Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
if (__pyx_t_1 < (0)) __PYX_ERR(0, 14966, __pyx_L14_except_error)
__pyx_t_3 = (!__pyx_t_1);
if (unlikely(__pyx_t_3)) {
__Pyx_GIVEREF(__pyx_t_15);
__Pyx_GIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ErrRestoreWithState(__pyx_t_15, __pyx_t_4, __pyx_t_7);
__pyx_t_15 = 0; __pyx_t_4 = 0; __pyx_t_7 = 0;
__PYX_ERR(0, 14966, __pyx_L14_except_error)
}
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
goto __pyx_L13_exception_handled;
}
__pyx_L14_except_error:;
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
goto __pyx_L1_error;
__pyx_L13_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
__pyx_L17_try_end:;
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_10) {
__pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 14966, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_13);
__Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
}
goto __pyx_L11;
}
__pyx_L11:;
}
goto __pyx_L34;
__pyx_L8_error:;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
goto __pyx_L1_error;
__pyx_L34:;
}
+14967: self._check_open('query')
__pyx_t_14 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_query); if (unlikely(__pyx_t_14 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14967, __pyx_L12_error)
+14968: handle = self._enter_call_locked()
__pyx_t_4 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14968, __pyx_L12_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_4); __pyx_t_4 = 0;
+14969: try:
/*try:*/ {
+14970: last = self._last_cursor
__pyx_t_4 = ((PyObject *)__pyx_v_self->_last_cursor);
__Pyx_INCREF(__pyx_t_4);
__pyx_v_last = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_4);
__pyx_t_4 = 0;
+14971: if last is not None:
__pyx_t_1 = (((PyObject *)__pyx_v_last) != Py_None);
if (__pyx_t_1) {
/* … */
}
+14972: if last._is_live():
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_last->__pyx_vtab)->_is_live(__pyx_v_last); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14972, __pyx_L19_error)
if (unlikely(__pyx_t_1)) {
/* … */
}
+14973: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14973, __pyx_L19_error)
__Pyx_GOTREF(__pyx_t_6);
+14974: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 14974, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 14974, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_15, __pyx_mstate_global->__pyx_kp_u_the_previous_QueryResult_is_stil}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14973, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 14973, __pyx_L19_error)
14975: 'the previous QueryResult is still open: '
14976: 'drain it fully or close() it before '
14977: 'running the next query on this lease.')
+14978: if self._reader._must_close:
if (unlikely(__pyx_v_self->_reader->_must_close)) {
/* … */
}
+14979: raise QuestDBError(
__pyx_t_6 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 14979, __pyx_L19_error)
__Pyx_GOTREF(__pyx_t_15);
+14980: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14980, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 14980, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_15))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_15); assert(__pyx_t_6); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_15); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_15, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_the_lease_s_connection_is_termin}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_15, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14979, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 14979, __pyx_L19_error)
14981: "the lease's connection is terminal: the "
14982: 'previous query did not reach its terminal '
14983: 'frame, so its transport was torn down. close() '
14984: 'this lease and obtain a new one with '
14985: 'QuestDB.reader().')
14986: # Restored rather than cleared: a query re-entered from this
14987: # one's bind values must not end the outer one's guard.
+14988: outer_in_flight = self._query_in_flight
__pyx_t_1 = __pyx_v_self->_query_in_flight;
__pyx_v_outer_in_flight = __pyx_t_1;
+14989: outer_thread = self._query_thread
__pyx_t_16 = __pyx_v_self->_query_thread;
__pyx_v_outer_thread = __pyx_t_16;
+14990: self._query_in_flight = True
__pyx_v_self->_query_in_flight = 1;
+14991: self._query_thread = PyThread_get_thread_ident()
__pyx_v_self->_query_thread = PyThread_get_thread_ident();
+14992: try:
/*try:*/ {
+14993: cursor_handle = _execute_query(
__pyx_t_17.__pyx_n = 3;
__pyx_t_17.reset_symbol_dict = __pyx_v_reset_symbol_dict;
__pyx_t_17.owns_reader = 0;
__pyx_t_17.timeout_ms = __pyx_v_timeout_ms;
__pyx_t_15 = ((PyObject *)__pyx_f_7questdb_7_client__execute_query(((struct __pyx_obj_7questdb_7_client__ReaderHandle *)__pyx_t_4), __pyx_v_sql, __pyx_v_binds, &__pyx_t_17)); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 14993, __pyx_L25_error)
__Pyx_GOTREF(__pyx_t_15);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_v_cursor_handle = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_15);
__pyx_t_15 = 0;
}
+14994: self._reader, sql, binds, reset_symbol_dict, False,
__pyx_t_4 = ((PyObject *)__pyx_v_self->_reader);
__Pyx_INCREF(__pyx_t_4);
14995: timeout_ms)
14996: finally:
+14997: self._query_in_flight = outer_in_flight
/*finally:*/ {
/*normal exit:*/{
__pyx_v_self->_query_in_flight = __pyx_v_outer_in_flight;
/* … */
__pyx_v_self->_query_in_flight = __pyx_v_outer_in_flight;
+14998: self._query_thread = outer_thread
__pyx_v_self->_query_thread = __pyx_v_outer_thread;
goto __pyx_L26;
}
__pyx_L25_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_ExceptionSwap(&__pyx_t_24, &__pyx_t_25, &__pyx_t_26);
if ( unlikely(__Pyx_GetException(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23) < 0)) __Pyx_ErrFetch(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
__Pyx_XGOTREF(__pyx_t_21);
__Pyx_XGOTREF(__pyx_t_22);
__Pyx_XGOTREF(__pyx_t_23);
__Pyx_XGOTREF(__pyx_t_24);
__Pyx_XGOTREF(__pyx_t_25);
__Pyx_XGOTREF(__pyx_t_26);
__pyx_t_18 = __pyx_lineno; __pyx_t_19 = __pyx_clineno; __pyx_t_20 = __pyx_filename;
{
/* … */
__pyx_v_self->_query_thread = __pyx_v_outer_thread;
}
__Pyx_XGIVEREF(__pyx_t_24);
__Pyx_XGIVEREF(__pyx_t_25);
__Pyx_XGIVEREF(__pyx_t_26);
__Pyx_ExceptionReset(__pyx_t_24, __pyx_t_25, __pyx_t_26);
__Pyx_XGIVEREF(__pyx_t_21);
__Pyx_XGIVEREF(__pyx_t_22);
__Pyx_XGIVEREF(__pyx_t_23);
__Pyx_ErrRestore(__pyx_t_21, __pyx_t_22, __pyx_t_23);
__pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0;
__pyx_lineno = __pyx_t_18; __pyx_clineno = __pyx_t_19; __pyx_filename = __pyx_t_20;
goto __pyx_L19_error;
}
__pyx_L26:;
}
+14999: self._last_cursor = cursor_handle
__Pyx_INCREF((PyObject *)__pyx_v_cursor_handle); __Pyx_GIVEREF((PyObject *)__pyx_v_cursor_handle); __Pyx_GOTREF((PyObject *)__pyx_v_self->_last_cursor); __Pyx_DECREF_SET(__pyx_v_self->_last_cursor, __pyx_v_cursor_handle); }
15000: finally:
+15001: self._exit_call_locked(handle)
/*finally:*/ {
/*normal exit:*/{
((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 15001, __pyx_L12_error)
goto __pyx_L20;
}
__pyx_L19_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_26 = 0; __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_ExceptionSwap(&__pyx_t_23, &__pyx_t_22, &__pyx_t_21);
if ( unlikely(__Pyx_GetException(&__pyx_t_26, &__pyx_t_25, &__pyx_t_24) < 0)) __Pyx_ErrFetch(&__pyx_t_26, &__pyx_t_25, &__pyx_t_24);
__Pyx_XGOTREF(__pyx_t_26);
__Pyx_XGOTREF(__pyx_t_25);
__Pyx_XGOTREF(__pyx_t_24);
__Pyx_XGOTREF(__pyx_t_23);
__Pyx_XGOTREF(__pyx_t_22);
__Pyx_XGOTREF(__pyx_t_21);
__pyx_t_19 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_20 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 15001, __pyx_L30_error)
}
__Pyx_XGIVEREF(__pyx_t_23);
__Pyx_XGIVEREF(__pyx_t_22);
__Pyx_XGIVEREF(__pyx_t_21);
__Pyx_ExceptionReset(__pyx_t_23, __pyx_t_22, __pyx_t_21);
__Pyx_XGIVEREF(__pyx_t_26);
__Pyx_XGIVEREF(__pyx_t_25);
__Pyx_XGIVEREF(__pyx_t_24);
__Pyx_ErrRestore(__pyx_t_26, __pyx_t_25, __pyx_t_24);
__pyx_t_26 = 0; __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0;
__pyx_lineno = __pyx_t_19; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_20;
goto __pyx_L12_error;
__pyx_L30_error:;
__Pyx_XGIVEREF(__pyx_t_23);
__Pyx_XGIVEREF(__pyx_t_22);
__Pyx_XGIVEREF(__pyx_t_21);
__Pyx_ExceptionReset(__pyx_t_23, __pyx_t_22, __pyx_t_21);
__Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
__Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
__Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
__pyx_t_23 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0;
goto __pyx_L12_error;
}
__pyx_L20:;
}
+15002: return QueryResult(cursor_handle)
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_QueryResult); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 15002, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); if (unlikely(!__pyx_v_cursor_handle)) { __Pyx_RaiseUnboundLocalError("cursor_handle"); __PYX_ERR(0, 15002, __pyx_L1_error) } __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_15))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_15); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_15); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_15, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_4, ((PyObject *)__pyx_v_cursor_handle)}; __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_15, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 15002, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_7; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_7 = 0; goto __pyx_L0;
15003:
+15004: def execute(self, str sql, object binds=None, *, object timeout=None):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12PooledReader_7execute(PyObject *__pyx_v_self, #if CYTHON_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, 15004, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 15004, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 15004, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "execute", 0) < (0)) __PYX_ERR(0, 15004, __pyx_L3_error) if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("execute", 0, 1, 2, i); __PYX_ERR(0, 15004, __pyx_L3_error) } } } else { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 15004, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 15004, __pyx_L3_error) break; default: goto __pyx_L5_argtuple_error; } if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None)); } __pyx_v_sql = ((PyObject*)values[0]); __pyx_v_binds = values[1]; __pyx_v_timeout = values[2]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("execute", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 15004, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.PooledReader.execute", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sql), (&PyUnicode_Type), 1, "sql", 1))) __PYX_ERR(0, 15004, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_12PooledReader_6execute(((struct __pyx_obj_7questdb_7_client_PooledReader *)__pyx_v_self), __pyx_v_sql, __pyx_v_binds, __pyx_v_timeout); /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_12PooledReader_6execute(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self, PyObject *__pyx_v_sql, PyObject *__pyx_v_binds, PyObject *__pyx_v_timeout) { struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0; PyObject *__pyx_v_result = NULL; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_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, 15004, __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, 15004, __pyx_L1_error) __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledReader_7execute, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledReader_execute, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[267])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 15004, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25); #endif __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_25, __pyx_mstate_global->__pyx_tuple[63]); __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_25, __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_25) < (0)) __PYX_ERR(0, 15004, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
15005: """
15006: Run a statement on the lease's connection and discard whatever
15007: it returns.
15008:
15009: Mirrors :meth:`QuestDB.execute`, including the
15010: :class:`ExecDone` ``(op_type, rows_affected)`` return value. The
15011: result is drained
15012: to its clean end, so the lease stays usable for the next call,
15013: and the connection's SYMBOL dictionary is left untouched — an
15014: interleaved statement does not invalidate a warm dictionary
15015: built with ``reset_symbol_dict=False``.
15016: """
15017: cdef QuestDB handle
+15018: with self._lock:
/*with:*/ {
__pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15018, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = NULL;
__pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 15018, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15018, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledReader.execute", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4) < 0) __PYX_ERR(0, 15018, __pyx_L9_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_4);
{
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, 15018, __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, 15018, __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, 15018, __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, 15018, __pyx_L9_except_error)
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L8_exception_handled;
}
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L1_error;
__pyx_L11_try_return:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L4_return;
__pyx_L8_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_1) {
__pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 15018, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
goto __pyx_L6;
}
__pyx_L4_return: {
__pyx_t_8 = __pyx_r;
__pyx_r = 0;
if (__pyx_t_1) {
__pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 15018, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
}
__pyx_r = __pyx_t_8;
__pyx_t_8 = 0;
goto __pyx_L0;
}
__pyx_L6:;
}
goto __pyx_L26;
__pyx_L3_error:;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L1_error;
__pyx_L26:;
}
+15019: self._check_open('execute')
__pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_execute_2); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 15019, __pyx_L7_error)
+15020: handle = self._enter_call_locked()
__pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15020, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_2); __pyx_t_2 = 0;
15021: # Held for the whole statement, as in every method of a lease:
15022: # the call count is then visible only to the thread running it.
+15023: try:
/*try:*/ {
+15024: result = self.query(
__pyx_t_4 = ((PyObject *)__pyx_v_self);
__Pyx_INCREF(__pyx_t_4);
/* … */
#endif
__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[46];
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 15024, __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, 15024, __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;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15024, __pyx_L14_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_v_result = __pyx_t_2;
__pyx_t_2 = 0;
+15025: sql, binds, reset_symbol_dict=False, timeout=timeout)
#if CYTHON_VECTORCALL
+15026: try:
/*try:*/ {
+15027: result._drain()
__pyx_t_3 = __pyx_v_result;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_drain_2, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15027, __pyx_L17_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+15028: return result.exec_done
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_result, __pyx_mstate_global->__pyx_n_u_exec_done); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15028, __pyx_L17_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L16_return; }
15029: finally:
+15030: result.close()
/*finally:*/ {
__pyx_L17_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18);
if ( unlikely(__Pyx_GetException(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15) < 0)) __Pyx_ErrFetch(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__pyx_t_10 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_12 = __pyx_filename;
{
__pyx_t_3 = __pyx_v_result;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_close, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15030, __pyx_L20_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
}
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ErrRestore(__pyx_t_13, __pyx_t_14, __pyx_t_15);
__pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
__pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_12;
goto __pyx_L14_error;
__pyx_L20_error:;
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
goto __pyx_L14_error;
}
__pyx_L16_return: {
__pyx_t_18 = __pyx_r;
__pyx_r = 0;
__pyx_t_3 = __pyx_v_result;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_close, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15030, __pyx_L14_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_r = __pyx_t_18;
__pyx_t_18 = 0;
goto __pyx_L13_return;
}
}
}
15031: finally:
+15032: self._exit_call_locked(handle)
/*finally:*/ {
__pyx_L14_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_14, &__pyx_t_13);
if ( unlikely(__Pyx_GetException(&__pyx_t_18, &__pyx_t_17, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_18, &__pyx_t_17, &__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_13);
__pyx_t_11 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_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, 15032, __pyx_L22_error)
}
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_15, __pyx_t_14, __pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_ErrRestore(__pyx_t_18, __pyx_t_17, __pyx_t_16);
__pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0;
__pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_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, 15032, __pyx_L7_error)
__pyx_r = __pyx_t_13;
__pyx_t_13 = 0;
goto __pyx_L11_try_return;
}
}
15033:
+15034: def close(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12PooledReader_9close(PyObject *__pyx_v_self, #if CYTHON_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_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("questdb._client.PooledReader.close", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_handle); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledReader_9close, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledReader_close, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[268])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 15034, __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_PooledReader, __pyx_mstate_global->__pyx_n_u_close, __pyx_t_25) < (0)) __PYX_ERR(0, 15034, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
15035: """
15036: Release the lease's reader connection. Idempotent.
15037:
15038: A still-open (undrained) last result is freed first, which
15039: tears down the connection; a connection whose last query reached
15040: its terminal (a clean drain, a successful ``cancel()``, or a
15041: server-side error) is returned to the pool, any other is dropped
15042: and the pool refills on demand.
15043: """
15044: cdef QuestDB handle
15045: # Reject re-entry from a cursor operation on this thread before
15046: # waiting for another thread's lease lock, and check again under the
15047: # lock in _release_locked().
+15048: if self._query_blocks():
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_query_blocks(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 15048, __pyx_L1_error)
if (unlikely(__pyx_t_1)) {
/* … */
}
+15049: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 15049, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+15050: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 15050, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 15050, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_PooledReader_close_cannot_releas}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15049, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 15049, __pyx_L1_error)
15051: 'PooledReader.close() cannot release a reader during a query.')
+15052: if self._last_cursor is not None:
__pyx_t_1 = (((PyObject *)__pyx_v_self->_last_cursor) != Py_None);
if (__pyx_t_1) {
/* … */
}
+15053: self._last_cursor._check_not_driving(
__pyx_t_9.__pyx_n = 1;
__pyx_t_9.check_lock = 1;
__pyx_t_8 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_self->_last_cursor->__pyx_vtab)->_check_not_driving(__pyx_v_self->_last_cursor, __pyx_mstate_global->__pyx_kp_u_PooledReader_close, &__pyx_t_9); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 15053, __pyx_L1_error)
15054: 'PooledReader.close', check_lock=True)
+15055: with self._lock:
/*with:*/ {
__pyx_t_10 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 15055, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_4 = NULL;
__pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 15055, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_6))) {
__pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
assert(__pyx_t_4);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
__Pyx_INCREF(__pyx_t_4);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15055, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
goto __pyx_L14_try_end;
__pyx_L9_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledReader.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_6, &__pyx_t_4) < 0) __PYX_ERR(0, 15055, __pyx_L11_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_4);
{
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, 15055, __pyx_L11_except_error)
__Pyx_GOTREF(__pyx_t_3);
}
__pyx_t_22 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_3, NULL);
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 15055, __pyx_L11_except_error)
__Pyx_GOTREF(__pyx_t_22);
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_22);
__Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
if (__pyx_t_1 < (0)) __PYX_ERR(0, 15055, __pyx_L11_except_error)
__pyx_t_23 = (!__pyx_t_1);
if (unlikely(__pyx_t_23)) {
__Pyx_GIVEREF(__pyx_t_2);
__Pyx_GIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_6, __pyx_t_4);
__pyx_t_2 = 0; __pyx_t_6 = 0; __pyx_t_4 = 0;
__PYX_ERR(0, 15055, __pyx_L11_except_error)
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L10_exception_handled;
}
__pyx_L11_except_error:;
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
goto __pyx_L1_error;
__pyx_L10_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
__pyx_L14_try_end:;
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_10) {
__pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 15055, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_13);
__Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
}
goto __pyx_L8;
}
__pyx_L8:;
}
goto __pyx_L23;
__pyx_L5_error:;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
goto __pyx_L1_error;
__pyx_L23:;
}
+15056: self._check_not_mid_call('close')
__pyx_t_8 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_check_not_mid_call(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_close); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 15056, __pyx_L9_error)
+15057: handle = self._enter_call_locked()
__pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15057, __pyx_L9_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_2); __pyx_t_2 = 0;
+15058: try:
/*try:*/ {
+15059: self._release_locked()
((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_release_locked(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 15059, __pyx_L16_error)
}
15060: finally:
+15061: self._exit_call_locked(handle)
/*finally:*/ {
/*normal exit:*/{
((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 15061, __pyx_L9_error)
goto __pyx_L17;
}
__pyx_L16_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_ExceptionSwap(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
if ( unlikely(__Pyx_GetException(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19) < 0)) __Pyx_ErrFetch(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_19);
__Pyx_XGOTREF(__pyx_t_20);
__Pyx_XGOTREF(__pyx_t_21);
__Pyx_XGOTREF(__pyx_t_22);
__pyx_t_14 = __pyx_lineno; __pyx_t_15 = __pyx_clineno; __pyx_t_16 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 15061, __pyx_L19_error)
}
__Pyx_XGIVEREF(__pyx_t_20);
__Pyx_XGIVEREF(__pyx_t_21);
__Pyx_XGIVEREF(__pyx_t_22);
__Pyx_ExceptionReset(__pyx_t_20, __pyx_t_21, __pyx_t_22);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ErrRestore(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0;
__pyx_lineno = __pyx_t_14; __pyx_clineno = __pyx_t_15; __pyx_filename = __pyx_t_16;
goto __pyx_L9_error;
__pyx_L19_error:;
__Pyx_XGIVEREF(__pyx_t_20);
__Pyx_XGIVEREF(__pyx_t_21);
__Pyx_XGIVEREF(__pyx_t_22);
__Pyx_ExceptionReset(__pyx_t_20, __pyx_t_21, __pyx_t_22);
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0;
goto __pyx_L9_error;
}
__pyx_L17:;
}
15062:
+15063: def __exit__(self, exc_type, exc_val, exc_tb):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledReader_11__exit__(PyObject *__pyx_v_self,
#if CYTHON_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, 15063, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 15063, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 15063, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 15063, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__exit__", 0) < (0)) __PYX_ERR(0, 15063, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, i); __PYX_ERR(0, 15063, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 3)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 15063, __pyx_L3_error)
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 15063, __pyx_L3_error)
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 15063, __pyx_L3_error)
}
__pyx_v_exc_type = values[0];
__pyx_v_exc_val = values[1];
__pyx_v_exc_tb = values[2];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 15063, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.PooledReader.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_12PooledReader_10__exit__(((struct __pyx_obj_7questdb_7_client_PooledReader *)__pyx_v_self), __pyx_v_exc_type, __pyx_v_exc_val, __pyx_v_exc_tb);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_12PooledReader_10__exit__(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_exc_type, CYTHON_UNUSED PyObject *__pyx_v_exc_val, CYTHON_UNUSED PyObject *__pyx_v_exc_tb) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.PooledReader.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledReader_11__exit__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledReader___exit, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[269])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 15063, __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_PooledReader, __pyx_mstate_global->__pyx_n_u_exit, __pyx_t_25) < (0)) __PYX_ERR(0, 15063, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
+15064: self.close()
__pyx_t_2 = ((PyObject *)__pyx_v_self); __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_close, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15064, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
15065:
+15066: def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_7questdb_7_client_12PooledReader_13__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7questdb_7_client_12PooledReader_13__dealloc__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_pf_7questdb_7_client_12PooledReader_12__dealloc__(((struct __pyx_obj_7questdb_7_client_PooledReader *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
}
static void __pyx_pf_7questdb_7_client_12PooledReader_12__dealloc__(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self) {
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_WriteUnraisable("questdb._client.PooledReader.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
+15067: if self._lock is not None:
__pyx_t_1 = (__pyx_v_self->_lock != Py_None);
if (__pyx_t_1) {
/* … */
}
+15068: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L1_error;
__pyx_L5_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
__pyx_L9_try_end:;
}
+15069: with self._lock:
/*with:*/ {
__pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 15069, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_7 = NULL;
__pyx_t_8 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 15069, __pyx_L10_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_9 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_8))) {
__pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8);
assert(__pyx_t_7);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
__Pyx_INCREF(__pyx_t_7);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
__pyx_t_9 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
__pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_9, (1-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 15069, __pyx_L10_error)
__Pyx_GOTREF(__pyx_t_6);
}
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_5) {
__pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 15069, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_12);
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
}
goto __pyx_L13;
}
__pyx_L13:;
}
goto __pyx_L20;
__pyx_L10_error:;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L4_error;
__pyx_L20:;
}
+15070: self._release_finalizer_locked()
((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_release_finalizer_locked(__pyx_v_self);
+15071: except KeyboardInterrupt:
__pyx_t_13 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_KeyboardInterrupt)))); if (__pyx_t_13) { __Pyx_AddTraceback("questdb._client.PooledReader.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_8, &__pyx_t_7) < 0) __PYX_ERR(0, 15071, __pyx_L6_except_error) __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_8); __Pyx_XGOTREF(__pyx_t_7);
+15072: _rearm_interrupt()
__pyx_f_7questdb_7_client__rearm_interrupt();
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
goto __pyx_L5_exception_handled;
}
goto __pyx_L6_except_error;
15073:
15074:
+15075: def _debug_new_pooled_reader_finalizer_owner(
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_125_debug_new_pooled_reader_finalizer_owner(PyObject *__pyx_self, #if CYTHON_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_124_debug_new_pooled_reader_finalizer_owner, "Internal test seam for PooledReader\047s non-blocking GC path."); static PyMethodDef __pyx_mdef_7questdb_7_client_125_debug_new_pooled_reader_finalizer_owner = {"_debug_new_pooled_reader_finalizer_owner", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_125_debug_new_pooled_reader_finalizer_owner, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_124_debug_new_pooled_reader_finalizer_owner}; static PyObject *__pyx_pw_7questdb_7_client_125_debug_new_pooled_reader_finalizer_owner(PyObject *__pyx_self, #if CYTHON_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__CursorHandle *__pyx_v_cursor_handle = 0; PyObject *__pyx_v_client = 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_new_pooled_reader_finalizer_owner (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_cursor_handle,&__pyx_mstate_global->__pyx_n_u_client,0}; PyObject* values[2] = {0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 15075, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 15075, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 15075, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_new_pooled_reader_finalizer_owner", 0) < (0)) __PYX_ERR(0, 15075, __pyx_L3_error) /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_124_debug_new_pooled_reader_finalizer_owner(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_cursor_handle, PyObject *__pyx_v_client) { struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_lease = 0; struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_v_reader = 0; struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("questdb._client._debug_new_pooled_reader_finalizer_owner", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_lease); __Pyx_XDECREF((PyObject *)__pyx_v_reader); __Pyx_XDECREF((PyObject *)__pyx_v_handle); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_125_debug_new_pooled_reader_finalizer_owner, 0, __pyx_mstate_global->__pyx_n_u_debug_new_pooled_reader_finaliz, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[272])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 15075, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25); #endif __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_25, __pyx_mstate_global->__pyx_tuple[63]); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_new_pooled_reader_finaliz, __pyx_t_25) < (0)) __PYX_ERR(0, 15075, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
+15076: _CursorHandle cursor_handle, object client=None):
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_new_pooled_reader_finalizer_owner", 0, 1, 2, i); __PYX_ERR(0, 15075, __pyx_L3_error) } } } else { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 15075, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 15075, __pyx_L3_error) break; default: goto __pyx_L5_argtuple_error; } if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); } __pyx_v_cursor_handle = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)values[0]); __pyx_v_client = values[1]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_debug_new_pooled_reader_finalizer_owner", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 15075, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client._debug_new_pooled_reader_finalizer_owner", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cursor_handle), __pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle, 1, "cursor_handle", 0))) __PYX_ERR(0, 15076, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_124_debug_new_pooled_reader_finalizer_owner(__pyx_self, __pyx_v_cursor_handle, __pyx_v_client);
15077: """Internal test seam for PooledReader's non-blocking GC path."""
+15078: cdef PooledReader lease = PooledReader.__new__(PooledReader)
__pyx_t_1 = ((PyObject *)__pyx_tp_new_7questdb_7_client_PooledReader(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledReader), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15078, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_lease = ((struct __pyx_obj_7questdb_7_client_PooledReader *)__pyx_t_1); __pyx_t_1 = 0;
+15079: cdef _ReaderHandle reader = _ReaderHandle()
__pyx_t_2 = NULL;
__pyx_t_3 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client__ReaderHandle, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15079, __pyx_L1_error)
__Pyx_GOTREF((PyObject *)__pyx_t_1);
}
__pyx_v_reader = ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)__pyx_t_1);
__pyx_t_1 = 0;
15080: cdef QuestDB handle
+15081: cursor_handle._attach(NULL, reader, False)
((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_cursor_handle->__pyx_vtab)->_attach(__pyx_v_cursor_handle, NULL, __pyx_v_reader, 0);
+15082: if client is None:
__pyx_t_4 = (__pyx_v_client == Py_None);
if (__pyx_t_4) {
/* … */
goto __pyx_L3;
}
+15083: lease._attach(None, reader)
((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_lease->__pyx_vtab)->_attach(__pyx_v_lease, ((struct __pyx_obj_7questdb_7_client_QuestDB *)Py_None), __pyx_v_reader);
15084: else:
+15085: handle = client
/*else*/ {
__pyx_t_1 = __pyx_v_client;
__Pyx_INCREF(__pyx_t_1);
if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB))))) __PYX_ERR(0, 15085, __pyx_L1_error)
__pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_1);
__pyx_t_1 = 0;
+15086: handle._begin_db_use(
__pyx_t_6.__pyx_n = 1;
__pyx_t_6.scoped = 0;
__pyx_t_5 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_handle->__pyx_vtab)->_begin_db_use(__pyx_v_handle, __pyx_mstate_global->__pyx_n_u_debug_new_pooled_reader_finaliz, &__pyx_t_6); if (unlikely(__pyx_t_5 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 15086, __pyx_L1_error)
15087: '_debug_new_pooled_reader_finalizer_owner', scoped=False)
+15088: lease._attach(handle, reader)
((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_lease->__pyx_vtab)->_attach(__pyx_v_lease, __pyx_v_handle, __pyx_v_reader); } __pyx_L3:;
+15089: lease._last_cursor = cursor_handle
__Pyx_INCREF((PyObject *)__pyx_v_cursor_handle); __Pyx_GIVEREF((PyObject *)__pyx_v_cursor_handle); __Pyx_GOTREF((PyObject *)__pyx_v_lease->_last_cursor); __Pyx_DECREF_SET(__pyx_v_lease->_last_cursor, __pyx_v_cursor_handle);
+15090: 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_L0;
15091:
15092:
+15093: def _debug_registered_connection_listener(Sender sender):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_127_debug_registered_connection_listener(PyObject *__pyx_self, #if CYTHON_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_126_debug_registered_connection_listener, "Internal test seam: the target the native dispatcher receives for\n ``sender``\047s ``connection_listener``, or ``None``.\n\n That target is the sender\047s dispatch context, which\n `_debug_connection_event_dispatch` dispatches exactly as the sender\047s\n own dispatcher thread would."); static PyMethodDef __pyx_mdef_7questdb_7_client_127_debug_registered_connection_listener = {"_debug_registered_connection_listener", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_127_debug_registered_connection_listener, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_126_debug_registered_connection_listener}; static PyObject *__pyx_pw_7questdb_7_client_127_debug_registered_connection_listener(PyObject *__pyx_self, #if CYTHON_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_Sender *__pyx_v_sender = 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_registered_connection_listener (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_sender,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 15093, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 15093, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_registered_connection_listener", 0) < (0)) __PYX_ERR(0, 15093, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_registered_connection_listener", 1, 1, 1, i); __PYX_ERR(0, 15093, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 15093, __pyx_L3_error) } __pyx_v_sender = ((struct __pyx_obj_7questdb_7_client_Sender *)values[0]); } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_debug_registered_connection_listener", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 15093, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client._debug_registered_connection_listener", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sender), __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, 1, "sender", 0))) __PYX_ERR(0, 15093, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_126_debug_registered_connection_listener(__pyx_self, __pyx_v_sender); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_126_debug_registered_connection_listener(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_127_debug_registered_connection_listener, 0, __pyx_mstate_global->__pyx_n_u_debug_registered_connection_lis, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[273])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 15093, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_registered_connection_lis, __pyx_t_25) < (0)) __PYX_ERR(0, 15093, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
15094: """Internal test seam: the target the native dispatcher receives for
15095: ``sender``'s ``connection_listener``, or ``None``.
15096:
15097: That target is the sender's dispatch context, which
15098: `_debug_connection_event_dispatch` dispatches exactly as the sender's
15099: own dispatcher thread would."""
+15100: if sender._connection_listener is None:
__pyx_t_1 = (__pyx_v_sender->_connection_listener == Py_None);
if (__pyx_t_1) {
/* … */
}
+15101: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+15102: return sender._dispatch_context
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_sender->_dispatch_context);
__pyx_r = __pyx_v_sender->_dispatch_context;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;